authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-20 23:15:07-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-20 23:15:07-05:00
log6118b11afa1bbceab6ab4681f1f79e68aa131b65
treed6e0f33a77035269271904194ea82776b4044075
parent89e107ee4ecdc888007958bd353e293856f0766f
signature Commit is signed but in an unrecognized format.

Revert "aarch64: remove CPU features that are actually just CPUs"

This reverts commit 6dd514ac8aa3ee2e5c6fd0374469d361ccfce5b9. This strategy won't work for arm 32-bit; instead need to try to figure out how to get more bits into the bit set.

1 files changed, 462 insertions(+), 256 deletions(-)

lib/std/target/aarch64.zig+462-256
......@@ -2,6 +2,14 @@ const std = @import("../std.zig");
22const Cpu = std.Target.Cpu;
33
44pub const Feature = enum {
5 a35,
6 a53,
7 a55,
8 a57,
9 a72,
10 a73,
11 a75,
12 a76,
513 aes,
614 aggressive_fma,
715 alternate_sextload_cvt_f32_pattern,
......@@ -27,10 +35,16 @@ pub const Feature = enum {
2735 crc,
2836 crypto,
2937 custom_cheap_as_move,
38 cyclone,
3039 disable_latency_sched_heuristic,
3140 dit,
3241 dotprod,
3342 exynos_cheap_as_move,
43 exynosm1,
44 exynosm2,
45 exynosm3,
46 exynosm4,
47 falkor,
3448 fmi,
3549 force_32bit_jump_tables,
3650 fp_armv8,
......@@ -44,6 +58,7 @@ pub const Feature = enum {
4458 fuse_csel,
4559 fuse_literals,
4660 jsconv,
61 kryo,
4762 lor,
4863 lse,
4964 lsl_fast,
......@@ -88,6 +103,7 @@ pub const Feature = enum {
88103 reserve_x6,
89104 reserve_x7,
90105 reserve_x9,
106 saphira,
91107 sb,
92108 sel2,
93109 sha2,
......@@ -106,11 +122,17 @@ pub const Feature = enum {
106122 sve2_bitperm,
107123 sve2_sha3,
108124 sve2_sm4,
125 thunderx,
126 thunderx2t99,
127 thunderxt81,
128 thunderxt83,
129 thunderxt88,
109130 tlb_rmi,
110131 tpidr_el1,
111132 tpidr_el2,
112133 tpidr_el3,
113134 tracev8_4,
135 tsv110,
114136 uaops,
115137 use_aa,
116138 use_postra_scheduler,
......@@ -134,6 +156,134 @@ pub const all_features = blk: {
134156 const len = @typeInfo(Feature).Enum.fields.len;
135157 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
136158 var result: [len]Cpu.Feature = undefined;
159 result[@enumToInt(Feature.a35)] = .{
160 .index = @enumToInt(Feature.a35),
161 .name = @tagName(Feature.a35),
162 .llvm_name = "a35",
163 .description = "Cortex-A35 ARM processors",
164 .dependencies = featureSet(&[_]Feature{
165 .crc,
166 .crypto,
167 .fp_armv8,
168 .neon,
169 .perfmon,
170 }),
171 };
172 result[@enumToInt(Feature.a53)] = .{
173 .index = @enumToInt(Feature.a53),
174 .name = @tagName(Feature.a53),
175 .llvm_name = "a53",
176 .description = "Cortex-A53 ARM processors",
177 .dependencies = featureSet(&[_]Feature{
178 .balance_fp_ops,
179 .crc,
180 .crypto,
181 .custom_cheap_as_move,
182 .fp_armv8,
183 .fuse_aes,
184 .neon,
185 .perfmon,
186 .use_aa,
187 .use_postra_scheduler,
188 }),
189 };
190 result[@enumToInt(Feature.a55)] = .{
191 .index = @enumToInt(Feature.a55),
192 .name = @tagName(Feature.a55),
193 .llvm_name = "a55",
194 .description = "Cortex-A55 ARM processors",
195 .dependencies = featureSet(&[_]Feature{
196 .crypto,
197 .dotprod,
198 .fp_armv8,
199 .fullfp16,
200 .fuse_aes,
201 .neon,
202 .perfmon,
203 .rcpc,
204 .v8_2a,
205 }),
206 };
207 result[@enumToInt(Feature.a57)] = .{
208 .index = @enumToInt(Feature.a57),
209 .name = @tagName(Feature.a57),
210 .llvm_name = "a57",
211 .description = "Cortex-A57 ARM processors",
212 .dependencies = featureSet(&[_]Feature{
213 .balance_fp_ops,
214 .crc,
215 .crypto,
216 .custom_cheap_as_move,
217 .fp_armv8,
218 .fuse_aes,
219 .fuse_literals,
220 .neon,
221 .perfmon,
222 .predictable_select_expensive,
223 .use_postra_scheduler,
224 }),
225 };
226 result[@enumToInt(Feature.a72)] = .{
227 .index = @enumToInt(Feature.a72),
228 .name = @tagName(Feature.a72),
229 .llvm_name = "a72",
230 .description = "Cortex-A72 ARM processors",
231 .dependencies = featureSet(&[_]Feature{
232 .crc,
233 .crypto,
234 .fp_armv8,
235 .fuse_aes,
236 .neon,
237 .perfmon,
238 }),
239 };
240 result[@enumToInt(Feature.a73)] = .{
241 .index = @enumToInt(Feature.a73),
242 .name = @tagName(Feature.a73),
243 .llvm_name = "a73",
244 .description = "Cortex-A73 ARM processors",
245 .dependencies = featureSet(&[_]Feature{
246 .crc,
247 .crypto,
248 .fp_armv8,
249 .fuse_aes,
250 .neon,
251 .perfmon,
252 }),
253 };
254 result[@enumToInt(Feature.a75)] = .{
255 .index = @enumToInt(Feature.a75),
256 .name = @tagName(Feature.a75),
257 .llvm_name = "a75",
258 .description = "Cortex-A75 ARM processors",
259 .dependencies = featureSet(&[_]Feature{
260 .crypto,
261 .dotprod,
262 .fp_armv8,
263 .fullfp16,
264 .fuse_aes,
265 .neon,
266 .perfmon,
267 .rcpc,
268 .v8_2a,
269 }),
270 };
271 result[@enumToInt(Feature.a76)] = .{
272 .index = @enumToInt(Feature.a76),
273 .name = @tagName(Feature.a76),
274 .llvm_name = "a76",
275 .description = "Cortex-A76 ARM processors",
276 .dependencies = featureSet(&[_]Feature{
277 .crypto,
278 .dotprod,
279 .fp_armv8,
280 .fullfp16,
281 .neon,
282 .rcpc,
283 .ssbs,
284 .v8_2a,
285 }),
286 };
137287 result[@enumToInt(Feature.aes)] = .{
138288 .index = @enumToInt(Feature.aes),
139289 .name = @tagName(Feature.aes),
......@@ -317,6 +467,27 @@ pub const all_features = blk: {
317467 .description = "Use custom handling of cheap instructions",
318468 .dependencies = 0,
319469 };
470 result[@enumToInt(Feature.cyclone)] = .{
471 .index = @enumToInt(Feature.cyclone),
472 .name = @tagName(Feature.cyclone),
473 .llvm_name = "cyclone",
474 .description = "Cyclone",
475 .dependencies = featureSet(&[_]Feature{
476 .alternate_sextload_cvt_f32_pattern,
477 .arith_bcc_fusion,
478 .arith_cbz_fusion,
479 .crypto,
480 .disable_latency_sched_heuristic,
481 .fp_armv8,
482 .fuse_aes,
483 .fuse_crypto_eor,
484 .neon,
485 .perfmon,
486 .zcm,
487 .zcz,
488 .zcz_fp_workaround,
489 }),
490 };
320491 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{
321492 .index = @enumToInt(Feature.disable_latency_sched_heuristic),
322493 .name = @tagName(Feature.disable_latency_sched_heuristic),
......@@ -347,6 +518,109 @@ pub const all_features = blk: {
347518 .custom_cheap_as_move,
348519 }),
349520 };
521 result[@enumToInt(Feature.exynosm1)] = .{
522 .index = @enumToInt(Feature.exynosm1),
523 .name = @tagName(Feature.exynosm1),
524 .llvm_name = "exynosm1",
525 .description = "Samsung Exynos-M1 processors",
526 .dependencies = featureSet(&[_]Feature{
527 .crc,
528 .crypto,
529 .exynos_cheap_as_move,
530 .force_32bit_jump_tables,
531 .fuse_aes,
532 .perfmon,
533 .slow_misaligned_128store,
534 .slow_paired_128,
535 .use_postra_scheduler,
536 .use_reciprocal_square_root,
537 .zcz_fp,
538 }),
539 };
540 result[@enumToInt(Feature.exynosm2)] = .{
541 .index = @enumToInt(Feature.exynosm2),
542 .name = @tagName(Feature.exynosm2),
543 .llvm_name = "exynosm2",
544 .description = "Samsung Exynos-M2 processors",
545 .dependencies = featureSet(&[_]Feature{
546 .crc,
547 .crypto,
548 .exynos_cheap_as_move,
549 .force_32bit_jump_tables,
550 .fuse_aes,
551 .perfmon,
552 .slow_misaligned_128store,
553 .slow_paired_128,
554 .use_postra_scheduler,
555 .zcz_fp,
556 }),
557 };
558 result[@enumToInt(Feature.exynosm3)] = .{
559 .index = @enumToInt(Feature.exynosm3),
560 .name = @tagName(Feature.exynosm3),
561 .llvm_name = "exynosm3",
562 .description = "Samsung Exynos-M3 processors",
563 .dependencies = featureSet(&[_]Feature{
564 .crc,
565 .crypto,
566 .exynos_cheap_as_move,
567 .force_32bit_jump_tables,
568 .fuse_address,
569 .fuse_aes,
570 .fuse_csel,
571 .fuse_literals,
572 .lsl_fast,
573 .perfmon,
574 .predictable_select_expensive,
575 .use_postra_scheduler,
576 .zcz_fp,
577 }),
578 };
579 result[@enumToInt(Feature.exynosm4)] = .{
580 .index = @enumToInt(Feature.exynosm4),
581 .name = @tagName(Feature.exynosm4),
582 .llvm_name = "exynosm4",
583 .description = "Samsung Exynos-M4 processors",
584 .dependencies = featureSet(&[_]Feature{
585 .arith_bcc_fusion,
586 .arith_cbz_fusion,
587 .crypto,
588 .dotprod,
589 .exynos_cheap_as_move,
590 .force_32bit_jump_tables,
591 .fullfp16,
592 .fuse_address,
593 .fuse_aes,
594 .fuse_arith_logic,
595 .fuse_csel,
596 .fuse_literals,
597 .lsl_fast,
598 .perfmon,
599 .use_postra_scheduler,
600 .v8_2a,
601 .zcz,
602 }),
603 };
604 result[@enumToInt(Feature.falkor)] = .{
605 .index = @enumToInt(Feature.falkor),
606 .name = @tagName(Feature.falkor),
607 .llvm_name = "falkor",
608 .description = "Qualcomm Falkor processors",
609 .dependencies = featureSet(&[_]Feature{
610 .crc,
611 .crypto,
612 .custom_cheap_as_move,
613 .fp_armv8,
614 .lsl_fast,
615 .neon,
616 .perfmon,
617 .predictable_select_expensive,
618 .rdm,
619 .slow_strqro_store,
620 .use_postra_scheduler,
621 .zcz,
622 }),
623 };
350624 result[@enumToInt(Feature.fmi)] = .{
351625 .index = @enumToInt(Feature.fmi),
352626 .name = @tagName(Feature.fmi),
......@@ -444,6 +718,24 @@ pub const all_features = blk: {
444718 .fp_armv8,
445719 }),
446720 };
721 result[@enumToInt(Feature.kryo)] = .{
722 .index = @enumToInt(Feature.kryo),
723 .name = @tagName(Feature.kryo),
724 .llvm_name = "kryo",
725 .description = "Qualcomm Kryo processors",
726 .dependencies = featureSet(&[_]Feature{
727 .crc,
728 .crypto,
729 .custom_cheap_as_move,
730 .fp_armv8,
731 .lsl_fast,
732 .neon,
733 .perfmon,
734 .predictable_select_expensive,
735 .use_postra_scheduler,
736 .zcz,
737 }),
738 };
447739 result[@enumToInt(Feature.lor)] = .{
448740 .index = @enumToInt(Feature.lor),
449741 .name = @tagName(Feature.lor),
......@@ -760,6 +1052,25 @@ pub const all_features = blk: {
7601052 .description = "Reserve X9, making it unavailable as a GPR",
7611053 .dependencies = 0,
7621054 };
1055 result[@enumToInt(Feature.saphira)] = .{
1056 .index = @enumToInt(Feature.saphira),
1057 .name = @tagName(Feature.saphira),
1058 .llvm_name = "saphira",
1059 .description = "Qualcomm Saphira processors",
1060 .dependencies = featureSet(&[_]Feature{
1061 .crypto,
1062 .custom_cheap_as_move,
1063 .fp_armv8,
1064 .lsl_fast,
1065 .neon,
1066 .perfmon,
1067 .predictable_select_expensive,
1068 .spe,
1069 .use_postra_scheduler,
1070 .v8_4a,
1071 .zcz,
1072 }),
1073 };
7631074 result[@enumToInt(Feature.sb)] = .{
7641075 .index = @enumToInt(Feature.sb),
7651076 .name = @tagName(Feature.sb),
......@@ -906,28 +1217,106 @@ pub const all_features = blk: {
9061217 .sve2,
9071218 }),
9081219 };
909 result[@enumToInt(Feature.tlb_rmi)] = .{
910 .index = @enumToInt(Feature.tlb_rmi),
911 .name = @tagName(Feature.tlb_rmi),
912 .llvm_name = "tlb-rmi",
913 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
914 .dependencies = 0,
915 };
916 result[@enumToInt(Feature.tpidr_el1)] = .{
917 .index = @enumToInt(Feature.tpidr_el1),
918 .name = @tagName(Feature.tpidr_el1),
919 .llvm_name = "tpidr-el1",
920 .description = "Permit use of TPIDR_EL1 for the TLS base",
921 .dependencies = 0,
1220 result[@enumToInt(Feature.thunderx)] = .{
1221 .index = @enumToInt(Feature.thunderx),
1222 .name = @tagName(Feature.thunderx),
1223 .llvm_name = "thunderx",
1224 .description = "Cavium ThunderX processors",
1225 .dependencies = featureSet(&[_]Feature{
1226 .crc,
1227 .crypto,
1228 .fp_armv8,
1229 .neon,
1230 .perfmon,
1231 .predictable_select_expensive,
1232 .use_postra_scheduler,
1233 }),
9221234 };
923 result[@enumToInt(Feature.tpidr_el2)] = .{
924 .index = @enumToInt(Feature.tpidr_el2),
925 .name = @tagName(Feature.tpidr_el2),
926 .llvm_name = "tpidr-el2",
927 .description = "Permit use of TPIDR_EL2 for the TLS base",
928 .dependencies = 0,
1235 result[@enumToInt(Feature.thunderx2t99)] = .{
1236 .index = @enumToInt(Feature.thunderx2t99),
1237 .name = @tagName(Feature.thunderx2t99),
1238 .llvm_name = "thunderx2t99",
1239 .description = "Cavium ThunderX2 processors",
1240 .dependencies = featureSet(&[_]Feature{
1241 .aggressive_fma,
1242 .arith_bcc_fusion,
1243 .crc,
1244 .crypto,
1245 .fp_armv8,
1246 .lse,
1247 .neon,
1248 .predictable_select_expensive,
1249 .use_postra_scheduler,
1250 .v8_1a,
1251 }),
9291252 };
930 result[@enumToInt(Feature.tpidr_el3)] = .{
1253 result[@enumToInt(Feature.thunderxt81)] = .{
1254 .index = @enumToInt(Feature.thunderxt81),
1255 .name = @tagName(Feature.thunderxt81),
1256 .llvm_name = "thunderxt81",
1257 .description = "Cavium ThunderX processors",
1258 .dependencies = featureSet(&[_]Feature{
1259 .crc,
1260 .crypto,
1261 .fp_armv8,
1262 .neon,
1263 .perfmon,
1264 .predictable_select_expensive,
1265 .use_postra_scheduler,
1266 }),
1267 };
1268 result[@enumToInt(Feature.thunderxt83)] = .{
1269 .index = @enumToInt(Feature.thunderxt83),
1270 .name = @tagName(Feature.thunderxt83),
1271 .llvm_name = "thunderxt83",
1272 .description = "Cavium ThunderX processors",
1273 .dependencies = featureSet(&[_]Feature{
1274 .crc,
1275 .crypto,
1276 .fp_armv8,
1277 .neon,
1278 .perfmon,
1279 .predictable_select_expensive,
1280 .use_postra_scheduler,
1281 }),
1282 };
1283 result[@enumToInt(Feature.thunderxt88)] = .{
1284 .index = @enumToInt(Feature.thunderxt88),
1285 .name = @tagName(Feature.thunderxt88),
1286 .llvm_name = "thunderxt88",
1287 .description = "Cavium ThunderX processors",
1288 .dependencies = featureSet(&[_]Feature{
1289 .crc,
1290 .crypto,
1291 .fp_armv8,
1292 .neon,
1293 .perfmon,
1294 .predictable_select_expensive,
1295 .use_postra_scheduler,
1296 }),
1297 };
1298 result[@enumToInt(Feature.tlb_rmi)] = .{
1299 .index = @enumToInt(Feature.tlb_rmi),
1300 .name = @tagName(Feature.tlb_rmi),
1301 .llvm_name = "tlb-rmi",
1302 .description = "Enable v8.4-A TLB Range and Maintenance Instructions",
1303 .dependencies = 0,
1304 };
1305 result[@enumToInt(Feature.tpidr_el1)] = .{
1306 .index = @enumToInt(Feature.tpidr_el1),
1307 .name = @tagName(Feature.tpidr_el1),
1308 .llvm_name = "tpidr-el1",
1309 .description = "Permit use of TPIDR_EL1 for the TLS base",
1310 .dependencies = 0,
1311 };
1312 result[@enumToInt(Feature.tpidr_el2)] = .{
1313 .index = @enumToInt(Feature.tpidr_el2),
1314 .name = @tagName(Feature.tpidr_el2),
1315 .llvm_name = "tpidr-el2",
1316 .description = "Permit use of TPIDR_EL2 for the TLS base",
1317 .dependencies = 0,
1318 };
1319 result[@enumToInt(Feature.tpidr_el3)] = .{
9311320 .index = @enumToInt(Feature.tpidr_el3),
9321321 .name = @tagName(Feature.tpidr_el3),
9331322 .llvm_name = "tpidr-el3",
......@@ -941,6 +1330,26 @@ pub const all_features = blk: {
9411330 .description = "Enable v8.4-A Trace extension",
9421331 .dependencies = 0,
9431332 };
1333 result[@enumToInt(Feature.tsv110)] = .{
1334 .index = @enumToInt(Feature.tsv110),
1335 .name = @tagName(Feature.tsv110),
1336 .llvm_name = "tsv110",
1337 .description = "HiSilicon TS-V110 processors",
1338 .dependencies = featureSet(&[_]Feature{
1339 .crypto,
1340 .custom_cheap_as_move,
1341 .dotprod,
1342 .fp_armv8,
1343 .fp16fml,
1344 .fullfp16,
1345 .fuse_aes,
1346 .neon,
1347 .perfmon,
1348 .spe,
1349 .use_postra_scheduler,
1350 .v8_2a,
1351 }),
1352 };
9441353 result[@enumToInt(Feature.uaops)] = .{
9451354 .index = @enumToInt(Feature.uaops),
9461355 .name = @tagName(Feature.uaops),
......@@ -1096,265 +1505,123 @@ pub const all_features = blk: {
10961505};
10971506
10981507pub const cpu = struct {
1508 pub const apple_latest = Cpu{
1509 .name = "apple_latest",
1510 .llvm_name = "apple-latest",
1511 .features = featureSet(&[_]Feature{
1512 .cyclone,
1513 }),
1514 };
10991515 pub const cortex_a35 = Cpu{
11001516 .name = "cortex_a35",
11011517 .llvm_name = "cortex-a35",
11021518 .features = featureSet(&[_]Feature{
1103 .crc,
1104 .crypto,
1105 .fp_armv8,
1106 .neon,
1107 .perfmon,
1519 .a35,
11081520 }),
11091521 };
11101522 pub const cortex_a53 = Cpu{
11111523 .name = "cortex_a53",
11121524 .llvm_name = "cortex-a53",
11131525 .features = featureSet(&[_]Feature{
1114 .balance_fp_ops,
1115 .crc,
1116 .crypto,
1117 .custom_cheap_as_move,
1118 .fp_armv8,
1119 .fuse_aes,
1120 .neon,
1121 .perfmon,
1122 .use_aa,
1123 .use_postra_scheduler,
1526 .a53,
11241527 }),
11251528 };
11261529 pub const cortex_a55 = Cpu{
11271530 .name = "cortex_a55",
11281531 .llvm_name = "cortex-a55",
11291532 .features = featureSet(&[_]Feature{
1130 .crypto,
1131 .dotprod,
1132 .fp_armv8,
1133 .fullfp16,
1134 .fuse_aes,
1135 .neon,
1136 .perfmon,
1137 .rcpc,
1138 .v8_2a,
1533 .a55,
11391534 }),
11401535 };
11411536 pub const cortex_a57 = Cpu{
11421537 .name = "cortex_a57",
11431538 .llvm_name = "cortex-a57",
11441539 .features = featureSet(&[_]Feature{
1145 .balance_fp_ops,
1146 .crc,
1147 .crypto,
1148 .custom_cheap_as_move,
1149 .fp_armv8,
1150 .fuse_aes,
1151 .fuse_literals,
1152 .neon,
1153 .perfmon,
1154 .predictable_select_expensive,
1155 .use_postra_scheduler,
1540 .a57,
11561541 }),
11571542 };
11581543 pub const cortex_a72 = Cpu{
11591544 .name = "cortex_a72",
11601545 .llvm_name = "cortex-a72",
11611546 .features = featureSet(&[_]Feature{
1162 .crc,
1163 .crypto,
1164 .fp_armv8,
1165 .fuse_aes,
1166 .neon,
1167 .perfmon,
1547 .a72,
11681548 }),
11691549 };
11701550 pub const cortex_a73 = Cpu{
11711551 .name = "cortex_a73",
11721552 .llvm_name = "cortex-a73",
11731553 .features = featureSet(&[_]Feature{
1174 .crc,
1175 .crypto,
1176 .fp_armv8,
1177 .fuse_aes,
1178 .neon,
1179 .perfmon,
1554 .a73,
11801555 }),
11811556 };
11821557 pub const cortex_a75 = Cpu{
11831558 .name = "cortex_a75",
11841559 .llvm_name = "cortex-a75",
11851560 .features = featureSet(&[_]Feature{
1186 .crypto,
1187 .dotprod,
1188 .fp_armv8,
1189 .fullfp16,
1190 .fuse_aes,
1191 .neon,
1192 .perfmon,
1193 .rcpc,
1194 .v8_2a,
1561 .a75,
11951562 }),
11961563 };
11971564 pub const cortex_a76 = Cpu{
11981565 .name = "cortex_a76",
11991566 .llvm_name = "cortex-a76",
12001567 .features = featureSet(&[_]Feature{
1201 .crypto,
1202 .dotprod,
1203 .fp_armv8,
1204 .fullfp16,
1205 .neon,
1206 .rcpc,
1207 .ssbs,
1208 .v8_2a,
1568 .a76,
12091569 }),
12101570 };
12111571 pub const cortex_a76ae = Cpu{
12121572 .name = "cortex_a76ae",
12131573 .llvm_name = "cortex-a76ae",
12141574 .features = featureSet(&[_]Feature{
1215 .crypto,
1216 .dotprod,
1217 .fp_armv8,
1218 .fullfp16,
1219 .neon,
1220 .rcpc,
1221 .ssbs,
1222 .v8_2a,
1575 .a76,
12231576 }),
12241577 };
12251578 pub const cyclone = Cpu{
12261579 .name = "cyclone",
12271580 .llvm_name = "cyclone",
12281581 .features = featureSet(&[_]Feature{
1229 .alternate_sextload_cvt_f32_pattern,
1230 .arith_bcc_fusion,
1231 .arith_cbz_fusion,
1232 .crypto,
1233 .disable_latency_sched_heuristic,
1234 .fp_armv8,
1235 .fuse_aes,
1236 .fuse_crypto_eor,
1237 .neon,
1238 .perfmon,
1239 .zcm,
1240 .zcz,
1241 .zcz_fp_workaround,
1582 .cyclone,
12421583 }),
12431584 };
12441585 pub const exynos_m1 = Cpu{
12451586 .name = "exynos_m1",
12461587 .llvm_name = "exynos-m1",
12471588 .features = featureSet(&[_]Feature{
1248 .crc,
1249 .crypto,
1250 .exynos_cheap_as_move,
1251 .force_32bit_jump_tables,
1252 .fuse_aes,
1253 .perfmon,
1254 .slow_misaligned_128store,
1255 .slow_paired_128,
1256 .use_postra_scheduler,
1257 .use_reciprocal_square_root,
1258 .zcz_fp,
1589 .exynosm1,
12591590 }),
12601591 };
12611592 pub const exynos_m2 = Cpu{
12621593 .name = "exynos_m2",
12631594 .llvm_name = "exynos-m2",
12641595 .features = featureSet(&[_]Feature{
1265 .crc,
1266 .crypto,
1267 .exynos_cheap_as_move,
1268 .force_32bit_jump_tables,
1269 .fuse_aes,
1270 .perfmon,
1271 .slow_misaligned_128store,
1272 .slow_paired_128,
1273 .use_postra_scheduler,
1274 .zcz_fp,
1596 .exynosm2,
12751597 }),
12761598 };
12771599 pub const exynos_m3 = Cpu{
12781600 .name = "exynos_m3",
12791601 .llvm_name = "exynos-m3",
12801602 .features = featureSet(&[_]Feature{
1281 .crc,
1282 .crypto,
1283 .exynos_cheap_as_move,
1284 .force_32bit_jump_tables,
1285 .fuse_address,
1286 .fuse_aes,
1287 .fuse_csel,
1288 .fuse_literals,
1289 .lsl_fast,
1290 .perfmon,
1291 .predictable_select_expensive,
1292 .use_postra_scheduler,
1293 .zcz_fp,
1603 .exynosm3,
12941604 }),
12951605 };
12961606 pub const exynos_m4 = Cpu{
12971607 .name = "exynos_m4",
12981608 .llvm_name = "exynos-m4",
12991609 .features = featureSet(&[_]Feature{
1300 .arith_bcc_fusion,
1301 .arith_cbz_fusion,
1302 .crypto,
1303 .dotprod,
1304 .exynos_cheap_as_move,
1305 .force_32bit_jump_tables,
1306 .fullfp16,
1307 .fuse_address,
1308 .fuse_aes,
1309 .fuse_arith_logic,
1310 .fuse_csel,
1311 .fuse_literals,
1312 .lsl_fast,
1313 .perfmon,
1314 .use_postra_scheduler,
1315 .v8_2a,
1316 .zcz,
1610 .exynosm4,
13171611 }),
13181612 };
13191613 pub const exynos_m5 = Cpu{
13201614 .name = "exynos_m5",
13211615 .llvm_name = "exynos-m5",
13221616 .features = featureSet(&[_]Feature{
1323 .arith_bcc_fusion,
1324 .arith_cbz_fusion,
1325 .crypto,
1326 .dotprod,
1327 .exynos_cheap_as_move,
1328 .force_32bit_jump_tables,
1329 .fullfp16,
1330 .fuse_address,
1331 .fuse_aes,
1332 .fuse_arith_logic,
1333 .fuse_csel,
1334 .fuse_literals,
1335 .lsl_fast,
1336 .perfmon,
1337 .use_postra_scheduler,
1338 .v8_2a,
1339 .zcz,
1617 .exynosm4,
13401618 }),
13411619 };
13421620 pub const falkor = Cpu{
13431621 .name = "falkor",
13441622 .llvm_name = "falkor",
13451623 .features = featureSet(&[_]Feature{
1346 .crc,
1347 .crypto,
1348 .custom_cheap_as_move,
1349 .fp_armv8,
1350 .lsl_fast,
1351 .neon,
1352 .perfmon,
1353 .predictable_select_expensive,
1354 .rdm,
1355 .slow_strqro_store,
1356 .use_postra_scheduler,
1357 .zcz,
1624 .falkor,
13581625 }),
13591626 };
13601627 pub const generic = Cpu{
......@@ -1372,119 +1639,56 @@ pub const cpu = struct {
13721639 .name = "kryo",
13731640 .llvm_name = "kryo",
13741641 .features = featureSet(&[_]Feature{
1375 .crc,
1376 .crypto,
1377 .custom_cheap_as_move,
1378 .fp_armv8,
1379 .lsl_fast,
1380 .neon,
1381 .perfmon,
1382 .predictable_select_expensive,
1383 .use_postra_scheduler,
1384 .zcz,
1642 .kryo,
13851643 }),
13861644 };
13871645 pub const saphira = Cpu{
13881646 .name = "saphira",
13891647 .llvm_name = "saphira",
13901648 .features = featureSet(&[_]Feature{
1391 .crypto,
1392 .custom_cheap_as_move,
1393 .fp_armv8,
1394 .lsl_fast,
1395 .neon,
1396 .perfmon,
1397 .predictable_select_expensive,
1398 .spe,
1399 .use_postra_scheduler,
1400 .v8_4a,
1401 .zcz,
1649 .saphira,
14021650 }),
14031651 };
14041652 pub const thunderx = Cpu{
14051653 .name = "thunderx",
14061654 .llvm_name = "thunderx",
14071655 .features = featureSet(&[_]Feature{
1408 .crc,
1409 .crypto,
1410 .fp_armv8,
1411 .neon,
1412 .perfmon,
1413 .predictable_select_expensive,
1414 .use_postra_scheduler,
1656 .thunderx,
14151657 }),
14161658 };
14171659 pub const thunderx2t99 = Cpu{
14181660 .name = "thunderx2t99",
14191661 .llvm_name = "thunderx2t99",
14201662 .features = featureSet(&[_]Feature{
1421 .aggressive_fma,
1422 .arith_bcc_fusion,
1423 .crc,
1424 .crypto,
1425 .fp_armv8,
1426 .lse,
1427 .neon,
1428 .predictable_select_expensive,
1429 .use_postra_scheduler,
1430 .v8_1a,
1663 .thunderx2t99,
14311664 }),
14321665 };
14331666 pub const thunderxt81 = Cpu{
14341667 .name = "thunderxt81",
14351668 .llvm_name = "thunderxt81",
14361669 .features = featureSet(&[_]Feature{
1437 .crc,
1438 .crypto,
1439 .fp_armv8,
1440 .neon,
1441 .perfmon,
1442 .predictable_select_expensive,
1443 .use_postra_scheduler,
1670 .thunderxt81,
14441671 }),
14451672 };
14461673 pub const thunderxt83 = Cpu{
14471674 .name = "thunderxt83",
14481675 .llvm_name = "thunderxt83",
14491676 .features = featureSet(&[_]Feature{
1450 .crc,
1451 .crypto,
1452 .fp_armv8,
1453 .neon,
1454 .perfmon,
1455 .predictable_select_expensive,
1456 .use_postra_scheduler,
1677 .thunderxt83,
14571678 }),
14581679 };
14591680 pub const thunderxt88 = Cpu{
14601681 .name = "thunderxt88",
14611682 .llvm_name = "thunderxt88",
14621683 .features = featureSet(&[_]Feature{
1463 .crc,
1464 .crypto,
1465 .fp_armv8,
1466 .neon,
1467 .perfmon,
1468 .predictable_select_expensive,
1469 .use_postra_scheduler,
1684 .thunderxt88,
14701685 }),
14711686 };
14721687 pub const tsv110 = Cpu{
14731688 .name = "tsv110",
14741689 .llvm_name = "tsv110",
14751690 .features = featureSet(&[_]Feature{
1476 .crypto,
1477 .custom_cheap_as_move,
1478 .dotprod,
1479 .fp_armv8,
1480 .fp16fml,
1481 .fullfp16,
1482 .fuse_aes,
1483 .neon,
1484 .perfmon,
1485 .spe,
1486 .use_postra_scheduler,
1487 .v8_2a,
1691 .tsv110,
14881692 }),
14891693 };
14901694};
......@@ -1493,6 +1697,7 @@ pub const cpu = struct {
14931697/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
14941698/// compiler has inefficient memory and CPU usage, affecting build times.
14951699pub const all_cpus = &[_]*const Cpu{
1700 &cpu.apple_latest,
14961701 &cpu.cortex_a35,
14971702 &cpu.cortex_a53,
14981703 &cpu.cortex_a55,
......@@ -1513,6 +1718,7 @@ pub const all_cpus = &[_]*const Cpu{
15131718 &cpu.kryo,
15141719 &cpu.saphira,
15151720 &cpu.thunderx,
1721 &cpu.thunderx2t99,
15161722 &cpu.thunderxt81,
15171723 &cpu.thunderxt83,
15181724 &cpu.thunderxt88,