authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-20 22:49:26-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-01-20 22:49:26-05:00
log6dd514ac8aa3ee2e5c6fd0374469d361ccfce5b9
tree66be58f436228e3ee5b1263001975e0a72618808
parent6e88883edf8400b835f5d792b8aba54c8d4490f2
signature Commit is signed but in an unrecognized format.

aarch64: remove CPU features that are actually just CPUs


1 files changed, 248 insertions(+), 454 deletions(-)

lib/std/target/aarch64.zig+248-454
......@@ -2,14 +2,6 @@ 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,
135 aes,
146 aggressive_fma,
157 alternate_sextload_cvt_f32_pattern,
......@@ -35,16 +27,10 @@ pub const Feature = enum {
3527 crc,
3628 crypto,
3729 custom_cheap_as_move,
38 cyclone,
3930 disable_latency_sched_heuristic,
4031 dit,
4132 dotprod,
4233 exynos_cheap_as_move,
43 exynosm1,
44 exynosm2,
45 exynosm3,
46 exynosm4,
47 falkor,
4834 fmi,
4935 force_32bit_jump_tables,
5036 fp_armv8,
......@@ -58,7 +44,6 @@ pub const Feature = enum {
5844 fuse_csel,
5945 fuse_literals,
6046 jsconv,
61 kryo,
6247 lor,
6348 lse,
6449 lsl_fast,
......@@ -103,7 +88,6 @@ pub const Feature = enum {
10388 reserve_x6,
10489 reserve_x7,
10590 reserve_x9,
106 saphira,
10791 sb,
10892 sel2,
10993 sha2,
......@@ -122,17 +106,11 @@ pub const Feature = enum {
122106 sve2_bitperm,
123107 sve2_sha3,
124108 sve2_sm4,
125 thunderx,
126 thunderx2t99,
127 thunderxt81,
128 thunderxt83,
129 thunderxt88,
130109 tlb_rmi,
131110 tpidr_el1,
132111 tpidr_el2,
133112 tpidr_el3,
134113 tracev8_4,
135 tsv110,
136114 uaops,
137115 use_aa,
138116 use_postra_scheduler,
......@@ -156,134 +134,6 @@ pub const all_features = blk: {
156134 const len = @typeInfo(Feature).Enum.fields.len;
157135 std.debug.assert(len <= @typeInfo(Cpu.Feature.Set).Int.bits);
158136 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 };
287137 result[@enumToInt(Feature.aes)] = .{
288138 .index = @enumToInt(Feature.aes),
289139 .name = @tagName(Feature.aes),
......@@ -467,27 +317,6 @@ pub const all_features = blk: {
467317 .description = "Use custom handling of cheap instructions",
468318 .dependencies = 0,
469319 };
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 };
491320 result[@enumToInt(Feature.disable_latency_sched_heuristic)] = .{
492321 .index = @enumToInt(Feature.disable_latency_sched_heuristic),
493322 .name = @tagName(Feature.disable_latency_sched_heuristic),
......@@ -518,109 +347,6 @@ pub const all_features = blk: {
518347 .custom_cheap_as_move,
519348 }),
520349 };
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 };
624350 result[@enumToInt(Feature.fmi)] = .{
625351 .index = @enumToInt(Feature.fmi),
626352 .name = @tagName(Feature.fmi),
......@@ -718,24 +444,6 @@ pub const all_features = blk: {
718444 .fp_armv8,
719445 }),
720446 };
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 };
739447 result[@enumToInt(Feature.lor)] = .{
740448 .index = @enumToInt(Feature.lor),
741449 .name = @tagName(Feature.lor),
......@@ -1052,25 +760,6 @@ pub const all_features = blk: {
1052760 .description = "Reserve X9, making it unavailable as a GPR",
1053761 .dependencies = 0,
1054762 };
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 };
1074763 result[@enumToInt(Feature.sb)] = .{
1075764 .index = @enumToInt(Feature.sb),
1076765 .name = @tagName(Feature.sb),
......@@ -1217,97 +906,19 @@ pub const all_features = blk: {
1217906 .sve2,
1218907 }),
1219908 };
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 }),
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,
1234915 };
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 }),
1252 };
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,
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,
1311922 };
1312923 result[@enumToInt(Feature.tpidr_el2)] = .{
1313924 .index = @enumToInt(Feature.tpidr_el2),
......@@ -1330,26 +941,6 @@ pub const all_features = blk: {
1330941 .description = "Enable v8.4-A Trace extension",
1331942 .dependencies = 0,
1332943 };
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 };
1353944 result[@enumToInt(Feature.uaops)] = .{
1354945 .index = @enumToInt(Feature.uaops),
1355946 .name = @tagName(Feature.uaops),
......@@ -1505,123 +1096,265 @@ pub const all_features = blk: {
15051096};
15061097
15071098pub 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 };
15151099 pub const cortex_a35 = Cpu{
15161100 .name = "cortex_a35",
15171101 .llvm_name = "cortex-a35",
15181102 .features = featureSet(&[_]Feature{
1519 .a35,
1103 .crc,
1104 .crypto,
1105 .fp_armv8,
1106 .neon,
1107 .perfmon,
15201108 }),
15211109 };
15221110 pub const cortex_a53 = Cpu{
15231111 .name = "cortex_a53",
15241112 .llvm_name = "cortex-a53",
15251113 .features = featureSet(&[_]Feature{
1526 .a53,
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,
15271124 }),
15281125 };
15291126 pub const cortex_a55 = Cpu{
15301127 .name = "cortex_a55",
15311128 .llvm_name = "cortex-a55",
15321129 .features = featureSet(&[_]Feature{
1533 .a55,
1130 .crypto,
1131 .dotprod,
1132 .fp_armv8,
1133 .fullfp16,
1134 .fuse_aes,
1135 .neon,
1136 .perfmon,
1137 .rcpc,
1138 .v8_2a,
15341139 }),
15351140 };
15361141 pub const cortex_a57 = Cpu{
15371142 .name = "cortex_a57",
15381143 .llvm_name = "cortex-a57",
15391144 .features = featureSet(&[_]Feature{
1540 .a57,
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,
15411156 }),
15421157 };
15431158 pub const cortex_a72 = Cpu{
15441159 .name = "cortex_a72",
15451160 .llvm_name = "cortex-a72",
15461161 .features = featureSet(&[_]Feature{
1547 .a72,
1162 .crc,
1163 .crypto,
1164 .fp_armv8,
1165 .fuse_aes,
1166 .neon,
1167 .perfmon,
15481168 }),
15491169 };
15501170 pub const cortex_a73 = Cpu{
15511171 .name = "cortex_a73",
15521172 .llvm_name = "cortex-a73",
15531173 .features = featureSet(&[_]Feature{
1554 .a73,
1174 .crc,
1175 .crypto,
1176 .fp_armv8,
1177 .fuse_aes,
1178 .neon,
1179 .perfmon,
15551180 }),
15561181 };
15571182 pub const cortex_a75 = Cpu{
15581183 .name = "cortex_a75",
15591184 .llvm_name = "cortex-a75",
15601185 .features = featureSet(&[_]Feature{
1561 .a75,
1186 .crypto,
1187 .dotprod,
1188 .fp_armv8,
1189 .fullfp16,
1190 .fuse_aes,
1191 .neon,
1192 .perfmon,
1193 .rcpc,
1194 .v8_2a,
15621195 }),
15631196 };
15641197 pub const cortex_a76 = Cpu{
15651198 .name = "cortex_a76",
15661199 .llvm_name = "cortex-a76",
15671200 .features = featureSet(&[_]Feature{
1568 .a76,
1201 .crypto,
1202 .dotprod,
1203 .fp_armv8,
1204 .fullfp16,
1205 .neon,
1206 .rcpc,
1207 .ssbs,
1208 .v8_2a,
15691209 }),
15701210 };
15711211 pub const cortex_a76ae = Cpu{
15721212 .name = "cortex_a76ae",
15731213 .llvm_name = "cortex-a76ae",
15741214 .features = featureSet(&[_]Feature{
1575 .a76,
1215 .crypto,
1216 .dotprod,
1217 .fp_armv8,
1218 .fullfp16,
1219 .neon,
1220 .rcpc,
1221 .ssbs,
1222 .v8_2a,
15761223 }),
15771224 };
15781225 pub const cyclone = Cpu{
15791226 .name = "cyclone",
15801227 .llvm_name = "cyclone",
15811228 .features = featureSet(&[_]Feature{
1582 .cyclone,
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,
15831242 }),
15841243 };
15851244 pub const exynos_m1 = Cpu{
15861245 .name = "exynos_m1",
15871246 .llvm_name = "exynos-m1",
15881247 .features = featureSet(&[_]Feature{
1589 .exynosm1,
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,
15901259 }),
15911260 };
15921261 pub const exynos_m2 = Cpu{
15931262 .name = "exynos_m2",
15941263 .llvm_name = "exynos-m2",
15951264 .features = featureSet(&[_]Feature{
1596 .exynosm2,
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,
15971275 }),
15981276 };
15991277 pub const exynos_m3 = Cpu{
16001278 .name = "exynos_m3",
16011279 .llvm_name = "exynos-m3",
16021280 .features = featureSet(&[_]Feature{
1603 .exynosm3,
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,
16041294 }),
16051295 };
16061296 pub const exynos_m4 = Cpu{
16071297 .name = "exynos_m4",
16081298 .llvm_name = "exynos-m4",
16091299 .features = featureSet(&[_]Feature{
1610 .exynosm4,
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,
16111317 }),
16121318 };
16131319 pub const exynos_m5 = Cpu{
16141320 .name = "exynos_m5",
16151321 .llvm_name = "exynos-m5",
16161322 .features = featureSet(&[_]Feature{
1617 .exynosm4,
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,
16181340 }),
16191341 };
16201342 pub const falkor = Cpu{
16211343 .name = "falkor",
16221344 .llvm_name = "falkor",
16231345 .features = featureSet(&[_]Feature{
1624 .falkor,
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,
16251358 }),
16261359 };
16271360 pub const generic = Cpu{
......@@ -1639,56 +1372,119 @@ pub const cpu = struct {
16391372 .name = "kryo",
16401373 .llvm_name = "kryo",
16411374 .features = featureSet(&[_]Feature{
1642 .kryo,
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,
16431385 }),
16441386 };
16451387 pub const saphira = Cpu{
16461388 .name = "saphira",
16471389 .llvm_name = "saphira",
16481390 .features = featureSet(&[_]Feature{
1649 .saphira,
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,
16501402 }),
16511403 };
16521404 pub const thunderx = Cpu{
16531405 .name = "thunderx",
16541406 .llvm_name = "thunderx",
16551407 .features = featureSet(&[_]Feature{
1656 .thunderx,
1408 .crc,
1409 .crypto,
1410 .fp_armv8,
1411 .neon,
1412 .perfmon,
1413 .predictable_select_expensive,
1414 .use_postra_scheduler,
16571415 }),
16581416 };
16591417 pub const thunderx2t99 = Cpu{
16601418 .name = "thunderx2t99",
16611419 .llvm_name = "thunderx2t99",
16621420 .features = featureSet(&[_]Feature{
1663 .thunderx2t99,
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,
16641431 }),
16651432 };
16661433 pub const thunderxt81 = Cpu{
16671434 .name = "thunderxt81",
16681435 .llvm_name = "thunderxt81",
16691436 .features = featureSet(&[_]Feature{
1670 .thunderxt81,
1437 .crc,
1438 .crypto,
1439 .fp_armv8,
1440 .neon,
1441 .perfmon,
1442 .predictable_select_expensive,
1443 .use_postra_scheduler,
16711444 }),
16721445 };
16731446 pub const thunderxt83 = Cpu{
16741447 .name = "thunderxt83",
16751448 .llvm_name = "thunderxt83",
16761449 .features = featureSet(&[_]Feature{
1677 .thunderxt83,
1450 .crc,
1451 .crypto,
1452 .fp_armv8,
1453 .neon,
1454 .perfmon,
1455 .predictable_select_expensive,
1456 .use_postra_scheduler,
16781457 }),
16791458 };
16801459 pub const thunderxt88 = Cpu{
16811460 .name = "thunderxt88",
16821461 .llvm_name = "thunderxt88",
16831462 .features = featureSet(&[_]Feature{
1684 .thunderxt88,
1463 .crc,
1464 .crypto,
1465 .fp_armv8,
1466 .neon,
1467 .perfmon,
1468 .predictable_select_expensive,
1469 .use_postra_scheduler,
16851470 }),
16861471 };
16871472 pub const tsv110 = Cpu{
16881473 .name = "tsv110",
16891474 .llvm_name = "tsv110",
16901475 .features = featureSet(&[_]Feature{
1691 .tsv110,
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,
16921488 }),
16931489 };
16941490};
......@@ -1697,7 +1493,6 @@ pub const cpu = struct {
16971493/// TODO: Replace this with usage of `std.meta.declList`. It does work, but stage1
16981494/// compiler has inefficient memory and CPU usage, affecting build times.
16991495pub const all_cpus = &[_]*const Cpu{
1700 &cpu.apple_latest,
17011496 &cpu.cortex_a35,
17021497 &cpu.cortex_a53,
17031498 &cpu.cortex_a55,
......@@ -1718,7 +1513,6 @@ pub const all_cpus = &[_]*const Cpu{
17181513 &cpu.kryo,
17191514 &cpu.saphira,
17201515 &cpu.thunderx,
1721 &cpu.thunderx2t99,
17221516 &cpu.thunderxt81,
17231517 &cpu.thunderxt83,
17241518 &cpu.thunderxt88,