authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-27 00:54:40-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-02-27 00:54:40-07:00
log59b4facd34dc525d2258bde8f5d94049d02355dc
tree4ea07ddb3490d9e0f1db0d7ee4c9a9fcd206ea16
parent45739725c1beec9515892890169ac58085138cb7

update x86 CPU features


1 files changed, 475 insertions(+), 212 deletions(-)

lib/std/target/x86.zig+475-212
......@@ -1,13 +1,12 @@
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2015-2021 Zig Contributors
3// This file is part of [zig](https://ziglang.org/), which is MIT licensed.
4// The MIT license requires this copyright notice to be included in all copies
5// and substantial portions of the software.
1//! This file is auto-generated by tools/update_cpu_features.zig.
2
63const std = @import("../std.zig");
74const CpuFeature = std.Target.Cpu.Feature;
85const CpuModel = std.Target.Cpu.Model;
96
107pub const Feature = enum {
8 @"16bit_mode",
9 @"32bit_mode",
1110 @"3dnow",
1211 @"3dnowa",
1312 @"64bit",
......@@ -154,6 +153,16 @@ pub const all_features = blk: {
154153 const len = @typeInfo(Feature).Enum.fields.len;
155154 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
156155 var result: [len]CpuFeature = undefined;
156 result[@enumToInt(Feature.@"16bit_mode")] = .{
157 .llvm_name = "16bit-mode",
158 .description = "16-bit mode (i8086)",
159 .dependencies = featureSet(&[_]Feature{}),
160 };
161 result[@enumToInt(Feature.@"32bit_mode")] = .{
162 .llvm_name = "32bit-mode",
163 .description = "32-bit mode (80386)",
164 .dependencies = featureSet(&[_]Feature{}),
165 };
157166 result[@enumToInt(Feature.@"3dnow")] = .{
158167 .llvm_name = "3dnow",
159168 .description = "Enable 3DNow! instructions",
......@@ -960,8 +969,6 @@ pub const cpu = struct {
960969 .@"64bit",
961970 .adx,
962971 .aes,
963 .avx,
964 .avx2,
965972 .avxvnni,
966973 .bmi,
967974 .bmi2,
......@@ -969,15 +976,23 @@ pub const cpu = struct {
969976 .clflushopt,
970977 .cmov,
971978 .cx16,
972 .cx8,
973979 .ermsb,
974980 .f16c,
981 .false_deps_popcnt,
982 .fast_15bytenop,
983 .fast_gather,
984 .fast_scalar_fsqrt,
985 .fast_shld_rotate,
986 .fast_variable_shuffle,
987 .fast_vector_fsqrt,
975988 .fma,
976989 .fsgsbase,
977990 .fxsr,
978991 .hreset,
992 .idivq_to_divl,
979993 .invpcid,
980994 .lzcnt,
995 .macrofusion,
981996 .mmx,
982997 .movbe,
983998 .nopl,
......@@ -990,11 +1005,10 @@ pub const cpu = struct {
9901005 .sahf,
9911006 .serialize,
9921007 .sgx,
993 .sse2,
994 .sse4_2,
1008 .slow_3ops_lea,
1009 .vzeroupper,
9951010 .waitpkg,
9961011 .x87,
997 .xsave,
9981012 .xsavec,
9991013 .xsaveopt,
10001014 .xsaves,
......@@ -1008,14 +1022,16 @@ pub const cpu = struct {
10081022 .@"64bit",
10091023 .cmov,
10101024 .cx16,
1011 .cx8,
1025 .fast_scalar_shift_masks,
10121026 .fxsr,
10131027 .lzcnt,
10141028 .nopl,
10151029 .popcnt,
10161030 .prfchw,
10171031 .sahf,
1032 .slow_shld,
10181033 .sse4a,
1034 .vzeroupper,
10191035 .x87,
10201036 }),
10211037 };
......@@ -1027,6 +1043,9 @@ pub const cpu = struct {
10271043 .cmov,
10281044 .cx8,
10291045 .nopl,
1046 .slow_shld,
1047 .slow_unaligned_mem_16,
1048 .vzeroupper,
10301049 .x87,
10311050 }),
10321051 };
......@@ -1039,7 +1058,10 @@ pub const cpu = struct {
10391058 .cx8,
10401059 .fxsr,
10411060 .nopl,
1061 .slow_shld,
1062 .slow_unaligned_mem_16,
10421063 .sse,
1064 .vzeroupper,
10431065 .x87,
10441066 }),
10451067 };
......@@ -1051,9 +1073,13 @@ pub const cpu = struct {
10511073 .@"64bit",
10521074 .cmov,
10531075 .cx8,
1076 .fast_scalar_shift_masks,
10541077 .fxsr,
10551078 .nopl,
1079 .slow_shld,
1080 .slow_unaligned_mem_16,
10561081 .sse2,
1082 .vzeroupper,
10571083 .x87,
10581084 }),
10591085 };
......@@ -1066,7 +1092,10 @@ pub const cpu = struct {
10661092 .cx8,
10671093 .fxsr,
10681094 .nopl,
1095 .slow_shld,
1096 .slow_unaligned_mem_16,
10691097 .sse,
1098 .vzeroupper,
10701099 .x87,
10711100 }),
10721101 };
......@@ -1078,6 +1107,9 @@ pub const cpu = struct {
10781107 .cmov,
10791108 .cx8,
10801109 .nopl,
1110 .slow_shld,
1111 .slow_unaligned_mem_16,
1112 .vzeroupper,
10811113 .x87,
10821114 }),
10831115 };
......@@ -1090,7 +1122,10 @@ pub const cpu = struct {
10901122 .cx8,
10911123 .fxsr,
10921124 .nopl,
1125 .slow_shld,
1126 .slow_unaligned_mem_16,
10931127 .sse,
1128 .vzeroupper,
10941129 .x87,
10951130 }),
10961131 };
......@@ -1102,9 +1137,13 @@ pub const cpu = struct {
11021137 .@"64bit",
11031138 .cmov,
11041139 .cx8,
1140 .fast_scalar_shift_masks,
11051141 .fxsr,
11061142 .nopl,
1143 .slow_shld,
1144 .slow_unaligned_mem_16,
11071145 .sse2,
1146 .vzeroupper,
11081147 .x87,
11091148 }),
11101149 };
......@@ -1116,10 +1155,13 @@ pub const cpu = struct {
11161155 .@"64bit",
11171156 .cmov,
11181157 .cx16,
1119 .cx8,
1158 .fast_scalar_shift_masks,
11201159 .fxsr,
11211160 .nopl,
1161 .slow_shld,
1162 .slow_unaligned_mem_16,
11221163 .sse3,
1164 .vzeroupper,
11231165 .x87,
11241166 }),
11251167 };
......@@ -1130,13 +1172,20 @@ pub const cpu = struct {
11301172 .@"64bit",
11311173 .cmov,
11321174 .cx16,
1133 .cx8,
11341175 .fxsr,
1176 .idivl_to_divb,
1177 .idivq_to_divl,
1178 .lea_sp,
1179 .lea_uses_ag,
11351180 .mmx,
11361181 .movbe,
11371182 .nopl,
1183 .pad_short_functions,
11381184 .sahf,
1185 .slow_two_mem_ops,
1186 .slow_unaligned_mem_16,
11391187 .ssse3,
1188 .vzeroupper,
11401189 .x87,
11411190 }),
11421191 };
......@@ -1148,14 +1197,16 @@ pub const cpu = struct {
11481197 .@"64bit",
11491198 .cmov,
11501199 .cx16,
1151 .cx8,
1200 .fast_scalar_shift_masks,
11521201 .fxsr,
11531202 .lzcnt,
11541203 .nopl,
11551204 .popcnt,
11561205 .prfchw,
11571206 .sahf,
1207 .slow_shld,
11581208 .sse4a,
1209 .vzeroupper,
11591210 .x87,
11601211 }),
11611212 };
......@@ -1165,9 +1216,11 @@ pub const cpu = struct {
11651216 .features = featureSet(&[_]Feature{
11661217 .@"64bit",
11671218 .aes,
1219 .branchfusion,
11681220 .cmov,
11691221 .cx16,
1170 .cx8,
1222 .fast_11bytenop,
1223 .fast_scalar_shift_masks,
11711224 .fxsr,
11721225 .lwp,
11731226 .lzcnt,
......@@ -1177,6 +1230,8 @@ pub const cpu = struct {
11771230 .popcnt,
11781231 .prfchw,
11791232 .sahf,
1233 .slow_shld,
1234 .vzeroupper,
11801235 .x87,
11811236 .xop,
11821237 .xsave,
......@@ -1189,11 +1244,13 @@ pub const cpu = struct {
11891244 .@"64bit",
11901245 .aes,
11911246 .bmi,
1247 .branchfusion,
11921248 .cmov,
11931249 .cx16,
1194 .cx8,
11951250 .f16c,
1251 .fast_11bytenop,
11961252 .fast_bextr,
1253 .fast_scalar_shift_masks,
11971254 .fma,
11981255 .fxsr,
11991256 .lwp,
......@@ -1204,7 +1261,9 @@ pub const cpu = struct {
12041261 .popcnt,
12051262 .prfchw,
12061263 .sahf,
1264 .slow_shld,
12071265 .tbm,
1266 .vzeroupper,
12081267 .x87,
12091268 .xop,
12101269 .xsave,
......@@ -1217,11 +1276,13 @@ pub const cpu = struct {
12171276 .@"64bit",
12181277 .aes,
12191278 .bmi,
1279 .branchfusion,
12201280 .cmov,
12211281 .cx16,
1222 .cx8,
12231282 .f16c,
1283 .fast_11bytenop,
12241284 .fast_bextr,
1285 .fast_scalar_shift_masks,
12251286 .fma,
12261287 .fsgsbase,
12271288 .fxsr,
......@@ -1233,10 +1294,11 @@ pub const cpu = struct {
12331294 .popcnt,
12341295 .prfchw,
12351296 .sahf,
1297 .slow_shld,
12361298 .tbm,
1299 .vzeroupper,
12371300 .x87,
12381301 .xop,
1239 .xsave,
12401302 .xsaveopt,
12411303 }),
12421304 };
......@@ -1249,11 +1311,13 @@ pub const cpu = struct {
12491311 .avx2,
12501312 .bmi,
12511313 .bmi2,
1314 .branchfusion,
12521315 .cmov,
12531316 .cx16,
1254 .cx8,
12551317 .f16c,
1318 .fast_11bytenop,
12561319 .fast_bextr,
1320 .fast_scalar_shift_masks,
12571321 .fma,
12581322 .fsgsbase,
12591323 .fxsr,
......@@ -1268,10 +1332,11 @@ pub const cpu = struct {
12681332 .prfchw,
12691333 .rdrnd,
12701334 .sahf,
1335 .slow_shld,
12711336 .tbm,
1337 .vzeroupper,
12721338 .x87,
12731339 .xop,
1274 .xsave,
12751340 .xsaveopt,
12761341 }),
12771342 };
......@@ -1282,13 +1347,20 @@ pub const cpu = struct {
12821347 .@"64bit",
12831348 .cmov,
12841349 .cx16,
1285 .cx8,
12861350 .fxsr,
1351 .idivl_to_divb,
1352 .idivq_to_divl,
1353 .lea_sp,
1354 .lea_uses_ag,
12871355 .mmx,
12881356 .movbe,
12891357 .nopl,
1358 .pad_short_functions,
12901359 .sahf,
1360 .slow_two_mem_ops,
1361 .slow_unaligned_mem_16,
12911362 .ssse3,
1363 .vzeroupper,
12921364 .x87,
12931365 }),
12941366 };
......@@ -1298,20 +1370,26 @@ pub const cpu = struct {
12981370 .features = featureSet(&[_]Feature{
12991371 .@"64bit",
13001372 .adx,
1301 .avx,
13021373 .avx2,
13031374 .bmi,
13041375 .bmi2,
13051376 .cmov,
13061377 .cx16,
1307 .cx8,
13081378 .ermsb,
13091379 .f16c,
1380 .false_deps_lzcnt_tzcnt,
1381 .false_deps_popcnt,
1382 .fast_15bytenop,
1383 .fast_scalar_fsqrt,
1384 .fast_shld_rotate,
1385 .fast_variable_shuffle,
13101386 .fma,
13111387 .fsgsbase,
13121388 .fxsr,
1389 .idivq_to_divl,
13131390 .invpcid,
13141391 .lzcnt,
1392 .macrofusion,
13151393 .mmx,
13161394 .movbe,
13171395 .nopl,
......@@ -1321,10 +1399,9 @@ pub const cpu = struct {
13211399 .rdrnd,
13221400 .rdseed,
13231401 .sahf,
1324 .sse2,
1325 .sse4_2,
1402 .slow_3ops_lea,
1403 .vzeroupper,
13261404 .x87,
1327 .xsave,
13281405 .xsaveopt,
13291406 }),
13301407 };
......@@ -1335,7 +1412,9 @@ pub const cpu = struct {
13351412 .@"64bit",
13361413 .cmov,
13371414 .cx16,
1338 .cx8,
1415 .fast_15bytenop,
1416 .fast_scalar_shift_masks,
1417 .fast_vector_shift_masks,
13391418 .fxsr,
13401419 .lzcnt,
13411420 .mmx,
......@@ -1343,8 +1422,10 @@ pub const cpu = struct {
13431422 .popcnt,
13441423 .prfchw,
13451424 .sahf,
1425 .slow_shld,
13461426 .sse4a,
13471427 .ssse3,
1428 .vzeroupper,
13481429 .x87,
13491430 }),
13501431 };
......@@ -1354,12 +1435,16 @@ pub const cpu = struct {
13541435 .features = featureSet(&[_]Feature{
13551436 .@"64bit",
13561437 .aes,
1357 .avx,
13581438 .bmi,
13591439 .cmov,
13601440 .cx16,
1361 .cx8,
13621441 .f16c,
1442 .fast_15bytenop,
1443 .fast_bextr,
1444 .fast_hops,
1445 .fast_lzcnt,
1446 .fast_scalar_shift_masks,
1447 .fast_vector_shift_masks,
13631448 .fxsr,
13641449 .lzcnt,
13651450 .mmx,
......@@ -1369,10 +1454,9 @@ pub const cpu = struct {
13691454 .popcnt,
13701455 .prfchw,
13711456 .sahf,
1457 .slow_shld,
13721458 .sse4a,
1373 .ssse3,
13741459 .x87,
1375 .xsave,
13761460 .xsaveopt,
13771461 }),
13781462 };
......@@ -1381,6 +1465,8 @@ pub const cpu = struct {
13811465 .llvm_name = "c3",
13821466 .features = featureSet(&[_]Feature{
13831467 .@"3dnow",
1468 .slow_unaligned_mem_16,
1469 .vzeroupper,
13841470 .x87,
13851471 }),
13861472 };
......@@ -1392,7 +1478,9 @@ pub const cpu = struct {
13921478 .cx8,
13931479 .fxsr,
13941480 .mmx,
1481 .slow_unaligned_mem_16,
13951482 .sse,
1483 .vzeroupper,
13961484 .x87,
13971485 }),
13981486 };
......@@ -1403,12 +1491,8 @@ pub const cpu = struct {
14031491 .@"64bit",
14041492 .adx,
14051493 .aes,
1406 .avx,
1407 .avx2,
1408 .avx512bw,
14091494 .avx512cd,
14101495 .avx512dq,
1411 .avx512f,
14121496 .avx512ifma,
14131497 .avx512vbmi,
14141498 .avx512vl,
......@@ -1417,30 +1501,35 @@ pub const cpu = struct {
14171501 .clflushopt,
14181502 .cmov,
14191503 .cx16,
1420 .cx8,
14211504 .ermsb,
1422 .f16c,
1423 .fma,
1505 .fast_15bytenop,
1506 .fast_gather,
1507 .fast_scalar_fsqrt,
1508 .fast_shld_rotate,
1509 .fast_variable_shuffle,
1510 .fast_vector_fsqrt,
14241511 .fsgsbase,
14251512 .fxsr,
1513 .idivq_to_divl,
14261514 .invpcid,
14271515 .lzcnt,
1516 .macrofusion,
14281517 .mmx,
14291518 .movbe,
14301519 .nopl,
14311520 .pclmul,
14321521 .pku,
14331522 .popcnt,
1523 .prefer_256_bit,
14341524 .prfchw,
14351525 .rdrnd,
14361526 .rdseed,
14371527 .sahf,
14381528 .sgx,
14391529 .sha,
1440 .sse2,
1441 .sse4_2,
1530 .slow_3ops_lea,
1531 .vzeroupper,
14421532 .x87,
1443 .xsave,
14441533 .xsavec,
14451534 .xsaveopt,
14461535 .xsaves,
......@@ -1453,12 +1542,9 @@ pub const cpu = struct {
14531542 .@"64bit",
14541543 .adx,
14551544 .aes,
1456 .avx,
1457 .avx2,
14581545 .avx512bw,
14591546 .avx512cd,
14601547 .avx512dq,
1461 .avx512f,
14621548 .avx512vl,
14631549 .avx512vnni,
14641550 .bmi,
......@@ -1467,28 +1553,34 @@ pub const cpu = struct {
14671553 .clwb,
14681554 .cmov,
14691555 .cx16,
1470 .cx8,
14711556 .ermsb,
1472 .f16c,
1473 .fma,
1557 .false_deps_popcnt,
1558 .fast_15bytenop,
1559 .fast_gather,
1560 .fast_scalar_fsqrt,
1561 .fast_shld_rotate,
1562 .fast_variable_shuffle,
1563 .fast_vector_fsqrt,
14741564 .fsgsbase,
14751565 .fxsr,
1566 .idivq_to_divl,
14761567 .invpcid,
14771568 .lzcnt,
1569 .macrofusion,
14781570 .mmx,
14791571 .movbe,
14801572 .nopl,
14811573 .pclmul,
14821574 .pku,
14831575 .popcnt,
1576 .prefer_256_bit,
14841577 .prfchw,
14851578 .rdrnd,
14861579 .rdseed,
14871580 .sahf,
1488 .sse2,
1489 .sse4_2,
1581 .slow_3ops_lea,
1582 .vzeroupper,
14901583 .x87,
1491 .xsave,
14921584 .xsavec,
14931585 .xsaveopt,
14941586 .xsaves,
......@@ -1501,13 +1593,9 @@ pub const cpu = struct {
15011593 .@"64bit",
15021594 .adx,
15031595 .aes,
1504 .avx,
1505 .avx2,
15061596 .avx512bf16,
1507 .avx512bw,
15081597 .avx512cd,
15091598 .avx512dq,
1510 .avx512f,
15111599 .avx512vl,
15121600 .avx512vnni,
15131601 .bmi,
......@@ -1516,28 +1604,34 @@ pub const cpu = struct {
15161604 .clwb,
15171605 .cmov,
15181606 .cx16,
1519 .cx8,
15201607 .ermsb,
1521 .f16c,
1522 .fma,
1608 .false_deps_popcnt,
1609 .fast_15bytenop,
1610 .fast_gather,
1611 .fast_scalar_fsqrt,
1612 .fast_shld_rotate,
1613 .fast_variable_shuffle,
1614 .fast_vector_fsqrt,
15231615 .fsgsbase,
15241616 .fxsr,
1617 .idivq_to_divl,
15251618 .invpcid,
15261619 .lzcnt,
1620 .macrofusion,
15271621 .mmx,
15281622 .movbe,
15291623 .nopl,
15301624 .pclmul,
15311625 .pku,
15321626 .popcnt,
1627 .prefer_256_bit,
15331628 .prfchw,
15341629 .rdrnd,
15351630 .rdseed,
15361631 .sahf,
1537 .sse2,
1538 .sse4_2,
1632 .slow_3ops_lea,
1633 .vzeroupper,
15391634 .x87,
1540 .xsave,
15411635 .xsavec,
15421636 .xsaveopt,
15431637 .xsaves,
......@@ -1548,23 +1642,27 @@ pub const cpu = struct {
15481642 .llvm_name = "core-avx-i",
15491643 .features = featureSet(&[_]Feature{
15501644 .@"64bit",
1551 .avx,
15521645 .cmov,
15531646 .cx16,
1554 .cx8,
15551647 .f16c,
1648 .false_deps_popcnt,
1649 .fast_15bytenop,
1650 .fast_scalar_fsqrt,
1651 .fast_shld_rotate,
15561652 .fsgsbase,
15571653 .fxsr,
1654 .idivq_to_divl,
1655 .macrofusion,
15581656 .mmx,
15591657 .nopl,
15601658 .pclmul,
15611659 .popcnt,
15621660 .rdrnd,
15631661 .sahf,
1564 .sse2,
1565 .sse4_2,
1662 .slow_3ops_lea,
1663 .slow_unaligned_mem_32,
1664 .vzeroupper,
15661665 .x87,
1567 .xsave,
15681666 .xsaveopt,
15691667 }),
15701668 };
......@@ -1573,20 +1671,26 @@ pub const cpu = struct {
15731671 .llvm_name = "core-avx2",
15741672 .features = featureSet(&[_]Feature{
15751673 .@"64bit",
1576 .avx,
15771674 .avx2,
15781675 .bmi,
15791676 .bmi2,
15801677 .cmov,
15811678 .cx16,
1582 .cx8,
15831679 .ermsb,
15841680 .f16c,
1681 .false_deps_lzcnt_tzcnt,
1682 .false_deps_popcnt,
1683 .fast_15bytenop,
1684 .fast_scalar_fsqrt,
1685 .fast_shld_rotate,
1686 .fast_variable_shuffle,
15851687 .fma,
15861688 .fsgsbase,
15871689 .fxsr,
1690 .idivq_to_divl,
15881691 .invpcid,
15891692 .lzcnt,
1693 .macrofusion,
15901694 .mmx,
15911695 .movbe,
15921696 .nopl,
......@@ -1594,10 +1698,9 @@ pub const cpu = struct {
15941698 .popcnt,
15951699 .rdrnd,
15961700 .sahf,
1597 .sse2,
1598 .sse4_2,
1701 .slow_3ops_lea,
1702 .vzeroupper,
15991703 .x87,
1600 .xsave,
16011704 .xsaveopt,
16021705 }),
16031706 };
......@@ -1608,12 +1711,14 @@ pub const cpu = struct {
16081711 .@"64bit",
16091712 .cmov,
16101713 .cx16,
1611 .cx8,
16121714 .fxsr,
1715 .macrofusion,
16131716 .mmx,
16141717 .nopl,
16151718 .sahf,
1719 .slow_unaligned_mem_16,
16161720 .ssse3,
1721 .vzeroupper,
16171722 .x87,
16181723 }),
16191724 };
......@@ -1624,14 +1729,14 @@ pub const cpu = struct {
16241729 .@"64bit",
16251730 .cmov,
16261731 .cx16,
1627 .cx8,
16281732 .fxsr,
1733 .macrofusion,
16291734 .mmx,
16301735 .nopl,
16311736 .popcnt,
16321737 .sahf,
1633 .sse2,
16341738 .sse4_2,
1739 .vzeroupper,
16351740 .x87,
16361741 }),
16371742 };
......@@ -1643,17 +1748,22 @@ pub const cpu = struct {
16431748 .avx,
16441749 .cmov,
16451750 .cx16,
1646 .cx8,
1751 .false_deps_popcnt,
1752 .fast_15bytenop,
1753 .fast_scalar_fsqrt,
1754 .fast_shld_rotate,
16471755 .fxsr,
1756 .idivq_to_divl,
1757 .macrofusion,
16481758 .mmx,
16491759 .nopl,
16501760 .pclmul,
16511761 .popcnt,
16521762 .sahf,
1653 .sse2,
1654 .sse4_2,
1763 .slow_3ops_lea,
1764 .slow_unaligned_mem_32,
1765 .vzeroupper,
16551766 .x87,
1656 .xsave,
16571767 .xsaveopt,
16581768 }),
16591769 };
......@@ -1661,7 +1771,13 @@ pub const cpu = struct {
16611771 .name = "generic",
16621772 .llvm_name = "generic",
16631773 .features = featureSet(&[_]Feature{
1774 .@"64bit",
16641775 .cx8,
1776 .idivq_to_divl,
1777 .macrofusion,
1778 .slow_3ops_lea,
1779 .slow_incdec,
1780 .vzeroupper,
16651781 .x87,
16661782 }),
16671783 };
......@@ -1671,6 +1787,8 @@ pub const cpu = struct {
16711787 .features = featureSet(&[_]Feature{
16721788 .@"3dnowa",
16731789 .cx8,
1790 .slow_unaligned_mem_16,
1791 .vzeroupper,
16741792 .x87,
16751793 }),
16761794 };
......@@ -1683,7 +1801,7 @@ pub const cpu = struct {
16831801 .clflushopt,
16841802 .cmov,
16851803 .cx16,
1686 .cx8,
1804 .false_deps_popcnt,
16871805 .fsgsbase,
16881806 .fxsr,
16891807 .mmx,
......@@ -1696,10 +1814,13 @@ pub const cpu = struct {
16961814 .rdseed,
16971815 .sahf,
16981816 .sha,
1817 .slow_incdec,
1818 .slow_lea,
1819 .slow_two_mem_ops,
16991820 .sse4_2,
1700 .ssse3,
1821 .use_glm_div_sqrt_costs,
1822 .vzeroupper,
17011823 .x87,
1702 .xsave,
17031824 .xsavec,
17041825 .xsaveopt,
17051826 .xsaves,
......@@ -1714,7 +1835,6 @@ pub const cpu = struct {
17141835 .clflushopt,
17151836 .cmov,
17161837 .cx16,
1717 .cx8,
17181838 .fsgsbase,
17191839 .fxsr,
17201840 .mmx,
......@@ -1730,10 +1850,13 @@ pub const cpu = struct {
17301850 .sahf,
17311851 .sgx,
17321852 .sha,
1853 .slow_incdec,
1854 .slow_lea,
1855 .slow_two_mem_ops,
17331856 .sse4_2,
1734 .ssse3,
1857 .use_glm_div_sqrt_costs,
1858 .vzeroupper,
17351859 .x87,
1736 .xsave,
17371860 .xsavec,
17381861 .xsaveopt,
17391862 .xsaves,
......@@ -1744,20 +1867,26 @@ pub const cpu = struct {
17441867 .llvm_name = "haswell",
17451868 .features = featureSet(&[_]Feature{
17461869 .@"64bit",
1747 .avx,
17481870 .avx2,
17491871 .bmi,
17501872 .bmi2,
17511873 .cmov,
17521874 .cx16,
1753 .cx8,
17541875 .ermsb,
17551876 .f16c,
1877 .false_deps_lzcnt_tzcnt,
1878 .false_deps_popcnt,
1879 .fast_15bytenop,
1880 .fast_scalar_fsqrt,
1881 .fast_shld_rotate,
1882 .fast_variable_shuffle,
17561883 .fma,
17571884 .fsgsbase,
17581885 .fxsr,
1886 .idivq_to_divl,
17591887 .invpcid,
17601888 .lzcnt,
1889 .macrofusion,
17611890 .mmx,
17621891 .movbe,
17631892 .nopl,
......@@ -1765,10 +1894,9 @@ pub const cpu = struct {
17651894 .popcnt,
17661895 .rdrnd,
17671896 .sahf,
1768 .sse2,
1769 .sse4_2,
1897 .slow_3ops_lea,
1898 .vzeroupper,
17701899 .x87,
1771 .xsave,
17721900 .xsaveopt,
17731901 }),
17741902 };
......@@ -1776,6 +1904,8 @@ pub const cpu = struct {
17761904 .name = "_i386",
17771905 .llvm_name = "i386",
17781906 .features = featureSet(&[_]Feature{
1907 .slow_unaligned_mem_16,
1908 .vzeroupper,
17791909 .x87,
17801910 }),
17811911 };
......@@ -1783,6 +1913,8 @@ pub const cpu = struct {
17831913 .name = "_i486",
17841914 .llvm_name = "i486",
17851915 .features = featureSet(&[_]Feature{
1916 .slow_unaligned_mem_16,
1917 .vzeroupper,
17861918 .x87,
17871919 }),
17881920 };
......@@ -1791,6 +1923,8 @@ pub const cpu = struct {
17911923 .llvm_name = "i586",
17921924 .features = featureSet(&[_]Feature{
17931925 .cx8,
1926 .slow_unaligned_mem_16,
1927 .vzeroupper,
17941928 .x87,
17951929 }),
17961930 };
......@@ -1800,6 +1934,8 @@ pub const cpu = struct {
18001934 .features = featureSet(&[_]Feature{
18011935 .cmov,
18021936 .cx8,
1937 .slow_unaligned_mem_16,
1938 .vzeroupper,
18031939 .x87,
18041940 }),
18051941 };
......@@ -1809,14 +1945,9 @@ pub const cpu = struct {
18091945 .features = featureSet(&[_]Feature{
18101946 .@"64bit",
18111947 .adx,
1812 .aes,
1813 .avx,
1814 .avx2,
18151948 .avx512bitalg,
1816 .avx512bw,
18171949 .avx512cd,
18181950 .avx512dq,
1819 .avx512f,
18201951 .avx512ifma,
18211952 .avx512vbmi,
18221953 .avx512vbmi2,
......@@ -1829,22 +1960,27 @@ pub const cpu = struct {
18291960 .clwb,
18301961 .cmov,
18311962 .cx16,
1832 .cx8,
18331963 .ermsb,
1834 .f16c,
1835 .fma,
1964 .fast_15bytenop,
1965 .fast_gather,
1966 .fast_scalar_fsqrt,
1967 .fast_shld_rotate,
1968 .fast_variable_shuffle,
1969 .fast_vector_fsqrt,
18361970 .fsgsbase,
18371971 .fsrm,
18381972 .fxsr,
18391973 .gfni,
1974 .idivq_to_divl,
18401975 .invpcid,
18411976 .lzcnt,
1977 .macrofusion,
18421978 .mmx,
18431979 .movbe,
18441980 .nopl,
1845 .pclmul,
18461981 .pku,
18471982 .popcnt,
1983 .prefer_256_bit,
18481984 .prfchw,
18491985 .rdpid,
18501986 .rdrnd,
......@@ -1852,12 +1988,11 @@ pub const cpu = struct {
18521988 .sahf,
18531989 .sgx,
18541990 .sha,
1855 .sse2,
1856 .sse4_2,
1991 .slow_3ops_lea,
18571992 .vaes,
18581993 .vpclmulqdq,
1994 .vzeroupper,
18591995 .x87,
1860 .xsave,
18611996 .xsavec,
18621997 .xsaveopt,
18631998 .xsaves,
......@@ -1869,14 +2004,9 @@ pub const cpu = struct {
18692004 .features = featureSet(&[_]Feature{
18702005 .@"64bit",
18712006 .adx,
1872 .aes,
1873 .avx,
1874 .avx2,
18752007 .avx512bitalg,
1876 .avx512bw,
18772008 .avx512cd,
18782009 .avx512dq,
1879 .avx512f,
18802010 .avx512ifma,
18812011 .avx512vbmi,
18822012 .avx512vbmi2,
......@@ -1889,23 +2019,28 @@ pub const cpu = struct {
18892019 .clwb,
18902020 .cmov,
18912021 .cx16,
1892 .cx8,
18932022 .ermsb,
1894 .f16c,
1895 .fma,
2023 .fast_15bytenop,
2024 .fast_gather,
2025 .fast_scalar_fsqrt,
2026 .fast_shld_rotate,
2027 .fast_variable_shuffle,
2028 .fast_vector_fsqrt,
18962029 .fsgsbase,
18972030 .fsrm,
18982031 .fxsr,
18992032 .gfni,
2033 .idivq_to_divl,
19002034 .invpcid,
19012035 .lzcnt,
2036 .macrofusion,
19022037 .mmx,
19032038 .movbe,
19042039 .nopl,
1905 .pclmul,
19062040 .pconfig,
19072041 .pku,
19082042 .popcnt,
2043 .prefer_256_bit,
19092044 .prfchw,
19102045 .rdpid,
19112046 .rdrnd,
......@@ -1913,13 +2048,12 @@ pub const cpu = struct {
19132048 .sahf,
19142049 .sgx,
19152050 .sha,
1916 .sse2,
1917 .sse4_2,
2051 .slow_3ops_lea,
19182052 .vaes,
19192053 .vpclmulqdq,
2054 .vzeroupper,
19202055 .wbnoinvd,
19212056 .x87,
1922 .xsave,
19232057 .xsavec,
19242058 .xsaveopt,
19252059 .xsaves,
......@@ -1930,23 +2064,27 @@ pub const cpu = struct {
19302064 .llvm_name = "ivybridge",
19312065 .features = featureSet(&[_]Feature{
19322066 .@"64bit",
1933 .avx,
19342067 .cmov,
19352068 .cx16,
1936 .cx8,
19372069 .f16c,
2070 .false_deps_popcnt,
2071 .fast_15bytenop,
2072 .fast_scalar_fsqrt,
2073 .fast_shld_rotate,
19382074 .fsgsbase,
19392075 .fxsr,
2076 .idivq_to_divl,
2077 .macrofusion,
19402078 .mmx,
19412079 .nopl,
19422080 .pclmul,
19432081 .popcnt,
19442082 .rdrnd,
19452083 .sahf,
1946 .sse2,
1947 .sse4_2,
2084 .slow_3ops_lea,
2085 .slow_unaligned_mem_32,
2086 .vzeroupper,
19482087 .x87,
1949 .xsave,
19502088 .xsaveopt,
19512089 }),
19522090 };
......@@ -1956,6 +2094,8 @@ pub const cpu = struct {
19562094 .features = featureSet(&[_]Feature{
19572095 .cx8,
19582096 .mmx,
2097 .slow_unaligned_mem_16,
2098 .vzeroupper,
19592099 .x87,
19602100 }),
19612101 };
......@@ -1965,6 +2105,8 @@ pub const cpu = struct {
19652105 .features = featureSet(&[_]Feature{
19662106 .@"3dnow",
19672107 .cx8,
2108 .slow_unaligned_mem_16,
2109 .vzeroupper,
19682110 .x87,
19692111 }),
19702112 };
......@@ -1974,6 +2116,8 @@ pub const cpu = struct {
19742116 .features = featureSet(&[_]Feature{
19752117 .@"3dnow",
19762118 .cx8,
2119 .slow_unaligned_mem_16,
2120 .vzeroupper,
19772121 .x87,
19782122 }),
19792123 };
......@@ -1985,9 +2129,13 @@ pub const cpu = struct {
19852129 .@"64bit",
19862130 .cmov,
19872131 .cx8,
2132 .fast_scalar_shift_masks,
19882133 .fxsr,
19892134 .nopl,
2135 .slow_shld,
2136 .slow_unaligned_mem_16,
19902137 .sse2,
2138 .vzeroupper,
19912139 .x87,
19922140 }),
19932141 };
......@@ -1999,10 +2147,13 @@ pub const cpu = struct {
19992147 .@"64bit",
20002148 .cmov,
20012149 .cx16,
2002 .cx8,
2150 .fast_scalar_shift_masks,
20032151 .fxsr,
20042152 .nopl,
2153 .slow_shld,
2154 .slow_unaligned_mem_16,
20052155 .sse3,
2156 .vzeroupper,
20062157 .x87,
20072158 }),
20082159 };
......@@ -2015,30 +2166,32 @@ pub const cpu = struct {
20152166 .aes,
20162167 .avx512cd,
20172168 .avx512er,
2018 .avx512f,
20192169 .avx512pf,
20202170 .bmi,
20212171 .bmi2,
20222172 .cmov,
20232173 .cx16,
2024 .cx8,
2025 .f16c,
2026 .fma,
2174 .fast_gather,
20272175 .fsgsbase,
20282176 .fxsr,
2177 .idivq_to_divl,
20292178 .lzcnt,
20302179 .mmx,
20312180 .movbe,
20322181 .nopl,
20332182 .pclmul,
20342183 .popcnt,
2184 .prefer_mask_registers,
20352185 .prefetchwt1,
20362186 .prfchw,
20372187 .rdrnd,
20382188 .rdseed,
20392189 .sahf,
2190 .slow_3ops_lea,
2191 .slow_incdec,
2192 .slow_pmaddwd,
2193 .slow_two_mem_ops,
20402194 .x87,
2041 .xsave,
20422195 .xsaveopt,
20432196 }),
20442197 };
......@@ -2051,31 +2204,33 @@ pub const cpu = struct {
20512204 .aes,
20522205 .avx512cd,
20532206 .avx512er,
2054 .avx512f,
20552207 .avx512pf,
20562208 .avx512vpopcntdq,
20572209 .bmi,
20582210 .bmi2,
20592211 .cmov,
20602212 .cx16,
2061 .cx8,
2062 .f16c,
2063 .fma,
2213 .fast_gather,
20642214 .fsgsbase,
20652215 .fxsr,
2216 .idivq_to_divl,
20662217 .lzcnt,
20672218 .mmx,
20682219 .movbe,
20692220 .nopl,
20702221 .pclmul,
20712222 .popcnt,
2223 .prefer_mask_registers,
20722224 .prefetchwt1,
20732225 .prfchw,
20742226 .rdrnd,
20752227 .rdseed,
20762228 .sahf,
2229 .slow_3ops_lea,
2230 .slow_incdec,
2231 .slow_pmaddwd,
2232 .slow_two_mem_ops,
20772233 .x87,
2078 .xsave,
20792234 .xsaveopt,
20802235 }),
20812236 };
......@@ -2084,6 +2239,8 @@ pub const cpu = struct {
20842239 .llvm_name = "lakemont",
20852240 .features = featureSet(&[_]Feature{
20862241 .cx8,
2242 .slow_unaligned_mem_16,
2243 .vzeroupper,
20872244 }),
20882245 };
20892246 pub const nehalem = CpuModel{
......@@ -2093,14 +2250,14 @@ pub const cpu = struct {
20932250 .@"64bit",
20942251 .cmov,
20952252 .cx16,
2096 .cx8,
20972253 .fxsr,
2254 .macrofusion,
20982255 .mmx,
20992256 .nopl,
21002257 .popcnt,
21012258 .sahf,
2102 .sse2,
21032259 .sse4_2,
2260 .vzeroupper,
21042261 .x87,
21052262 }),
21062263 };
......@@ -2111,11 +2268,12 @@ pub const cpu = struct {
21112268 .@"64bit",
21122269 .cmov,
21132270 .cx16,
2114 .cx8,
21152271 .fxsr,
21162272 .mmx,
21172273 .nopl,
2274 .slow_unaligned_mem_16,
21182275 .sse3,
2276 .vzeroupper,
21192277 .x87,
21202278 }),
21212279 };
......@@ -2127,9 +2285,13 @@ pub const cpu = struct {
21272285 .@"64bit",
21282286 .cmov,
21292287 .cx8,
2288 .fast_scalar_shift_masks,
21302289 .fxsr,
21312290 .nopl,
2291 .slow_shld,
2292 .slow_unaligned_mem_16,
21322293 .sse2,
2294 .vzeroupper,
21332295 .x87,
21342296 }),
21352297 };
......@@ -2141,10 +2303,13 @@ pub const cpu = struct {
21412303 .@"64bit",
21422304 .cmov,
21432305 .cx16,
2144 .cx8,
2306 .fast_scalar_shift_masks,
21452307 .fxsr,
21462308 .nopl,
2309 .slow_shld,
2310 .slow_unaligned_mem_16,
21472311 .sse3,
2312 .vzeroupper,
21482313 .x87,
21492314 }),
21502315 };
......@@ -2155,12 +2320,14 @@ pub const cpu = struct {
21552320 .@"64bit",
21562321 .cmov,
21572322 .cx16,
2158 .cx8,
21592323 .fxsr,
2324 .macrofusion,
21602325 .mmx,
21612326 .nopl,
21622327 .sahf,
2328 .slow_unaligned_mem_16,
21632329 .sse4_1,
2330 .vzeroupper,
21642331 .x87,
21652332 }),
21662333 };
......@@ -2169,6 +2336,8 @@ pub const cpu = struct {
21692336 .llvm_name = "pentium",
21702337 .features = featureSet(&[_]Feature{
21712338 .cx8,
2339 .slow_unaligned_mem_16,
2340 .vzeroupper,
21722341 .x87,
21732342 }),
21742343 };
......@@ -2181,7 +2350,9 @@ pub const cpu = struct {
21812350 .fxsr,
21822351 .mmx,
21832352 .nopl,
2353 .slow_unaligned_mem_16,
21842354 .sse2,
2355 .vzeroupper,
21852356 .x87,
21862357 }),
21872358 };
......@@ -2191,6 +2362,8 @@ pub const cpu = struct {
21912362 .features = featureSet(&[_]Feature{
21922363 .cx8,
21932364 .mmx,
2365 .slow_unaligned_mem_16,
2366 .vzeroupper,
21942367 .x87,
21952368 }),
21962369 };
......@@ -2203,6 +2376,8 @@ pub const cpu = struct {
22032376 .fxsr,
22042377 .mmx,
22052378 .nopl,
2379 .slow_unaligned_mem_16,
2380 .vzeroupper,
22062381 .x87,
22072382 }),
22082383 };
......@@ -2215,7 +2390,9 @@ pub const cpu = struct {
22152390 .fxsr,
22162391 .mmx,
22172392 .nopl,
2393 .slow_unaligned_mem_16,
22182394 .sse,
2395 .vzeroupper,
22192396 .x87,
22202397 }),
22212398 };
......@@ -2228,7 +2405,9 @@ pub const cpu = struct {
22282405 .fxsr,
22292406 .mmx,
22302407 .nopl,
2408 .slow_unaligned_mem_16,
22312409 .sse,
2410 .vzeroupper,
22322411 .x87,
22332412 }),
22342413 };
......@@ -2241,7 +2420,9 @@ pub const cpu = struct {
22412420 .fxsr,
22422421 .mmx,
22432422 .nopl,
2423 .slow_unaligned_mem_16,
22442424 .sse2,
2425 .vzeroupper,
22452426 .x87,
22462427 }),
22472428 };
......@@ -2254,7 +2435,9 @@ pub const cpu = struct {
22542435 .fxsr,
22552436 .mmx,
22562437 .nopl,
2438 .slow_unaligned_mem_16,
22572439 .sse2,
2440 .vzeroupper,
22582441 .x87,
22592442 }),
22602443 };
......@@ -2265,6 +2448,8 @@ pub const cpu = struct {
22652448 .cmov,
22662449 .cx8,
22672450 .nopl,
2451 .slow_unaligned_mem_16,
2452 .vzeroupper,
22682453 .x87,
22692454 }),
22702455 };
......@@ -2277,7 +2462,9 @@ pub const cpu = struct {
22772462 .fxsr,
22782463 .mmx,
22792464 .nopl,
2465 .slow_unaligned_mem_16,
22802466 .sse3,
2467 .vzeroupper,
22812468 .x87,
22822469 }),
22832470 };
......@@ -2289,17 +2476,22 @@ pub const cpu = struct {
22892476 .avx,
22902477 .cmov,
22912478 .cx16,
2292 .cx8,
2479 .false_deps_popcnt,
2480 .fast_15bytenop,
2481 .fast_scalar_fsqrt,
2482 .fast_shld_rotate,
22932483 .fxsr,
2484 .idivq_to_divl,
2485 .macrofusion,
22942486 .mmx,
22952487 .nopl,
22962488 .pclmul,
22972489 .popcnt,
22982490 .sahf,
2299 .sse2,
2300 .sse4_2,
2491 .slow_3ops_lea,
2492 .slow_unaligned_mem_32,
2493 .vzeroupper,
23012494 .x87,
2302 .xsave,
23032495 .xsaveopt,
23042496 }),
23052497 };
......@@ -2309,18 +2501,12 @@ pub const cpu = struct {
23092501 .features = featureSet(&[_]Feature{
23102502 .@"64bit",
23112503 .adx,
2312 .aes,
23132504 .amx_bf16,
23142505 .amx_int8,
2315 .amx_tile,
2316 .avx,
2317 .avx2,
23182506 .avx512bf16,
23192507 .avx512bitalg,
2320 .avx512bw,
23212508 .avx512cd,
23222509 .avx512dq,
2323 .avx512f,
23242510 .avx512ifma,
23252511 .avx512vbmi,
23262512 .avx512vbmi2,
......@@ -2336,26 +2522,31 @@ pub const cpu = struct {
23362522 .clwb,
23372523 .cmov,
23382524 .cx16,
2339 .cx8,
23402525 .enqcmd,
23412526 .ermsb,
2342 .f16c,
2343 .fma,
2527 .fast_15bytenop,
2528 .fast_gather,
2529 .fast_scalar_fsqrt,
2530 .fast_shld_rotate,
2531 .fast_variable_shuffle,
2532 .fast_vector_fsqrt,
23442533 .fsgsbase,
23452534 .fsrm,
23462535 .fxsr,
23472536 .gfni,
2537 .idivq_to_divl,
23482538 .invpcid,
23492539 .lzcnt,
2540 .macrofusion,
23502541 .mmx,
23512542 .movbe,
23522543 .movdir64b,
23532544 .movdiri,
23542545 .nopl,
2355 .pclmul,
23562546 .pconfig,
23572547 .pku,
23582548 .popcnt,
2549 .prefer_256_bit,
23592550 .prfchw,
23602551 .ptwrite,
23612552 .rdpid,
......@@ -2366,16 +2557,15 @@ pub const cpu = struct {
23662557 .sgx,
23672558 .sha,
23682559 .shstk,
2369 .sse2,
2370 .sse4_2,
2560 .slow_3ops_lea,
23712561 .tsxldtrk,
23722562 .uintr,
23732563 .vaes,
23742564 .vpclmulqdq,
2565 .vzeroupper,
23752566 .waitpkg,
23762567 .wbnoinvd,
23772568 .x87,
2378 .xsave,
23792569 .xsavec,
23802570 .xsaveopt,
23812571 .xsaves,
......@@ -2388,8 +2578,10 @@ pub const cpu = struct {
23882578 .@"64bit",
23892579 .cmov,
23902580 .cx16,
2391 .cx8,
2581 .false_deps_popcnt,
2582 .fast_7bytenop,
23922583 .fxsr,
2584 .idivq_to_divl,
23932585 .mmx,
23942586 .movbe,
23952587 .nopl,
......@@ -2398,8 +2590,12 @@ pub const cpu = struct {
23982590 .prfchw,
23992591 .rdrnd,
24002592 .sahf,
2593 .slow_incdec,
2594 .slow_lea,
2595 .slow_pmulld,
2596 .slow_two_mem_ops,
24012597 .sse4_2,
2402 .ssse3,
2598 .vzeroupper,
24032599 .x87,
24042600 }),
24052601 };
......@@ -2410,12 +2606,9 @@ pub const cpu = struct {
24102606 .@"64bit",
24112607 .adx,
24122608 .aes,
2413 .avx,
2414 .avx2,
24152609 .avx512bw,
24162610 .avx512cd,
24172611 .avx512dq,
2418 .avx512f,
24192612 .avx512vl,
24202613 .bmi,
24212614 .bmi2,
......@@ -2423,28 +2616,34 @@ pub const cpu = struct {
24232616 .clwb,
24242617 .cmov,
24252618 .cx16,
2426 .cx8,
24272619 .ermsb,
2428 .f16c,
2429 .fma,
2620 .false_deps_popcnt,
2621 .fast_15bytenop,
2622 .fast_gather,
2623 .fast_scalar_fsqrt,
2624 .fast_shld_rotate,
2625 .fast_variable_shuffle,
2626 .fast_vector_fsqrt,
24302627 .fsgsbase,
24312628 .fxsr,
2629 .idivq_to_divl,
24322630 .invpcid,
24332631 .lzcnt,
2632 .macrofusion,
24342633 .mmx,
24352634 .movbe,
24362635 .nopl,
24372636 .pclmul,
24382637 .pku,
24392638 .popcnt,
2639 .prefer_256_bit,
24402640 .prfchw,
24412641 .rdrnd,
24422642 .rdseed,
24432643 .sahf,
2444 .sse2,
2445 .sse4_2,
2644 .slow_3ops_lea,
2645 .vzeroupper,
24462646 .x87,
2447 .xsave,
24482647 .xsavec,
24492648 .xsaveopt,
24502649 .xsaves,
......@@ -2457,21 +2656,28 @@ pub const cpu = struct {
24572656 .@"64bit",
24582657 .adx,
24592658 .aes,
2460 .avx,
24612659 .avx2,
24622660 .bmi,
24632661 .bmi2,
24642662 .clflushopt,
24652663 .cmov,
24662664 .cx16,
2467 .cx8,
24682665 .ermsb,
24692666 .f16c,
2667 .false_deps_popcnt,
2668 .fast_15bytenop,
2669 .fast_gather,
2670 .fast_scalar_fsqrt,
2671 .fast_shld_rotate,
2672 .fast_variable_shuffle,
2673 .fast_vector_fsqrt,
24702674 .fma,
24712675 .fsgsbase,
24722676 .fxsr,
2677 .idivq_to_divl,
24732678 .invpcid,
24742679 .lzcnt,
2680 .macrofusion,
24752681 .mmx,
24762682 .movbe,
24772683 .nopl,
......@@ -2482,10 +2688,9 @@ pub const cpu = struct {
24822688 .rdseed,
24832689 .sahf,
24842690 .sgx,
2485 .sse2,
2486 .sse4_2,
2691 .slow_3ops_lea,
2692 .vzeroupper,
24872693 .x87,
2488 .xsave,
24892694 .xsavec,
24902695 .xsaveopt,
24912696 .xsaves,
......@@ -2498,12 +2703,9 @@ pub const cpu = struct {
24982703 .@"64bit",
24992704 .adx,
25002705 .aes,
2501 .avx,
2502 .avx2,
25032706 .avx512bw,
25042707 .avx512cd,
25052708 .avx512dq,
2506 .avx512f,
25072709 .avx512vl,
25082710 .bmi,
25092711 .bmi2,
......@@ -2511,28 +2713,34 @@ pub const cpu = struct {
25112713 .clwb,
25122714 .cmov,
25132715 .cx16,
2514 .cx8,
25152716 .ermsb,
2516 .f16c,
2517 .fma,
2717 .false_deps_popcnt,
2718 .fast_15bytenop,
2719 .fast_gather,
2720 .fast_scalar_fsqrt,
2721 .fast_shld_rotate,
2722 .fast_variable_shuffle,
2723 .fast_vector_fsqrt,
25182724 .fsgsbase,
25192725 .fxsr,
2726 .idivq_to_divl,
25202727 .invpcid,
25212728 .lzcnt,
2729 .macrofusion,
25222730 .mmx,
25232731 .movbe,
25242732 .nopl,
25252733 .pclmul,
25262734 .pku,
25272735 .popcnt,
2736 .prefer_256_bit,
25282737 .prfchw,
25292738 .rdrnd,
25302739 .rdseed,
25312740 .sahf,
2532 .sse2,
2533 .sse4_2,
2741 .slow_3ops_lea,
2742 .vzeroupper,
25342743 .x87,
2535 .xsave,
25362744 .xsavec,
25372745 .xsaveopt,
25382746 .xsaves,
......@@ -2545,8 +2753,10 @@ pub const cpu = struct {
25452753 .@"64bit",
25462754 .cmov,
25472755 .cx16,
2548 .cx8,
2756 .false_deps_popcnt,
2757 .fast_7bytenop,
25492758 .fxsr,
2759 .idivq_to_divl,
25502760 .mmx,
25512761 .movbe,
25522762 .nopl,
......@@ -2555,8 +2765,12 @@ pub const cpu = struct {
25552765 .prfchw,
25562766 .rdrnd,
25572767 .sahf,
2768 .slow_incdec,
2769 .slow_lea,
2770 .slow_pmulld,
2771 .slow_two_mem_ops,
25582772 .sse4_2,
2559 .ssse3,
2773 .vzeroupper,
25602774 .x87,
25612775 }),
25622776 };
......@@ -2566,14 +2780,9 @@ pub const cpu = struct {
25662780 .features = featureSet(&[_]Feature{
25672781 .@"64bit",
25682782 .adx,
2569 .aes,
2570 .avx,
2571 .avx2,
25722783 .avx512bitalg,
2573 .avx512bw,
25742784 .avx512cd,
25752785 .avx512dq,
2576 .avx512f,
25772786 .avx512ifma,
25782787 .avx512vbmi,
25792788 .avx512vbmi2,
......@@ -2587,24 +2796,29 @@ pub const cpu = struct {
25872796 .clwb,
25882797 .cmov,
25892798 .cx16,
2590 .cx8,
25912799 .ermsb,
2592 .f16c,
2593 .fma,
2800 .fast_15bytenop,
2801 .fast_gather,
2802 .fast_scalar_fsqrt,
2803 .fast_shld_rotate,
2804 .fast_variable_shuffle,
2805 .fast_vector_fsqrt,
25942806 .fsgsbase,
25952807 .fsrm,
25962808 .fxsr,
25972809 .gfni,
2810 .idivq_to_divl,
25982811 .invpcid,
25992812 .lzcnt,
2813 .macrofusion,
26002814 .mmx,
26012815 .movbe,
26022816 .movdir64b,
26032817 .movdiri,
26042818 .nopl,
2605 .pclmul,
26062819 .pku,
26072820 .popcnt,
2821 .prefer_256_bit,
26082822 .prfchw,
26092823 .rdpid,
26102824 .rdrnd,
......@@ -2613,12 +2827,11 @@ pub const cpu = struct {
26132827 .sgx,
26142828 .sha,
26152829 .shstk,
2616 .sse2,
2617 .sse4_2,
2830 .slow_3ops_lea,
26182831 .vaes,
26192832 .vpclmulqdq,
2833 .vzeroupper,
26202834 .x87,
2621 .xsave,
26222835 .xsavec,
26232836 .xsaveopt,
26242837 .xsaves,
......@@ -2634,7 +2847,6 @@ pub const cpu = struct {
26342847 .clwb,
26352848 .cmov,
26362849 .cx16,
2637 .cx8,
26382850 .fsgsbase,
26392851 .fxsr,
26402852 .gfni,
......@@ -2651,10 +2863,13 @@ pub const cpu = struct {
26512863 .sahf,
26522864 .sgx,
26532865 .sha,
2866 .slow_incdec,
2867 .slow_lea,
2868 .slow_two_mem_ops,
26542869 .sse4_2,
2655 .ssse3,
2870 .use_glm_div_sqrt_costs,
2871 .vzeroupper,
26562872 .x87,
2657 .xsave,
26582873 .xsavec,
26592874 .xsaveopt,
26602875 .xsaves,
......@@ -2667,15 +2882,15 @@ pub const cpu = struct {
26672882 .@"64bit",
26682883 .cmov,
26692884 .cx16,
2670 .cx8,
26712885 .fxsr,
2886 .macrofusion,
26722887 .mmx,
26732888 .nopl,
26742889 .pclmul,
26752890 .popcnt,
26762891 .sahf,
2677 .sse2,
26782892 .sse4_2,
2893 .vzeroupper,
26792894 .x87,
26802895 }),
26812896 };
......@@ -2684,6 +2899,8 @@ pub const cpu = struct {
26842899 .llvm_name = "winchip-c6",
26852900 .features = featureSet(&[_]Feature{
26862901 .mmx,
2902 .slow_unaligned_mem_16,
2903 .vzeroupper,
26872904 .x87,
26882905 }),
26892906 };
......@@ -2692,6 +2909,8 @@ pub const cpu = struct {
26922909 .llvm_name = "winchip2",
26932910 .features = featureSet(&[_]Feature{
26942911 .@"3dnow",
2912 .slow_unaligned_mem_16,
2913 .vzeroupper,
26952914 .x87,
26962915 }),
26972916 };
......@@ -2703,9 +2922,14 @@ pub const cpu = struct {
27032922 .cmov,
27042923 .cx8,
27052924 .fxsr,
2925 .idivq_to_divl,
2926 .macrofusion,
27062927 .mmx,
27072928 .nopl,
2929 .slow_3ops_lea,
2930 .slow_incdec,
27082931 .sse2,
2932 .vzeroupper,
27092933 .x87,
27102934 }),
27112935 };
......@@ -2716,14 +2940,21 @@ pub const cpu = struct {
27162940 .@"64bit",
27172941 .cmov,
27182942 .cx16,
2719 .cx8,
2943 .false_deps_popcnt,
2944 .fast_15bytenop,
2945 .fast_scalar_fsqrt,
2946 .fast_shld_rotate,
27202947 .fxsr,
2948 .idivq_to_divl,
2949 .macrofusion,
27212950 .mmx,
27222951 .nopl,
27232952 .popcnt,
27242953 .sahf,
2725 .sse2,
2954 .slow_3ops_lea,
2955 .slow_unaligned_mem_32,
27262956 .sse4_2,
2957 .vzeroupper,
27272958 .x87,
27282959 }),
27292960 };
......@@ -2737,18 +2968,25 @@ pub const cpu = struct {
27372968 .bmi2,
27382969 .cmov,
27392970 .cx16,
2740 .cx8,
27412971 .f16c,
2972 .false_deps_lzcnt_tzcnt,
2973 .false_deps_popcnt,
2974 .fast_15bytenop,
2975 .fast_scalar_fsqrt,
2976 .fast_shld_rotate,
2977 .fast_variable_shuffle,
27422978 .fma,
27432979 .fxsr,
2980 .idivq_to_divl,
27442981 .lzcnt,
2982 .macrofusion,
27452983 .mmx,
27462984 .movbe,
27472985 .nopl,
27482986 .popcnt,
27492987 .sahf,
2750 .sse2,
2751 .sse4_2,
2988 .slow_3ops_lea,
2989 .vzeroupper,
27522990 .x87,
27532991 .xsave,
27542992 }),
......@@ -2758,7 +2996,6 @@ pub const cpu = struct {
27582996 .llvm_name = "x86-64-v4",
27592997 .features = featureSet(&[_]Feature{
27602998 .@"64bit",
2761 .avx2,
27622999 .avx512bw,
27633000 .avx512cd,
27643001 .avx512dq,
......@@ -2767,18 +3004,25 @@ pub const cpu = struct {
27673004 .bmi2,
27683005 .cmov,
27693006 .cx16,
2770 .cx8,
2771 .f16c,
2772 .fma,
2773 .fxsr,
3007 .false_deps_popcnt,
3008 .fast_15bytenop,
3009 .fast_gather,
3010 .fast_scalar_fsqrt,
3011 .fast_shld_rotate,
3012 .fast_variable_shuffle,
3013 .fast_vector_fsqrt,
3014 .fxsr,
3015 .idivq_to_divl,
27743016 .lzcnt,
3017 .macrofusion,
27753018 .mmx,
27763019 .movbe,
27773020 .nopl,
27783021 .popcnt,
3022 .prefer_256_bit,
27793023 .sahf,
2780 .sse2,
2781 .sse4_2,
3024 .slow_3ops_lea,
3025 .vzeroupper,
27823026 .x87,
27833027 .xsave,
27843028 }),
......@@ -2792,7 +3036,9 @@ pub const cpu = struct {
27923036 .fxsr,
27933037 .mmx,
27943038 .nopl,
3039 .slow_unaligned_mem_16,
27953040 .sse3,
3041 .vzeroupper,
27963042 .x87,
27973043 }),
27983044 };
......@@ -2806,11 +3052,16 @@ pub const cpu = struct {
28063052 .avx2,
28073053 .bmi,
28083054 .bmi2,
3055 .branchfusion,
28093056 .clflushopt,
28103057 .clzero,
28113058 .cmov,
28123059 .cx16,
28133060 .f16c,
3061 .fast_15bytenop,
3062 .fast_bextr,
3063 .fast_lzcnt,
3064 .fast_scalar_shift_masks,
28143065 .fma,
28153066 .fsgsbase,
28163067 .fxsr,
......@@ -2826,9 +3077,10 @@ pub const cpu = struct {
28263077 .rdseed,
28273078 .sahf,
28283079 .sha,
3080 .slow_shld,
28293081 .sse4a,
3082 .vzeroupper,
28303083 .x87,
2831 .xsave,
28323084 .xsavec,
28333085 .xsaveopt,
28343086 .xsaves,
......@@ -2844,12 +3096,17 @@ pub const cpu = struct {
28443096 .avx2,
28453097 .bmi,
28463098 .bmi2,
3099 .branchfusion,
28473100 .clflushopt,
28483101 .clwb,
28493102 .clzero,
28503103 .cmov,
28513104 .cx16,
28523105 .f16c,
3106 .fast_15bytenop,
3107 .fast_bextr,
3108 .fast_lzcnt,
3109 .fast_scalar_shift_masks,
28533110 .fma,
28543111 .fsgsbase,
28553112 .fxsr,
......@@ -2866,10 +3123,11 @@ pub const cpu = struct {
28663123 .rdseed,
28673124 .sahf,
28683125 .sha,
3126 .slow_shld,
28693127 .sse4a,
3128 .vzeroupper,
28703129 .wbnoinvd,
28713130 .x87,
2872 .xsave,
28733131 .xsavec,
28743132 .xsaveopt,
28753133 .xsaves,
......@@ -2881,18 +3139,23 @@ pub const cpu = struct {
28813139 .features = featureSet(&[_]Feature{
28823140 .@"64bit",
28833141 .adx,
2884 .aes,
28853142 .avx2,
28863143 .bmi,
28873144 .bmi2,
3145 .branchfusion,
28883146 .clflushopt,
28893147 .clwb,
28903148 .clzero,
28913149 .cmov,
28923150 .cx16,
28933151 .f16c,
3152 .fast_15bytenop,
3153 .fast_bextr,
3154 .fast_lzcnt,
3155 .fast_scalar_shift_masks,
28943156 .fma,
28953157 .fsgsbase,
3158 .fsrm,
28963159 .fxsr,
28973160 .invpcid,
28983161 .lzcnt,
......@@ -2900,7 +3163,6 @@ pub const cpu = struct {
29003163 .movbe,
29013164 .mwaitx,
29023165 .nopl,
2903 .pclmul,
29043166 .pku,
29053167 .popcnt,
29063168 .prfchw,
......@@ -2909,12 +3171,13 @@ pub const cpu = struct {
29093171 .rdseed,
29103172 .sahf,
29113173 .sha,
3174 .slow_shld,
29123175 .sse4a,
29133176 .vaes,
29143177 .vpclmulqdq,
3178 .vzeroupper,
29153179 .wbnoinvd,
29163180 .x87,
2917 .xsave,
29183181 .xsavec,
29193182 .xsaveopt,
29203183 .xsaves,