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,13 +1,12 @@
1// SPDX-License-Identifier: MIT1//! This file is auto-generated by tools/update_cpu_features.zig.
2// Copyright (c) 2015-2021 Zig Contributors2
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.
6const std = @import("../std.zig");3const std = @import("../std.zig");
7const CpuFeature = std.Target.Cpu.Feature;4const CpuFeature = std.Target.Cpu.Feature;
8const CpuModel = std.Target.Cpu.Model;5const CpuModel = std.Target.Cpu.Model;
96
10pub const Feature = enum {7pub const Feature = enum {
8 @"16bit_mode",
9 @"32bit_mode",
11 @"3dnow",10 @"3dnow",
12 @"3dnowa",11 @"3dnowa",
13 @"64bit",12 @"64bit",
...@@ -154,6 +153,16 @@ pub const all_features = blk: {...@@ -154,6 +153,16 @@ pub const all_features = blk: {
154 const len = @typeInfo(Feature).Enum.fields.len;153 const len = @typeInfo(Feature).Enum.fields.len;
155 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);154 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
156 var result: [len]CpuFeature = undefined;155 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 };
157 result[@enumToInt(Feature.@"3dnow")] = .{166 result[@enumToInt(Feature.@"3dnow")] = .{
158 .llvm_name = "3dnow",167 .llvm_name = "3dnow",
159 .description = "Enable 3DNow! instructions",168 .description = "Enable 3DNow! instructions",
...@@ -960,8 +969,6 @@ pub const cpu = struct {...@@ -960,8 +969,6 @@ pub const cpu = struct {
960 .@"64bit",969 .@"64bit",
961 .adx,970 .adx,
962 .aes,971 .aes,
963 .avx,
964 .avx2,
965 .avxvnni,972 .avxvnni,
966 .bmi,973 .bmi,
967 .bmi2,974 .bmi2,
...@@ -969,15 +976,23 @@ pub const cpu = struct {...@@ -969,15 +976,23 @@ pub const cpu = struct {
969 .clflushopt,976 .clflushopt,
970 .cmov,977 .cmov,
971 .cx16,978 .cx16,
972 .cx8,
973 .ermsb,979 .ermsb,
974 .f16c,980 .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,
975 .fma,988 .fma,
976 .fsgsbase,989 .fsgsbase,
977 .fxsr,990 .fxsr,
978 .hreset,991 .hreset,
992 .idivq_to_divl,
979 .invpcid,993 .invpcid,
980 .lzcnt,994 .lzcnt,
995 .macrofusion,
981 .mmx,996 .mmx,
982 .movbe,997 .movbe,
983 .nopl,998 .nopl,
...@@ -990,11 +1005,10 @@ pub const cpu = struct {...@@ -990,11 +1005,10 @@ pub const cpu = struct {
990 .sahf,1005 .sahf,
991 .serialize,1006 .serialize,
992 .sgx,1007 .sgx,
993 .sse2,1008 .slow_3ops_lea,
994 .sse4_2,1009 .vzeroupper,
995 .waitpkg,1010 .waitpkg,
996 .x87,1011 .x87,
997 .xsave,
998 .xsavec,1012 .xsavec,
999 .xsaveopt,1013 .xsaveopt,
1000 .xsaves,1014 .xsaves,
...@@ -1008,14 +1022,16 @@ pub const cpu = struct {...@@ -1008,14 +1022,16 @@ pub const cpu = struct {
1008 .@"64bit",1022 .@"64bit",
1009 .cmov,1023 .cmov,
1010 .cx16,1024 .cx16,
1011 .cx8,1025 .fast_scalar_shift_masks,
1012 .fxsr,1026 .fxsr,
1013 .lzcnt,1027 .lzcnt,
1014 .nopl,1028 .nopl,
1015 .popcnt,1029 .popcnt,
1016 .prfchw,1030 .prfchw,
1017 .sahf,1031 .sahf,
1032 .slow_shld,
1018 .sse4a,1033 .sse4a,
1034 .vzeroupper,
1019 .x87,1035 .x87,
1020 }),1036 }),
1021 };1037 };
...@@ -1027,6 +1043,9 @@ pub const cpu = struct {...@@ -1027,6 +1043,9 @@ pub const cpu = struct {
1027 .cmov,1043 .cmov,
1028 .cx8,1044 .cx8,
1029 .nopl,1045 .nopl,
1046 .slow_shld,
1047 .slow_unaligned_mem_16,
1048 .vzeroupper,
1030 .x87,1049 .x87,
1031 }),1050 }),
1032 };1051 };
...@@ -1039,7 +1058,10 @@ pub const cpu = struct {...@@ -1039,7 +1058,10 @@ pub const cpu = struct {
1039 .cx8,1058 .cx8,
1040 .fxsr,1059 .fxsr,
1041 .nopl,1060 .nopl,
1061 .slow_shld,
1062 .slow_unaligned_mem_16,
1042 .sse,1063 .sse,
1064 .vzeroupper,
1043 .x87,1065 .x87,
1044 }),1066 }),
1045 };1067 };
...@@ -1051,9 +1073,13 @@ pub const cpu = struct {...@@ -1051,9 +1073,13 @@ pub const cpu = struct {
1051 .@"64bit",1073 .@"64bit",
1052 .cmov,1074 .cmov,
1053 .cx8,1075 .cx8,
1076 .fast_scalar_shift_masks,
1054 .fxsr,1077 .fxsr,
1055 .nopl,1078 .nopl,
1079 .slow_shld,
1080 .slow_unaligned_mem_16,
1056 .sse2,1081 .sse2,
1082 .vzeroupper,
1057 .x87,1083 .x87,
1058 }),1084 }),
1059 };1085 };
...@@ -1066,7 +1092,10 @@ pub const cpu = struct {...@@ -1066,7 +1092,10 @@ pub const cpu = struct {
1066 .cx8,1092 .cx8,
1067 .fxsr,1093 .fxsr,
1068 .nopl,1094 .nopl,
1095 .slow_shld,
1096 .slow_unaligned_mem_16,
1069 .sse,1097 .sse,
1098 .vzeroupper,
1070 .x87,1099 .x87,
1071 }),1100 }),
1072 };1101 };
...@@ -1078,6 +1107,9 @@ pub const cpu = struct {...@@ -1078,6 +1107,9 @@ pub const cpu = struct {
1078 .cmov,1107 .cmov,
1079 .cx8,1108 .cx8,
1080 .nopl,1109 .nopl,
1110 .slow_shld,
1111 .slow_unaligned_mem_16,
1112 .vzeroupper,
1081 .x87,1113 .x87,
1082 }),1114 }),
1083 };1115 };
...@@ -1090,7 +1122,10 @@ pub const cpu = struct {...@@ -1090,7 +1122,10 @@ pub const cpu = struct {
1090 .cx8,1122 .cx8,
1091 .fxsr,1123 .fxsr,
1092 .nopl,1124 .nopl,
1125 .slow_shld,
1126 .slow_unaligned_mem_16,
1093 .sse,1127 .sse,
1128 .vzeroupper,
1094 .x87,1129 .x87,
1095 }),1130 }),
1096 };1131 };
...@@ -1102,9 +1137,13 @@ pub const cpu = struct {...@@ -1102,9 +1137,13 @@ pub const cpu = struct {
1102 .@"64bit",1137 .@"64bit",
1103 .cmov,1138 .cmov,
1104 .cx8,1139 .cx8,
1140 .fast_scalar_shift_masks,
1105 .fxsr,1141 .fxsr,
1106 .nopl,1142 .nopl,
1143 .slow_shld,
1144 .slow_unaligned_mem_16,
1107 .sse2,1145 .sse2,
1146 .vzeroupper,
1108 .x87,1147 .x87,
1109 }),1148 }),
1110 };1149 };
...@@ -1116,10 +1155,13 @@ pub const cpu = struct {...@@ -1116,10 +1155,13 @@ pub const cpu = struct {
1116 .@"64bit",1155 .@"64bit",
1117 .cmov,1156 .cmov,
1118 .cx16,1157 .cx16,
1119 .cx8,1158 .fast_scalar_shift_masks,
1120 .fxsr,1159 .fxsr,
1121 .nopl,1160 .nopl,
1161 .slow_shld,
1162 .slow_unaligned_mem_16,
1122 .sse3,1163 .sse3,
1164 .vzeroupper,
1123 .x87,1165 .x87,
1124 }),1166 }),
1125 };1167 };
...@@ -1130,13 +1172,20 @@ pub const cpu = struct {...@@ -1130,13 +1172,20 @@ pub const cpu = struct {
1130 .@"64bit",1172 .@"64bit",
1131 .cmov,1173 .cmov,
1132 .cx16,1174 .cx16,
1133 .cx8,
1134 .fxsr,1175 .fxsr,
1176 .idivl_to_divb,
1177 .idivq_to_divl,
1178 .lea_sp,
1179 .lea_uses_ag,
1135 .mmx,1180 .mmx,
1136 .movbe,1181 .movbe,
1137 .nopl,1182 .nopl,
1183 .pad_short_functions,
1138 .sahf,1184 .sahf,
1185 .slow_two_mem_ops,
1186 .slow_unaligned_mem_16,
1139 .ssse3,1187 .ssse3,
1188 .vzeroupper,
1140 .x87,1189 .x87,
1141 }),1190 }),
1142 };1191 };
...@@ -1148,14 +1197,16 @@ pub const cpu = struct {...@@ -1148,14 +1197,16 @@ pub const cpu = struct {
1148 .@"64bit",1197 .@"64bit",
1149 .cmov,1198 .cmov,
1150 .cx16,1199 .cx16,
1151 .cx8,1200 .fast_scalar_shift_masks,
1152 .fxsr,1201 .fxsr,
1153 .lzcnt,1202 .lzcnt,
1154 .nopl,1203 .nopl,
1155 .popcnt,1204 .popcnt,
1156 .prfchw,1205 .prfchw,
1157 .sahf,1206 .sahf,
1207 .slow_shld,
1158 .sse4a,1208 .sse4a,
1209 .vzeroupper,
1159 .x87,1210 .x87,
1160 }),1211 }),
1161 };1212 };
...@@ -1165,9 +1216,11 @@ pub const cpu = struct {...@@ -1165,9 +1216,11 @@ pub const cpu = struct {
1165 .features = featureSet(&[_]Feature{1216 .features = featureSet(&[_]Feature{
1166 .@"64bit",1217 .@"64bit",
1167 .aes,1218 .aes,
1219 .branchfusion,
1168 .cmov,1220 .cmov,
1169 .cx16,1221 .cx16,
1170 .cx8,1222 .fast_11bytenop,
1223 .fast_scalar_shift_masks,
1171 .fxsr,1224 .fxsr,
1172 .lwp,1225 .lwp,
1173 .lzcnt,1226 .lzcnt,
...@@ -1177,6 +1230,8 @@ pub const cpu = struct {...@@ -1177,6 +1230,8 @@ pub const cpu = struct {
1177 .popcnt,1230 .popcnt,
1178 .prfchw,1231 .prfchw,
1179 .sahf,1232 .sahf,
1233 .slow_shld,
1234 .vzeroupper,
1180 .x87,1235 .x87,
1181 .xop,1236 .xop,
1182 .xsave,1237 .xsave,
...@@ -1189,11 +1244,13 @@ pub const cpu = struct {...@@ -1189,11 +1244,13 @@ pub const cpu = struct {
1189 .@"64bit",1244 .@"64bit",
1190 .aes,1245 .aes,
1191 .bmi,1246 .bmi,
1247 .branchfusion,
1192 .cmov,1248 .cmov,
1193 .cx16,1249 .cx16,
1194 .cx8,
1195 .f16c,1250 .f16c,
1251 .fast_11bytenop,
1196 .fast_bextr,1252 .fast_bextr,
1253 .fast_scalar_shift_masks,
1197 .fma,1254 .fma,
1198 .fxsr,1255 .fxsr,
1199 .lwp,1256 .lwp,
...@@ -1204,7 +1261,9 @@ pub const cpu = struct {...@@ -1204,7 +1261,9 @@ pub const cpu = struct {
1204 .popcnt,1261 .popcnt,
1205 .prfchw,1262 .prfchw,
1206 .sahf,1263 .sahf,
1264 .slow_shld,
1207 .tbm,1265 .tbm,
1266 .vzeroupper,
1208 .x87,1267 .x87,
1209 .xop,1268 .xop,
1210 .xsave,1269 .xsave,
...@@ -1217,11 +1276,13 @@ pub const cpu = struct {...@@ -1217,11 +1276,13 @@ pub const cpu = struct {
1217 .@"64bit",1276 .@"64bit",
1218 .aes,1277 .aes,
1219 .bmi,1278 .bmi,
1279 .branchfusion,
1220 .cmov,1280 .cmov,
1221 .cx16,1281 .cx16,
1222 .cx8,
1223 .f16c,1282 .f16c,
1283 .fast_11bytenop,
1224 .fast_bextr,1284 .fast_bextr,
1285 .fast_scalar_shift_masks,
1225 .fma,1286 .fma,
1226 .fsgsbase,1287 .fsgsbase,
1227 .fxsr,1288 .fxsr,
...@@ -1233,10 +1294,11 @@ pub const cpu = struct {...@@ -1233,10 +1294,11 @@ pub const cpu = struct {
1233 .popcnt,1294 .popcnt,
1234 .prfchw,1295 .prfchw,
1235 .sahf,1296 .sahf,
1297 .slow_shld,
1236 .tbm,1298 .tbm,
1299 .vzeroupper,
1237 .x87,1300 .x87,
1238 .xop,1301 .xop,
1239 .xsave,
1240 .xsaveopt,1302 .xsaveopt,
1241 }),1303 }),
1242 };1304 };
...@@ -1249,11 +1311,13 @@ pub const cpu = struct {...@@ -1249,11 +1311,13 @@ pub const cpu = struct {
1249 .avx2,1311 .avx2,
1250 .bmi,1312 .bmi,
1251 .bmi2,1313 .bmi2,
1314 .branchfusion,
1252 .cmov,1315 .cmov,
1253 .cx16,1316 .cx16,
1254 .cx8,
1255 .f16c,1317 .f16c,
1318 .fast_11bytenop,
1256 .fast_bextr,1319 .fast_bextr,
1320 .fast_scalar_shift_masks,
1257 .fma,1321 .fma,
1258 .fsgsbase,1322 .fsgsbase,
1259 .fxsr,1323 .fxsr,
...@@ -1268,10 +1332,11 @@ pub const cpu = struct {...@@ -1268,10 +1332,11 @@ pub const cpu = struct {
1268 .prfchw,1332 .prfchw,
1269 .rdrnd,1333 .rdrnd,
1270 .sahf,1334 .sahf,
1335 .slow_shld,
1271 .tbm,1336 .tbm,
1337 .vzeroupper,
1272 .x87,1338 .x87,
1273 .xop,1339 .xop,
1274 .xsave,
1275 .xsaveopt,1340 .xsaveopt,
1276 }),1341 }),
1277 };1342 };
...@@ -1282,13 +1347,20 @@ pub const cpu = struct {...@@ -1282,13 +1347,20 @@ pub const cpu = struct {
1282 .@"64bit",1347 .@"64bit",
1283 .cmov,1348 .cmov,
1284 .cx16,1349 .cx16,
1285 .cx8,
1286 .fxsr,1350 .fxsr,
1351 .idivl_to_divb,
1352 .idivq_to_divl,
1353 .lea_sp,
1354 .lea_uses_ag,
1287 .mmx,1355 .mmx,
1288 .movbe,1356 .movbe,
1289 .nopl,1357 .nopl,
1358 .pad_short_functions,
1290 .sahf,1359 .sahf,
1360 .slow_two_mem_ops,
1361 .slow_unaligned_mem_16,
1291 .ssse3,1362 .ssse3,
1363 .vzeroupper,
1292 .x87,1364 .x87,
1293 }),1365 }),
1294 };1366 };
...@@ -1298,20 +1370,26 @@ pub const cpu = struct {...@@ -1298,20 +1370,26 @@ pub const cpu = struct {
1298 .features = featureSet(&[_]Feature{1370 .features = featureSet(&[_]Feature{
1299 .@"64bit",1371 .@"64bit",
1300 .adx,1372 .adx,
1301 .avx,
1302 .avx2,1373 .avx2,
1303 .bmi,1374 .bmi,
1304 .bmi2,1375 .bmi2,
1305 .cmov,1376 .cmov,
1306 .cx16,1377 .cx16,
1307 .cx8,
1308 .ermsb,1378 .ermsb,
1309 .f16c,1379 .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,
1310 .fma,1386 .fma,
1311 .fsgsbase,1387 .fsgsbase,
1312 .fxsr,1388 .fxsr,
1389 .idivq_to_divl,
1313 .invpcid,1390 .invpcid,
1314 .lzcnt,1391 .lzcnt,
1392 .macrofusion,
1315 .mmx,1393 .mmx,
1316 .movbe,1394 .movbe,
1317 .nopl,1395 .nopl,
...@@ -1321,10 +1399,9 @@ pub const cpu = struct {...@@ -1321,10 +1399,9 @@ pub const cpu = struct {
1321 .rdrnd,1399 .rdrnd,
1322 .rdseed,1400 .rdseed,
1323 .sahf,1401 .sahf,
1324 .sse2,1402 .slow_3ops_lea,
1325 .sse4_2,1403 .vzeroupper,
1326 .x87,1404 .x87,
1327 .xsave,
1328 .xsaveopt,1405 .xsaveopt,
1329 }),1406 }),
1330 };1407 };
...@@ -1335,7 +1412,9 @@ pub const cpu = struct {...@@ -1335,7 +1412,9 @@ pub const cpu = struct {
1335 .@"64bit",1412 .@"64bit",
1336 .cmov,1413 .cmov,
1337 .cx16,1414 .cx16,
1338 .cx8,1415 .fast_15bytenop,
1416 .fast_scalar_shift_masks,
1417 .fast_vector_shift_masks,
1339 .fxsr,1418 .fxsr,
1340 .lzcnt,1419 .lzcnt,
1341 .mmx,1420 .mmx,
...@@ -1343,8 +1422,10 @@ pub const cpu = struct {...@@ -1343,8 +1422,10 @@ pub const cpu = struct {
1343 .popcnt,1422 .popcnt,
1344 .prfchw,1423 .prfchw,
1345 .sahf,1424 .sahf,
1425 .slow_shld,
1346 .sse4a,1426 .sse4a,
1347 .ssse3,1427 .ssse3,
1428 .vzeroupper,
1348 .x87,1429 .x87,
1349 }),1430 }),
1350 };1431 };
...@@ -1354,12 +1435,16 @@ pub const cpu = struct {...@@ -1354,12 +1435,16 @@ pub const cpu = struct {
1354 .features = featureSet(&[_]Feature{1435 .features = featureSet(&[_]Feature{
1355 .@"64bit",1436 .@"64bit",
1356 .aes,1437 .aes,
1357 .avx,
1358 .bmi,1438 .bmi,
1359 .cmov,1439 .cmov,
1360 .cx16,1440 .cx16,
1361 .cx8,
1362 .f16c,1441 .f16c,
1442 .fast_15bytenop,
1443 .fast_bextr,
1444 .fast_hops,
1445 .fast_lzcnt,
1446 .fast_scalar_shift_masks,
1447 .fast_vector_shift_masks,
1363 .fxsr,1448 .fxsr,
1364 .lzcnt,1449 .lzcnt,
1365 .mmx,1450 .mmx,
...@@ -1369,10 +1454,9 @@ pub const cpu = struct {...@@ -1369,10 +1454,9 @@ pub const cpu = struct {
1369 .popcnt,1454 .popcnt,
1370 .prfchw,1455 .prfchw,
1371 .sahf,1456 .sahf,
1457 .slow_shld,
1372 .sse4a,1458 .sse4a,
1373 .ssse3,
1374 .x87,1459 .x87,
1375 .xsave,
1376 .xsaveopt,1460 .xsaveopt,
1377 }),1461 }),
1378 };1462 };
...@@ -1381,6 +1465,8 @@ pub const cpu = struct {...@@ -1381,6 +1465,8 @@ pub const cpu = struct {
1381 .llvm_name = "c3",1465 .llvm_name = "c3",
1382 .features = featureSet(&[_]Feature{1466 .features = featureSet(&[_]Feature{
1383 .@"3dnow",1467 .@"3dnow",
1468 .slow_unaligned_mem_16,
1469 .vzeroupper,
1384 .x87,1470 .x87,
1385 }),1471 }),
1386 };1472 };
...@@ -1392,7 +1478,9 @@ pub const cpu = struct {...@@ -1392,7 +1478,9 @@ pub const cpu = struct {
1392 .cx8,1478 .cx8,
1393 .fxsr,1479 .fxsr,
1394 .mmx,1480 .mmx,
1481 .slow_unaligned_mem_16,
1395 .sse,1482 .sse,
1483 .vzeroupper,
1396 .x87,1484 .x87,
1397 }),1485 }),
1398 };1486 };
...@@ -1403,12 +1491,8 @@ pub const cpu = struct {...@@ -1403,12 +1491,8 @@ pub const cpu = struct {
1403 .@"64bit",1491 .@"64bit",
1404 .adx,1492 .adx,
1405 .aes,1493 .aes,
1406 .avx,
1407 .avx2,
1408 .avx512bw,
1409 .avx512cd,1494 .avx512cd,
1410 .avx512dq,1495 .avx512dq,
1411 .avx512f,
1412 .avx512ifma,1496 .avx512ifma,
1413 .avx512vbmi,1497 .avx512vbmi,
1414 .avx512vl,1498 .avx512vl,
...@@ -1417,30 +1501,35 @@ pub const cpu = struct {...@@ -1417,30 +1501,35 @@ pub const cpu = struct {
1417 .clflushopt,1501 .clflushopt,
1418 .cmov,1502 .cmov,
1419 .cx16,1503 .cx16,
1420 .cx8,
1421 .ermsb,1504 .ermsb,
1422 .f16c,1505 .fast_15bytenop,
1423 .fma,1506 .fast_gather,
1507 .fast_scalar_fsqrt,
1508 .fast_shld_rotate,
1509 .fast_variable_shuffle,
1510 .fast_vector_fsqrt,
1424 .fsgsbase,1511 .fsgsbase,
1425 .fxsr,1512 .fxsr,
1513 .idivq_to_divl,
1426 .invpcid,1514 .invpcid,
1427 .lzcnt,1515 .lzcnt,
1516 .macrofusion,
1428 .mmx,1517 .mmx,
1429 .movbe,1518 .movbe,
1430 .nopl,1519 .nopl,
1431 .pclmul,1520 .pclmul,
1432 .pku,1521 .pku,
1433 .popcnt,1522 .popcnt,
1523 .prefer_256_bit,
1434 .prfchw,1524 .prfchw,
1435 .rdrnd,1525 .rdrnd,
1436 .rdseed,1526 .rdseed,
1437 .sahf,1527 .sahf,
1438 .sgx,1528 .sgx,
1439 .sha,1529 .sha,
1440 .sse2,1530 .slow_3ops_lea,
1441 .sse4_2,1531 .vzeroupper,
1442 .x87,1532 .x87,
1443 .xsave,
1444 .xsavec,1533 .xsavec,
1445 .xsaveopt,1534 .xsaveopt,
1446 .xsaves,1535 .xsaves,
...@@ -1453,12 +1542,9 @@ pub const cpu = struct {...@@ -1453,12 +1542,9 @@ pub const cpu = struct {
1453 .@"64bit",1542 .@"64bit",
1454 .adx,1543 .adx,
1455 .aes,1544 .aes,
1456 .avx,
1457 .avx2,
1458 .avx512bw,1545 .avx512bw,
1459 .avx512cd,1546 .avx512cd,
1460 .avx512dq,1547 .avx512dq,
1461 .avx512f,
1462 .avx512vl,1548 .avx512vl,
1463 .avx512vnni,1549 .avx512vnni,
1464 .bmi,1550 .bmi,
...@@ -1467,28 +1553,34 @@ pub const cpu = struct {...@@ -1467,28 +1553,34 @@ pub const cpu = struct {
1467 .clwb,1553 .clwb,
1468 .cmov,1554 .cmov,
1469 .cx16,1555 .cx16,
1470 .cx8,
1471 .ermsb,1556 .ermsb,
1472 .f16c,1557 .false_deps_popcnt,
1473 .fma,1558 .fast_15bytenop,
1559 .fast_gather,
1560 .fast_scalar_fsqrt,
1561 .fast_shld_rotate,
1562 .fast_variable_shuffle,
1563 .fast_vector_fsqrt,
1474 .fsgsbase,1564 .fsgsbase,
1475 .fxsr,1565 .fxsr,
1566 .idivq_to_divl,
1476 .invpcid,1567 .invpcid,
1477 .lzcnt,1568 .lzcnt,
1569 .macrofusion,
1478 .mmx,1570 .mmx,
1479 .movbe,1571 .movbe,
1480 .nopl,1572 .nopl,
1481 .pclmul,1573 .pclmul,
1482 .pku,1574 .pku,
1483 .popcnt,1575 .popcnt,
1576 .prefer_256_bit,
1484 .prfchw,1577 .prfchw,
1485 .rdrnd,1578 .rdrnd,
1486 .rdseed,1579 .rdseed,
1487 .sahf,1580 .sahf,
1488 .sse2,1581 .slow_3ops_lea,
1489 .sse4_2,1582 .vzeroupper,
1490 .x87,1583 .x87,
1491 .xsave,
1492 .xsavec,1584 .xsavec,
1493 .xsaveopt,1585 .xsaveopt,
1494 .xsaves,1586 .xsaves,
...@@ -1501,13 +1593,9 @@ pub const cpu = struct {...@@ -1501,13 +1593,9 @@ pub const cpu = struct {
1501 .@"64bit",1593 .@"64bit",
1502 .adx,1594 .adx,
1503 .aes,1595 .aes,
1504 .avx,
1505 .avx2,
1506 .avx512bf16,1596 .avx512bf16,
1507 .avx512bw,
1508 .avx512cd,1597 .avx512cd,
1509 .avx512dq,1598 .avx512dq,
1510 .avx512f,
1511 .avx512vl,1599 .avx512vl,
1512 .avx512vnni,1600 .avx512vnni,
1513 .bmi,1601 .bmi,
...@@ -1516,28 +1604,34 @@ pub const cpu = struct {...@@ -1516,28 +1604,34 @@ pub const cpu = struct {
1516 .clwb,1604 .clwb,
1517 .cmov,1605 .cmov,
1518 .cx16,1606 .cx16,
1519 .cx8,
1520 .ermsb,1607 .ermsb,
1521 .f16c,1608 .false_deps_popcnt,
1522 .fma,1609 .fast_15bytenop,
1610 .fast_gather,
1611 .fast_scalar_fsqrt,
1612 .fast_shld_rotate,
1613 .fast_variable_shuffle,
1614 .fast_vector_fsqrt,
1523 .fsgsbase,1615 .fsgsbase,
1524 .fxsr,1616 .fxsr,
1617 .idivq_to_divl,
1525 .invpcid,1618 .invpcid,
1526 .lzcnt,1619 .lzcnt,
1620 .macrofusion,
1527 .mmx,1621 .mmx,
1528 .movbe,1622 .movbe,
1529 .nopl,1623 .nopl,
1530 .pclmul,1624 .pclmul,
1531 .pku,1625 .pku,
1532 .popcnt,1626 .popcnt,
1627 .prefer_256_bit,
1533 .prfchw,1628 .prfchw,
1534 .rdrnd,1629 .rdrnd,
1535 .rdseed,1630 .rdseed,
1536 .sahf,1631 .sahf,
1537 .sse2,1632 .slow_3ops_lea,
1538 .sse4_2,1633 .vzeroupper,
1539 .x87,1634 .x87,
1540 .xsave,
1541 .xsavec,1635 .xsavec,
1542 .xsaveopt,1636 .xsaveopt,
1543 .xsaves,1637 .xsaves,
...@@ -1548,23 +1642,27 @@ pub const cpu = struct {...@@ -1548,23 +1642,27 @@ pub const cpu = struct {
1548 .llvm_name = "core-avx-i",1642 .llvm_name = "core-avx-i",
1549 .features = featureSet(&[_]Feature{1643 .features = featureSet(&[_]Feature{
1550 .@"64bit",1644 .@"64bit",
1551 .avx,
1552 .cmov,1645 .cmov,
1553 .cx16,1646 .cx16,
1554 .cx8,
1555 .f16c,1647 .f16c,
1648 .false_deps_popcnt,
1649 .fast_15bytenop,
1650 .fast_scalar_fsqrt,
1651 .fast_shld_rotate,
1556 .fsgsbase,1652 .fsgsbase,
1557 .fxsr,1653 .fxsr,
1654 .idivq_to_divl,
1655 .macrofusion,
1558 .mmx,1656 .mmx,
1559 .nopl,1657 .nopl,
1560 .pclmul,1658 .pclmul,
1561 .popcnt,1659 .popcnt,
1562 .rdrnd,1660 .rdrnd,
1563 .sahf,1661 .sahf,
1564 .sse2,1662 .slow_3ops_lea,
1565 .sse4_2,1663 .slow_unaligned_mem_32,
1664 .vzeroupper,
1566 .x87,1665 .x87,
1567 .xsave,
1568 .xsaveopt,1666 .xsaveopt,
1569 }),1667 }),
1570 };1668 };
...@@ -1573,20 +1671,26 @@ pub const cpu = struct {...@@ -1573,20 +1671,26 @@ pub const cpu = struct {
1573 .llvm_name = "core-avx2",1671 .llvm_name = "core-avx2",
1574 .features = featureSet(&[_]Feature{1672 .features = featureSet(&[_]Feature{
1575 .@"64bit",1673 .@"64bit",
1576 .avx,
1577 .avx2,1674 .avx2,
1578 .bmi,1675 .bmi,
1579 .bmi2,1676 .bmi2,
1580 .cmov,1677 .cmov,
1581 .cx16,1678 .cx16,
1582 .cx8,
1583 .ermsb,1679 .ermsb,
1584 .f16c,1680 .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,
1585 .fma,1687 .fma,
1586 .fsgsbase,1688 .fsgsbase,
1587 .fxsr,1689 .fxsr,
1690 .idivq_to_divl,
1588 .invpcid,1691 .invpcid,
1589 .lzcnt,1692 .lzcnt,
1693 .macrofusion,
1590 .mmx,1694 .mmx,
1591 .movbe,1695 .movbe,
1592 .nopl,1696 .nopl,
...@@ -1594,10 +1698,9 @@ pub const cpu = struct {...@@ -1594,10 +1698,9 @@ pub const cpu = struct {
1594 .popcnt,1698 .popcnt,
1595 .rdrnd,1699 .rdrnd,
1596 .sahf,1700 .sahf,
1597 .sse2,1701 .slow_3ops_lea,
1598 .sse4_2,1702 .vzeroupper,
1599 .x87,1703 .x87,
1600 .xsave,
1601 .xsaveopt,1704 .xsaveopt,
1602 }),1705 }),
1603 };1706 };
...@@ -1608,12 +1711,14 @@ pub const cpu = struct {...@@ -1608,12 +1711,14 @@ pub const cpu = struct {
1608 .@"64bit",1711 .@"64bit",
1609 .cmov,1712 .cmov,
1610 .cx16,1713 .cx16,
1611 .cx8,
1612 .fxsr,1714 .fxsr,
1715 .macrofusion,
1613 .mmx,1716 .mmx,
1614 .nopl,1717 .nopl,
1615 .sahf,1718 .sahf,
1719 .slow_unaligned_mem_16,
1616 .ssse3,1720 .ssse3,
1721 .vzeroupper,
1617 .x87,1722 .x87,
1618 }),1723 }),
1619 };1724 };
...@@ -1624,14 +1729,14 @@ pub const cpu = struct {...@@ -1624,14 +1729,14 @@ pub const cpu = struct {
1624 .@"64bit",1729 .@"64bit",
1625 .cmov,1730 .cmov,
1626 .cx16,1731 .cx16,
1627 .cx8,
1628 .fxsr,1732 .fxsr,
1733 .macrofusion,
1629 .mmx,1734 .mmx,
1630 .nopl,1735 .nopl,
1631 .popcnt,1736 .popcnt,
1632 .sahf,1737 .sahf,
1633 .sse2,
1634 .sse4_2,1738 .sse4_2,
1739 .vzeroupper,
1635 .x87,1740 .x87,
1636 }),1741 }),
1637 };1742 };
...@@ -1643,17 +1748,22 @@ pub const cpu = struct {...@@ -1643,17 +1748,22 @@ pub const cpu = struct {
1643 .avx,1748 .avx,
1644 .cmov,1749 .cmov,
1645 .cx16,1750 .cx16,
1646 .cx8,1751 .false_deps_popcnt,
1752 .fast_15bytenop,
1753 .fast_scalar_fsqrt,
1754 .fast_shld_rotate,
1647 .fxsr,1755 .fxsr,
1756 .idivq_to_divl,
1757 .macrofusion,
1648 .mmx,1758 .mmx,
1649 .nopl,1759 .nopl,
1650 .pclmul,1760 .pclmul,
1651 .popcnt,1761 .popcnt,
1652 .sahf,1762 .sahf,
1653 .sse2,1763 .slow_3ops_lea,
1654 .sse4_2,1764 .slow_unaligned_mem_32,
1765 .vzeroupper,
1655 .x87,1766 .x87,
1656 .xsave,
1657 .xsaveopt,1767 .xsaveopt,
1658 }),1768 }),
1659 };1769 };
...@@ -1661,7 +1771,13 @@ pub const cpu = struct {...@@ -1661,7 +1771,13 @@ pub const cpu = struct {
1661 .name = "generic",1771 .name = "generic",
1662 .llvm_name = "generic",1772 .llvm_name = "generic",
1663 .features = featureSet(&[_]Feature{1773 .features = featureSet(&[_]Feature{
1774 .@"64bit",
1664 .cx8,1775 .cx8,
1776 .idivq_to_divl,
1777 .macrofusion,
1778 .slow_3ops_lea,
1779 .slow_incdec,
1780 .vzeroupper,
1665 .x87,1781 .x87,
1666 }),1782 }),
1667 };1783 };
...@@ -1671,6 +1787,8 @@ pub const cpu = struct {...@@ -1671,6 +1787,8 @@ pub const cpu = struct {
1671 .features = featureSet(&[_]Feature{1787 .features = featureSet(&[_]Feature{
1672 .@"3dnowa",1788 .@"3dnowa",
1673 .cx8,1789 .cx8,
1790 .slow_unaligned_mem_16,
1791 .vzeroupper,
1674 .x87,1792 .x87,
1675 }),1793 }),
1676 };1794 };
...@@ -1683,7 +1801,7 @@ pub const cpu = struct {...@@ -1683,7 +1801,7 @@ pub const cpu = struct {
1683 .clflushopt,1801 .clflushopt,
1684 .cmov,1802 .cmov,
1685 .cx16,1803 .cx16,
1686 .cx8,1804 .false_deps_popcnt,
1687 .fsgsbase,1805 .fsgsbase,
1688 .fxsr,1806 .fxsr,
1689 .mmx,1807 .mmx,
...@@ -1696,10 +1814,13 @@ pub const cpu = struct {...@@ -1696,10 +1814,13 @@ pub const cpu = struct {
1696 .rdseed,1814 .rdseed,
1697 .sahf,1815 .sahf,
1698 .sha,1816 .sha,
1817 .slow_incdec,
1818 .slow_lea,
1819 .slow_two_mem_ops,
1699 .sse4_2,1820 .sse4_2,
1700 .ssse3,1821 .use_glm_div_sqrt_costs,
1822 .vzeroupper,
1701 .x87,1823 .x87,
1702 .xsave,
1703 .xsavec,1824 .xsavec,
1704 .xsaveopt,1825 .xsaveopt,
1705 .xsaves,1826 .xsaves,
...@@ -1714,7 +1835,6 @@ pub const cpu = struct {...@@ -1714,7 +1835,6 @@ pub const cpu = struct {
1714 .clflushopt,1835 .clflushopt,
1715 .cmov,1836 .cmov,
1716 .cx16,1837 .cx16,
1717 .cx8,
1718 .fsgsbase,1838 .fsgsbase,
1719 .fxsr,1839 .fxsr,
1720 .mmx,1840 .mmx,
...@@ -1730,10 +1850,13 @@ pub const cpu = struct {...@@ -1730,10 +1850,13 @@ pub const cpu = struct {
1730 .sahf,1850 .sahf,
1731 .sgx,1851 .sgx,
1732 .sha,1852 .sha,
1853 .slow_incdec,
1854 .slow_lea,
1855 .slow_two_mem_ops,
1733 .sse4_2,1856 .sse4_2,
1734 .ssse3,1857 .use_glm_div_sqrt_costs,
1858 .vzeroupper,
1735 .x87,1859 .x87,
1736 .xsave,
1737 .xsavec,1860 .xsavec,
1738 .xsaveopt,1861 .xsaveopt,
1739 .xsaves,1862 .xsaves,
...@@ -1744,20 +1867,26 @@ pub const cpu = struct {...@@ -1744,20 +1867,26 @@ pub const cpu = struct {
1744 .llvm_name = "haswell",1867 .llvm_name = "haswell",
1745 .features = featureSet(&[_]Feature{1868 .features = featureSet(&[_]Feature{
1746 .@"64bit",1869 .@"64bit",
1747 .avx,
1748 .avx2,1870 .avx2,
1749 .bmi,1871 .bmi,
1750 .bmi2,1872 .bmi2,
1751 .cmov,1873 .cmov,
1752 .cx16,1874 .cx16,
1753 .cx8,
1754 .ermsb,1875 .ermsb,
1755 .f16c,1876 .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,
1756 .fma,1883 .fma,
1757 .fsgsbase,1884 .fsgsbase,
1758 .fxsr,1885 .fxsr,
1886 .idivq_to_divl,
1759 .invpcid,1887 .invpcid,
1760 .lzcnt,1888 .lzcnt,
1889 .macrofusion,
1761 .mmx,1890 .mmx,
1762 .movbe,1891 .movbe,
1763 .nopl,1892 .nopl,
...@@ -1765,10 +1894,9 @@ pub const cpu = struct {...@@ -1765,10 +1894,9 @@ pub const cpu = struct {
1765 .popcnt,1894 .popcnt,
1766 .rdrnd,1895 .rdrnd,
1767 .sahf,1896 .sahf,
1768 .sse2,1897 .slow_3ops_lea,
1769 .sse4_2,1898 .vzeroupper,
1770 .x87,1899 .x87,
1771 .xsave,
1772 .xsaveopt,1900 .xsaveopt,
1773 }),1901 }),
1774 };1902 };
...@@ -1776,6 +1904,8 @@ pub const cpu = struct {...@@ -1776,6 +1904,8 @@ pub const cpu = struct {
1776 .name = "_i386",1904 .name = "_i386",
1777 .llvm_name = "i386",1905 .llvm_name = "i386",
1778 .features = featureSet(&[_]Feature{1906 .features = featureSet(&[_]Feature{
1907 .slow_unaligned_mem_16,
1908 .vzeroupper,
1779 .x87,1909 .x87,
1780 }),1910 }),
1781 };1911 };
...@@ -1783,6 +1913,8 @@ pub const cpu = struct {...@@ -1783,6 +1913,8 @@ pub const cpu = struct {
1783 .name = "_i486",1913 .name = "_i486",
1784 .llvm_name = "i486",1914 .llvm_name = "i486",
1785 .features = featureSet(&[_]Feature{1915 .features = featureSet(&[_]Feature{
1916 .slow_unaligned_mem_16,
1917 .vzeroupper,
1786 .x87,1918 .x87,
1787 }),1919 }),
1788 };1920 };
...@@ -1791,6 +1923,8 @@ pub const cpu = struct {...@@ -1791,6 +1923,8 @@ pub const cpu = struct {
1791 .llvm_name = "i586",1923 .llvm_name = "i586",
1792 .features = featureSet(&[_]Feature{1924 .features = featureSet(&[_]Feature{
1793 .cx8,1925 .cx8,
1926 .slow_unaligned_mem_16,
1927 .vzeroupper,
1794 .x87,1928 .x87,
1795 }),1929 }),
1796 };1930 };
...@@ -1800,6 +1934,8 @@ pub const cpu = struct {...@@ -1800,6 +1934,8 @@ pub const cpu = struct {
1800 .features = featureSet(&[_]Feature{1934 .features = featureSet(&[_]Feature{
1801 .cmov,1935 .cmov,
1802 .cx8,1936 .cx8,
1937 .slow_unaligned_mem_16,
1938 .vzeroupper,
1803 .x87,1939 .x87,
1804 }),1940 }),
1805 };1941 };
...@@ -1809,14 +1945,9 @@ pub const cpu = struct {...@@ -1809,14 +1945,9 @@ pub const cpu = struct {
1809 .features = featureSet(&[_]Feature{1945 .features = featureSet(&[_]Feature{
1810 .@"64bit",1946 .@"64bit",
1811 .adx,1947 .adx,
1812 .aes,
1813 .avx,
1814 .avx2,
1815 .avx512bitalg,1948 .avx512bitalg,
1816 .avx512bw,
1817 .avx512cd,1949 .avx512cd,
1818 .avx512dq,1950 .avx512dq,
1819 .avx512f,
1820 .avx512ifma,1951 .avx512ifma,
1821 .avx512vbmi,1952 .avx512vbmi,
1822 .avx512vbmi2,1953 .avx512vbmi2,
...@@ -1829,22 +1960,27 @@ pub const cpu = struct {...@@ -1829,22 +1960,27 @@ pub const cpu = struct {
1829 .clwb,1960 .clwb,
1830 .cmov,1961 .cmov,
1831 .cx16,1962 .cx16,
1832 .cx8,
1833 .ermsb,1963 .ermsb,
1834 .f16c,1964 .fast_15bytenop,
1835 .fma,1965 .fast_gather,
1966 .fast_scalar_fsqrt,
1967 .fast_shld_rotate,
1968 .fast_variable_shuffle,
1969 .fast_vector_fsqrt,
1836 .fsgsbase,1970 .fsgsbase,
1837 .fsrm,1971 .fsrm,
1838 .fxsr,1972 .fxsr,
1839 .gfni,1973 .gfni,
1974 .idivq_to_divl,
1840 .invpcid,1975 .invpcid,
1841 .lzcnt,1976 .lzcnt,
1977 .macrofusion,
1842 .mmx,1978 .mmx,
1843 .movbe,1979 .movbe,
1844 .nopl,1980 .nopl,
1845 .pclmul,
1846 .pku,1981 .pku,
1847 .popcnt,1982 .popcnt,
1983 .prefer_256_bit,
1848 .prfchw,1984 .prfchw,
1849 .rdpid,1985 .rdpid,
1850 .rdrnd,1986 .rdrnd,
...@@ -1852,12 +1988,11 @@ pub const cpu = struct {...@@ -1852,12 +1988,11 @@ pub const cpu = struct {
1852 .sahf,1988 .sahf,
1853 .sgx,1989 .sgx,
1854 .sha,1990 .sha,
1855 .sse2,1991 .slow_3ops_lea,
1856 .sse4_2,
1857 .vaes,1992 .vaes,
1858 .vpclmulqdq,1993 .vpclmulqdq,
1994 .vzeroupper,
1859 .x87,1995 .x87,
1860 .xsave,
1861 .xsavec,1996 .xsavec,
1862 .xsaveopt,1997 .xsaveopt,
1863 .xsaves,1998 .xsaves,
...@@ -1869,14 +2004,9 @@ pub const cpu = struct {...@@ -1869,14 +2004,9 @@ pub const cpu = struct {
1869 .features = featureSet(&[_]Feature{2004 .features = featureSet(&[_]Feature{
1870 .@"64bit",2005 .@"64bit",
1871 .adx,2006 .adx,
1872 .aes,
1873 .avx,
1874 .avx2,
1875 .avx512bitalg,2007 .avx512bitalg,
1876 .avx512bw,
1877 .avx512cd,2008 .avx512cd,
1878 .avx512dq,2009 .avx512dq,
1879 .avx512f,
1880 .avx512ifma,2010 .avx512ifma,
1881 .avx512vbmi,2011 .avx512vbmi,
1882 .avx512vbmi2,2012 .avx512vbmi2,
...@@ -1889,23 +2019,28 @@ pub const cpu = struct {...@@ -1889,23 +2019,28 @@ pub const cpu = struct {
1889 .clwb,2019 .clwb,
1890 .cmov,2020 .cmov,
1891 .cx16,2021 .cx16,
1892 .cx8,
1893 .ermsb,2022 .ermsb,
1894 .f16c,2023 .fast_15bytenop,
1895 .fma,2024 .fast_gather,
2025 .fast_scalar_fsqrt,
2026 .fast_shld_rotate,
2027 .fast_variable_shuffle,
2028 .fast_vector_fsqrt,
1896 .fsgsbase,2029 .fsgsbase,
1897 .fsrm,2030 .fsrm,
1898 .fxsr,2031 .fxsr,
1899 .gfni,2032 .gfni,
2033 .idivq_to_divl,
1900 .invpcid,2034 .invpcid,
1901 .lzcnt,2035 .lzcnt,
2036 .macrofusion,
1902 .mmx,2037 .mmx,
1903 .movbe,2038 .movbe,
1904 .nopl,2039 .nopl,
1905 .pclmul,
1906 .pconfig,2040 .pconfig,
1907 .pku,2041 .pku,
1908 .popcnt,2042 .popcnt,
2043 .prefer_256_bit,
1909 .prfchw,2044 .prfchw,
1910 .rdpid,2045 .rdpid,
1911 .rdrnd,2046 .rdrnd,
...@@ -1913,13 +2048,12 @@ pub const cpu = struct {...@@ -1913,13 +2048,12 @@ pub const cpu = struct {
1913 .sahf,2048 .sahf,
1914 .sgx,2049 .sgx,
1915 .sha,2050 .sha,
1916 .sse2,2051 .slow_3ops_lea,
1917 .sse4_2,
1918 .vaes,2052 .vaes,
1919 .vpclmulqdq,2053 .vpclmulqdq,
2054 .vzeroupper,
1920 .wbnoinvd,2055 .wbnoinvd,
1921 .x87,2056 .x87,
1922 .xsave,
1923 .xsavec,2057 .xsavec,
1924 .xsaveopt,2058 .xsaveopt,
1925 .xsaves,2059 .xsaves,
...@@ -1930,23 +2064,27 @@ pub const cpu = struct {...@@ -1930,23 +2064,27 @@ pub const cpu = struct {
1930 .llvm_name = "ivybridge",2064 .llvm_name = "ivybridge",
1931 .features = featureSet(&[_]Feature{2065 .features = featureSet(&[_]Feature{
1932 .@"64bit",2066 .@"64bit",
1933 .avx,
1934 .cmov,2067 .cmov,
1935 .cx16,2068 .cx16,
1936 .cx8,
1937 .f16c,2069 .f16c,
2070 .false_deps_popcnt,
2071 .fast_15bytenop,
2072 .fast_scalar_fsqrt,
2073 .fast_shld_rotate,
1938 .fsgsbase,2074 .fsgsbase,
1939 .fxsr,2075 .fxsr,
2076 .idivq_to_divl,
2077 .macrofusion,
1940 .mmx,2078 .mmx,
1941 .nopl,2079 .nopl,
1942 .pclmul,2080 .pclmul,
1943 .popcnt,2081 .popcnt,
1944 .rdrnd,2082 .rdrnd,
1945 .sahf,2083 .sahf,
1946 .sse2,2084 .slow_3ops_lea,
1947 .sse4_2,2085 .slow_unaligned_mem_32,
2086 .vzeroupper,
1948 .x87,2087 .x87,
1949 .xsave,
1950 .xsaveopt,2088 .xsaveopt,
1951 }),2089 }),
1952 };2090 };
...@@ -1956,6 +2094,8 @@ pub const cpu = struct {...@@ -1956,6 +2094,8 @@ pub const cpu = struct {
1956 .features = featureSet(&[_]Feature{2094 .features = featureSet(&[_]Feature{
1957 .cx8,2095 .cx8,
1958 .mmx,2096 .mmx,
2097 .slow_unaligned_mem_16,
2098 .vzeroupper,
1959 .x87,2099 .x87,
1960 }),2100 }),
1961 };2101 };
...@@ -1965,6 +2105,8 @@ pub const cpu = struct {...@@ -1965,6 +2105,8 @@ pub const cpu = struct {
1965 .features = featureSet(&[_]Feature{2105 .features = featureSet(&[_]Feature{
1966 .@"3dnow",2106 .@"3dnow",
1967 .cx8,2107 .cx8,
2108 .slow_unaligned_mem_16,
2109 .vzeroupper,
1968 .x87,2110 .x87,
1969 }),2111 }),
1970 };2112 };
...@@ -1974,6 +2116,8 @@ pub const cpu = struct {...@@ -1974,6 +2116,8 @@ pub const cpu = struct {
1974 .features = featureSet(&[_]Feature{2116 .features = featureSet(&[_]Feature{
1975 .@"3dnow",2117 .@"3dnow",
1976 .cx8,2118 .cx8,
2119 .slow_unaligned_mem_16,
2120 .vzeroupper,
1977 .x87,2121 .x87,
1978 }),2122 }),
1979 };2123 };
...@@ -1985,9 +2129,13 @@ pub const cpu = struct {...@@ -1985,9 +2129,13 @@ pub const cpu = struct {
1985 .@"64bit",2129 .@"64bit",
1986 .cmov,2130 .cmov,
1987 .cx8,2131 .cx8,
2132 .fast_scalar_shift_masks,
1988 .fxsr,2133 .fxsr,
1989 .nopl,2134 .nopl,
2135 .slow_shld,
2136 .slow_unaligned_mem_16,
1990 .sse2,2137 .sse2,
2138 .vzeroupper,
1991 .x87,2139 .x87,
1992 }),2140 }),
1993 };2141 };
...@@ -1999,10 +2147,13 @@ pub const cpu = struct {...@@ -1999,10 +2147,13 @@ pub const cpu = struct {
1999 .@"64bit",2147 .@"64bit",
2000 .cmov,2148 .cmov,
2001 .cx16,2149 .cx16,
2002 .cx8,2150 .fast_scalar_shift_masks,
2003 .fxsr,2151 .fxsr,
2004 .nopl,2152 .nopl,
2153 .slow_shld,
2154 .slow_unaligned_mem_16,
2005 .sse3,2155 .sse3,
2156 .vzeroupper,
2006 .x87,2157 .x87,
2007 }),2158 }),
2008 };2159 };
...@@ -2015,30 +2166,32 @@ pub const cpu = struct {...@@ -2015,30 +2166,32 @@ pub const cpu = struct {
2015 .aes,2166 .aes,
2016 .avx512cd,2167 .avx512cd,
2017 .avx512er,2168 .avx512er,
2018 .avx512f,
2019 .avx512pf,2169 .avx512pf,
2020 .bmi,2170 .bmi,
2021 .bmi2,2171 .bmi2,
2022 .cmov,2172 .cmov,
2023 .cx16,2173 .cx16,
2024 .cx8,2174 .fast_gather,
2025 .f16c,
2026 .fma,
2027 .fsgsbase,2175 .fsgsbase,
2028 .fxsr,2176 .fxsr,
2177 .idivq_to_divl,
2029 .lzcnt,2178 .lzcnt,
2030 .mmx,2179 .mmx,
2031 .movbe,2180 .movbe,
2032 .nopl,2181 .nopl,
2033 .pclmul,2182 .pclmul,
2034 .popcnt,2183 .popcnt,
2184 .prefer_mask_registers,
2035 .prefetchwt1,2185 .prefetchwt1,
2036 .prfchw,2186 .prfchw,
2037 .rdrnd,2187 .rdrnd,
2038 .rdseed,2188 .rdseed,
2039 .sahf,2189 .sahf,
2190 .slow_3ops_lea,
2191 .slow_incdec,
2192 .slow_pmaddwd,
2193 .slow_two_mem_ops,
2040 .x87,2194 .x87,
2041 .xsave,
2042 .xsaveopt,2195 .xsaveopt,
2043 }),2196 }),
2044 };2197 };
...@@ -2051,31 +2204,33 @@ pub const cpu = struct {...@@ -2051,31 +2204,33 @@ pub const cpu = struct {
2051 .aes,2204 .aes,
2052 .avx512cd,2205 .avx512cd,
2053 .avx512er,2206 .avx512er,
2054 .avx512f,
2055 .avx512pf,2207 .avx512pf,
2056 .avx512vpopcntdq,2208 .avx512vpopcntdq,
2057 .bmi,2209 .bmi,
2058 .bmi2,2210 .bmi2,
2059 .cmov,2211 .cmov,
2060 .cx16,2212 .cx16,
2061 .cx8,2213 .fast_gather,
2062 .f16c,
2063 .fma,
2064 .fsgsbase,2214 .fsgsbase,
2065 .fxsr,2215 .fxsr,
2216 .idivq_to_divl,
2066 .lzcnt,2217 .lzcnt,
2067 .mmx,2218 .mmx,
2068 .movbe,2219 .movbe,
2069 .nopl,2220 .nopl,
2070 .pclmul,2221 .pclmul,
2071 .popcnt,2222 .popcnt,
2223 .prefer_mask_registers,
2072 .prefetchwt1,2224 .prefetchwt1,
2073 .prfchw,2225 .prfchw,
2074 .rdrnd,2226 .rdrnd,
2075 .rdseed,2227 .rdseed,
2076 .sahf,2228 .sahf,
2229 .slow_3ops_lea,
2230 .slow_incdec,
2231 .slow_pmaddwd,
2232 .slow_two_mem_ops,
2077 .x87,2233 .x87,
2078 .xsave,
2079 .xsaveopt,2234 .xsaveopt,
2080 }),2235 }),
2081 };2236 };
...@@ -2084,6 +2239,8 @@ pub const cpu = struct {...@@ -2084,6 +2239,8 @@ pub const cpu = struct {
2084 .llvm_name = "lakemont",2239 .llvm_name = "lakemont",
2085 .features = featureSet(&[_]Feature{2240 .features = featureSet(&[_]Feature{
2086 .cx8,2241 .cx8,
2242 .slow_unaligned_mem_16,
2243 .vzeroupper,
2087 }),2244 }),
2088 };2245 };
2089 pub const nehalem = CpuModel{2246 pub const nehalem = CpuModel{
...@@ -2093,14 +2250,14 @@ pub const cpu = struct {...@@ -2093,14 +2250,14 @@ pub const cpu = struct {
2093 .@"64bit",2250 .@"64bit",
2094 .cmov,2251 .cmov,
2095 .cx16,2252 .cx16,
2096 .cx8,
2097 .fxsr,2253 .fxsr,
2254 .macrofusion,
2098 .mmx,2255 .mmx,
2099 .nopl,2256 .nopl,
2100 .popcnt,2257 .popcnt,
2101 .sahf,2258 .sahf,
2102 .sse2,
2103 .sse4_2,2259 .sse4_2,
2260 .vzeroupper,
2104 .x87,2261 .x87,
2105 }),2262 }),
2106 };2263 };
...@@ -2111,11 +2268,12 @@ pub const cpu = struct {...@@ -2111,11 +2268,12 @@ pub const cpu = struct {
2111 .@"64bit",2268 .@"64bit",
2112 .cmov,2269 .cmov,
2113 .cx16,2270 .cx16,
2114 .cx8,
2115 .fxsr,2271 .fxsr,
2116 .mmx,2272 .mmx,
2117 .nopl,2273 .nopl,
2274 .slow_unaligned_mem_16,
2118 .sse3,2275 .sse3,
2276 .vzeroupper,
2119 .x87,2277 .x87,
2120 }),2278 }),
2121 };2279 };
...@@ -2127,9 +2285,13 @@ pub const cpu = struct {...@@ -2127,9 +2285,13 @@ pub const cpu = struct {
2127 .@"64bit",2285 .@"64bit",
2128 .cmov,2286 .cmov,
2129 .cx8,2287 .cx8,
2288 .fast_scalar_shift_masks,
2130 .fxsr,2289 .fxsr,
2131 .nopl,2290 .nopl,
2291 .slow_shld,
2292 .slow_unaligned_mem_16,
2132 .sse2,2293 .sse2,
2294 .vzeroupper,
2133 .x87,2295 .x87,
2134 }),2296 }),
2135 };2297 };
...@@ -2141,10 +2303,13 @@ pub const cpu = struct {...@@ -2141,10 +2303,13 @@ pub const cpu = struct {
2141 .@"64bit",2303 .@"64bit",
2142 .cmov,2304 .cmov,
2143 .cx16,2305 .cx16,
2144 .cx8,2306 .fast_scalar_shift_masks,
2145 .fxsr,2307 .fxsr,
2146 .nopl,2308 .nopl,
2309 .slow_shld,
2310 .slow_unaligned_mem_16,
2147 .sse3,2311 .sse3,
2312 .vzeroupper,
2148 .x87,2313 .x87,
2149 }),2314 }),
2150 };2315 };
...@@ -2155,12 +2320,14 @@ pub const cpu = struct {...@@ -2155,12 +2320,14 @@ pub const cpu = struct {
2155 .@"64bit",2320 .@"64bit",
2156 .cmov,2321 .cmov,
2157 .cx16,2322 .cx16,
2158 .cx8,
2159 .fxsr,2323 .fxsr,
2324 .macrofusion,
2160 .mmx,2325 .mmx,
2161 .nopl,2326 .nopl,
2162 .sahf,2327 .sahf,
2328 .slow_unaligned_mem_16,
2163 .sse4_1,2329 .sse4_1,
2330 .vzeroupper,
2164 .x87,2331 .x87,
2165 }),2332 }),
2166 };2333 };
...@@ -2169,6 +2336,8 @@ pub const cpu = struct {...@@ -2169,6 +2336,8 @@ pub const cpu = struct {
2169 .llvm_name = "pentium",2336 .llvm_name = "pentium",
2170 .features = featureSet(&[_]Feature{2337 .features = featureSet(&[_]Feature{
2171 .cx8,2338 .cx8,
2339 .slow_unaligned_mem_16,
2340 .vzeroupper,
2172 .x87,2341 .x87,
2173 }),2342 }),
2174 };2343 };
...@@ -2181,7 +2350,9 @@ pub const cpu = struct {...@@ -2181,7 +2350,9 @@ pub const cpu = struct {
2181 .fxsr,2350 .fxsr,
2182 .mmx,2351 .mmx,
2183 .nopl,2352 .nopl,
2353 .slow_unaligned_mem_16,
2184 .sse2,2354 .sse2,
2355 .vzeroupper,
2185 .x87,2356 .x87,
2186 }),2357 }),
2187 };2358 };
...@@ -2191,6 +2362,8 @@ pub const cpu = struct {...@@ -2191,6 +2362,8 @@ pub const cpu = struct {
2191 .features = featureSet(&[_]Feature{2362 .features = featureSet(&[_]Feature{
2192 .cx8,2363 .cx8,
2193 .mmx,2364 .mmx,
2365 .slow_unaligned_mem_16,
2366 .vzeroupper,
2194 .x87,2367 .x87,
2195 }),2368 }),
2196 };2369 };
...@@ -2203,6 +2376,8 @@ pub const cpu = struct {...@@ -2203,6 +2376,8 @@ pub const cpu = struct {
2203 .fxsr,2376 .fxsr,
2204 .mmx,2377 .mmx,
2205 .nopl,2378 .nopl,
2379 .slow_unaligned_mem_16,
2380 .vzeroupper,
2206 .x87,2381 .x87,
2207 }),2382 }),
2208 };2383 };
...@@ -2215,7 +2390,9 @@ pub const cpu = struct {...@@ -2215,7 +2390,9 @@ pub const cpu = struct {
2215 .fxsr,2390 .fxsr,
2216 .mmx,2391 .mmx,
2217 .nopl,2392 .nopl,
2393 .slow_unaligned_mem_16,
2218 .sse,2394 .sse,
2395 .vzeroupper,
2219 .x87,2396 .x87,
2220 }),2397 }),
2221 };2398 };
...@@ -2228,7 +2405,9 @@ pub const cpu = struct {...@@ -2228,7 +2405,9 @@ pub const cpu = struct {
2228 .fxsr,2405 .fxsr,
2229 .mmx,2406 .mmx,
2230 .nopl,2407 .nopl,
2408 .slow_unaligned_mem_16,
2231 .sse,2409 .sse,
2410 .vzeroupper,
2232 .x87,2411 .x87,
2233 }),2412 }),
2234 };2413 };
...@@ -2241,7 +2420,9 @@ pub const cpu = struct {...@@ -2241,7 +2420,9 @@ pub const cpu = struct {
2241 .fxsr,2420 .fxsr,
2242 .mmx,2421 .mmx,
2243 .nopl,2422 .nopl,
2423 .slow_unaligned_mem_16,
2244 .sse2,2424 .sse2,
2425 .vzeroupper,
2245 .x87,2426 .x87,
2246 }),2427 }),
2247 };2428 };
...@@ -2254,7 +2435,9 @@ pub const cpu = struct {...@@ -2254,7 +2435,9 @@ pub const cpu = struct {
2254 .fxsr,2435 .fxsr,
2255 .mmx,2436 .mmx,
2256 .nopl,2437 .nopl,
2438 .slow_unaligned_mem_16,
2257 .sse2,2439 .sse2,
2440 .vzeroupper,
2258 .x87,2441 .x87,
2259 }),2442 }),
2260 };2443 };
...@@ -2265,6 +2448,8 @@ pub const cpu = struct {...@@ -2265,6 +2448,8 @@ pub const cpu = struct {
2265 .cmov,2448 .cmov,
2266 .cx8,2449 .cx8,
2267 .nopl,2450 .nopl,
2451 .slow_unaligned_mem_16,
2452 .vzeroupper,
2268 .x87,2453 .x87,
2269 }),2454 }),
2270 };2455 };
...@@ -2277,7 +2462,9 @@ pub const cpu = struct {...@@ -2277,7 +2462,9 @@ pub const cpu = struct {
2277 .fxsr,2462 .fxsr,
2278 .mmx,2463 .mmx,
2279 .nopl,2464 .nopl,
2465 .slow_unaligned_mem_16,
2280 .sse3,2466 .sse3,
2467 .vzeroupper,
2281 .x87,2468 .x87,
2282 }),2469 }),
2283 };2470 };
...@@ -2289,17 +2476,22 @@ pub const cpu = struct {...@@ -2289,17 +2476,22 @@ pub const cpu = struct {
2289 .avx,2476 .avx,
2290 .cmov,2477 .cmov,
2291 .cx16,2478 .cx16,
2292 .cx8,2479 .false_deps_popcnt,
2480 .fast_15bytenop,
2481 .fast_scalar_fsqrt,
2482 .fast_shld_rotate,
2293 .fxsr,2483 .fxsr,
2484 .idivq_to_divl,
2485 .macrofusion,
2294 .mmx,2486 .mmx,
2295 .nopl,2487 .nopl,
2296 .pclmul,2488 .pclmul,
2297 .popcnt,2489 .popcnt,
2298 .sahf,2490 .sahf,
2299 .sse2,2491 .slow_3ops_lea,
2300 .sse4_2,2492 .slow_unaligned_mem_32,
2493 .vzeroupper,
2301 .x87,2494 .x87,
2302 .xsave,
2303 .xsaveopt,2495 .xsaveopt,
2304 }),2496 }),
2305 };2497 };
...@@ -2309,18 +2501,12 @@ pub const cpu = struct {...@@ -2309,18 +2501,12 @@ pub const cpu = struct {
2309 .features = featureSet(&[_]Feature{2501 .features = featureSet(&[_]Feature{
2310 .@"64bit",2502 .@"64bit",
2311 .adx,2503 .adx,
2312 .aes,
2313 .amx_bf16,2504 .amx_bf16,
2314 .amx_int8,2505 .amx_int8,
2315 .amx_tile,
2316 .avx,
2317 .avx2,
2318 .avx512bf16,2506 .avx512bf16,
2319 .avx512bitalg,2507 .avx512bitalg,
2320 .avx512bw,
2321 .avx512cd,2508 .avx512cd,
2322 .avx512dq,2509 .avx512dq,
2323 .avx512f,
2324 .avx512ifma,2510 .avx512ifma,
2325 .avx512vbmi,2511 .avx512vbmi,
2326 .avx512vbmi2,2512 .avx512vbmi2,
...@@ -2336,26 +2522,31 @@ pub const cpu = struct {...@@ -2336,26 +2522,31 @@ pub const cpu = struct {
2336 .clwb,2522 .clwb,
2337 .cmov,2523 .cmov,
2338 .cx16,2524 .cx16,
2339 .cx8,
2340 .enqcmd,2525 .enqcmd,
2341 .ermsb,2526 .ermsb,
2342 .f16c,2527 .fast_15bytenop,
2343 .fma,2528 .fast_gather,
2529 .fast_scalar_fsqrt,
2530 .fast_shld_rotate,
2531 .fast_variable_shuffle,
2532 .fast_vector_fsqrt,
2344 .fsgsbase,2533 .fsgsbase,
2345 .fsrm,2534 .fsrm,
2346 .fxsr,2535 .fxsr,
2347 .gfni,2536 .gfni,
2537 .idivq_to_divl,
2348 .invpcid,2538 .invpcid,
2349 .lzcnt,2539 .lzcnt,
2540 .macrofusion,
2350 .mmx,2541 .mmx,
2351 .movbe,2542 .movbe,
2352 .movdir64b,2543 .movdir64b,
2353 .movdiri,2544 .movdiri,
2354 .nopl,2545 .nopl,
2355 .pclmul,
2356 .pconfig,2546 .pconfig,
2357 .pku,2547 .pku,
2358 .popcnt,2548 .popcnt,
2549 .prefer_256_bit,
2359 .prfchw,2550 .prfchw,
2360 .ptwrite,2551 .ptwrite,
2361 .rdpid,2552 .rdpid,
...@@ -2366,16 +2557,15 @@ pub const cpu = struct {...@@ -2366,16 +2557,15 @@ pub const cpu = struct {
2366 .sgx,2557 .sgx,
2367 .sha,2558 .sha,
2368 .shstk,2559 .shstk,
2369 .sse2,2560 .slow_3ops_lea,
2370 .sse4_2,
2371 .tsxldtrk,2561 .tsxldtrk,
2372 .uintr,2562 .uintr,
2373 .vaes,2563 .vaes,
2374 .vpclmulqdq,2564 .vpclmulqdq,
2565 .vzeroupper,
2375 .waitpkg,2566 .waitpkg,
2376 .wbnoinvd,2567 .wbnoinvd,
2377 .x87,2568 .x87,
2378 .xsave,
2379 .xsavec,2569 .xsavec,
2380 .xsaveopt,2570 .xsaveopt,
2381 .xsaves,2571 .xsaves,
...@@ -2388,8 +2578,10 @@ pub const cpu = struct {...@@ -2388,8 +2578,10 @@ pub const cpu = struct {
2388 .@"64bit",2578 .@"64bit",
2389 .cmov,2579 .cmov,
2390 .cx16,2580 .cx16,
2391 .cx8,2581 .false_deps_popcnt,
2582 .fast_7bytenop,
2392 .fxsr,2583 .fxsr,
2584 .idivq_to_divl,
2393 .mmx,2585 .mmx,
2394 .movbe,2586 .movbe,
2395 .nopl,2587 .nopl,
...@@ -2398,8 +2590,12 @@ pub const cpu = struct {...@@ -2398,8 +2590,12 @@ pub const cpu = struct {
2398 .prfchw,2590 .prfchw,
2399 .rdrnd,2591 .rdrnd,
2400 .sahf,2592 .sahf,
2593 .slow_incdec,
2594 .slow_lea,
2595 .slow_pmulld,
2596 .slow_two_mem_ops,
2401 .sse4_2,2597 .sse4_2,
2402 .ssse3,2598 .vzeroupper,
2403 .x87,2599 .x87,
2404 }),2600 }),
2405 };2601 };
...@@ -2410,12 +2606,9 @@ pub const cpu = struct {...@@ -2410,12 +2606,9 @@ pub const cpu = struct {
2410 .@"64bit",2606 .@"64bit",
2411 .adx,2607 .adx,
2412 .aes,2608 .aes,
2413 .avx,
2414 .avx2,
2415 .avx512bw,2609 .avx512bw,
2416 .avx512cd,2610 .avx512cd,
2417 .avx512dq,2611 .avx512dq,
2418 .avx512f,
2419 .avx512vl,2612 .avx512vl,
2420 .bmi,2613 .bmi,
2421 .bmi2,2614 .bmi2,
...@@ -2423,28 +2616,34 @@ pub const cpu = struct {...@@ -2423,28 +2616,34 @@ pub const cpu = struct {
2423 .clwb,2616 .clwb,
2424 .cmov,2617 .cmov,
2425 .cx16,2618 .cx16,
2426 .cx8,
2427 .ermsb,2619 .ermsb,
2428 .f16c,2620 .false_deps_popcnt,
2429 .fma,2621 .fast_15bytenop,
2622 .fast_gather,
2623 .fast_scalar_fsqrt,
2624 .fast_shld_rotate,
2625 .fast_variable_shuffle,
2626 .fast_vector_fsqrt,
2430 .fsgsbase,2627 .fsgsbase,
2431 .fxsr,2628 .fxsr,
2629 .idivq_to_divl,
2432 .invpcid,2630 .invpcid,
2433 .lzcnt,2631 .lzcnt,
2632 .macrofusion,
2434 .mmx,2633 .mmx,
2435 .movbe,2634 .movbe,
2436 .nopl,2635 .nopl,
2437 .pclmul,2636 .pclmul,
2438 .pku,2637 .pku,
2439 .popcnt,2638 .popcnt,
2639 .prefer_256_bit,
2440 .prfchw,2640 .prfchw,
2441 .rdrnd,2641 .rdrnd,
2442 .rdseed,2642 .rdseed,
2443 .sahf,2643 .sahf,
2444 .sse2,2644 .slow_3ops_lea,
2445 .sse4_2,2645 .vzeroupper,
2446 .x87,2646 .x87,
2447 .xsave,
2448 .xsavec,2647 .xsavec,
2449 .xsaveopt,2648 .xsaveopt,
2450 .xsaves,2649 .xsaves,
...@@ -2457,21 +2656,28 @@ pub const cpu = struct {...@@ -2457,21 +2656,28 @@ pub const cpu = struct {
2457 .@"64bit",2656 .@"64bit",
2458 .adx,2657 .adx,
2459 .aes,2658 .aes,
2460 .avx,
2461 .avx2,2659 .avx2,
2462 .bmi,2660 .bmi,
2463 .bmi2,2661 .bmi2,
2464 .clflushopt,2662 .clflushopt,
2465 .cmov,2663 .cmov,
2466 .cx16,2664 .cx16,
2467 .cx8,
2468 .ermsb,2665 .ermsb,
2469 .f16c,2666 .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,
2470 .fma,2674 .fma,
2471 .fsgsbase,2675 .fsgsbase,
2472 .fxsr,2676 .fxsr,
2677 .idivq_to_divl,
2473 .invpcid,2678 .invpcid,
2474 .lzcnt,2679 .lzcnt,
2680 .macrofusion,
2475 .mmx,2681 .mmx,
2476 .movbe,2682 .movbe,
2477 .nopl,2683 .nopl,
...@@ -2482,10 +2688,9 @@ pub const cpu = struct {...@@ -2482,10 +2688,9 @@ pub const cpu = struct {
2482 .rdseed,2688 .rdseed,
2483 .sahf,2689 .sahf,
2484 .sgx,2690 .sgx,
2485 .sse2,2691 .slow_3ops_lea,
2486 .sse4_2,2692 .vzeroupper,
2487 .x87,2693 .x87,
2488 .xsave,
2489 .xsavec,2694 .xsavec,
2490 .xsaveopt,2695 .xsaveopt,
2491 .xsaves,2696 .xsaves,
...@@ -2498,12 +2703,9 @@ pub const cpu = struct {...@@ -2498,12 +2703,9 @@ pub const cpu = struct {
2498 .@"64bit",2703 .@"64bit",
2499 .adx,2704 .adx,
2500 .aes,2705 .aes,
2501 .avx,
2502 .avx2,
2503 .avx512bw,2706 .avx512bw,
2504 .avx512cd,2707 .avx512cd,
2505 .avx512dq,2708 .avx512dq,
2506 .avx512f,
2507 .avx512vl,2709 .avx512vl,
2508 .bmi,2710 .bmi,
2509 .bmi2,2711 .bmi2,
...@@ -2511,28 +2713,34 @@ pub const cpu = struct {...@@ -2511,28 +2713,34 @@ pub const cpu = struct {
2511 .clwb,2713 .clwb,
2512 .cmov,2714 .cmov,
2513 .cx16,2715 .cx16,
2514 .cx8,
2515 .ermsb,2716 .ermsb,
2516 .f16c,2717 .false_deps_popcnt,
2517 .fma,2718 .fast_15bytenop,
2719 .fast_gather,
2720 .fast_scalar_fsqrt,
2721 .fast_shld_rotate,
2722 .fast_variable_shuffle,
2723 .fast_vector_fsqrt,
2518 .fsgsbase,2724 .fsgsbase,
2519 .fxsr,2725 .fxsr,
2726 .idivq_to_divl,
2520 .invpcid,2727 .invpcid,
2521 .lzcnt,2728 .lzcnt,
2729 .macrofusion,
2522 .mmx,2730 .mmx,
2523 .movbe,2731 .movbe,
2524 .nopl,2732 .nopl,
2525 .pclmul,2733 .pclmul,
2526 .pku,2734 .pku,
2527 .popcnt,2735 .popcnt,
2736 .prefer_256_bit,
2528 .prfchw,2737 .prfchw,
2529 .rdrnd,2738 .rdrnd,
2530 .rdseed,2739 .rdseed,
2531 .sahf,2740 .sahf,
2532 .sse2,2741 .slow_3ops_lea,
2533 .sse4_2,2742 .vzeroupper,
2534 .x87,2743 .x87,
2535 .xsave,
2536 .xsavec,2744 .xsavec,
2537 .xsaveopt,2745 .xsaveopt,
2538 .xsaves,2746 .xsaves,
...@@ -2545,8 +2753,10 @@ pub const cpu = struct {...@@ -2545,8 +2753,10 @@ pub const cpu = struct {
2545 .@"64bit",2753 .@"64bit",
2546 .cmov,2754 .cmov,
2547 .cx16,2755 .cx16,
2548 .cx8,2756 .false_deps_popcnt,
2757 .fast_7bytenop,
2549 .fxsr,2758 .fxsr,
2759 .idivq_to_divl,
2550 .mmx,2760 .mmx,
2551 .movbe,2761 .movbe,
2552 .nopl,2762 .nopl,
...@@ -2555,8 +2765,12 @@ pub const cpu = struct {...@@ -2555,8 +2765,12 @@ pub const cpu = struct {
2555 .prfchw,2765 .prfchw,
2556 .rdrnd,2766 .rdrnd,
2557 .sahf,2767 .sahf,
2768 .slow_incdec,
2769 .slow_lea,
2770 .slow_pmulld,
2771 .slow_two_mem_ops,
2558 .sse4_2,2772 .sse4_2,
2559 .ssse3,2773 .vzeroupper,
2560 .x87,2774 .x87,
2561 }),2775 }),
2562 };2776 };
...@@ -2566,14 +2780,9 @@ pub const cpu = struct {...@@ -2566,14 +2780,9 @@ pub const cpu = struct {
2566 .features = featureSet(&[_]Feature{2780 .features = featureSet(&[_]Feature{
2567 .@"64bit",2781 .@"64bit",
2568 .adx,2782 .adx,
2569 .aes,
2570 .avx,
2571 .avx2,
2572 .avx512bitalg,2783 .avx512bitalg,
2573 .avx512bw,
2574 .avx512cd,2784 .avx512cd,
2575 .avx512dq,2785 .avx512dq,
2576 .avx512f,
2577 .avx512ifma,2786 .avx512ifma,
2578 .avx512vbmi,2787 .avx512vbmi,
2579 .avx512vbmi2,2788 .avx512vbmi2,
...@@ -2587,24 +2796,29 @@ pub const cpu = struct {...@@ -2587,24 +2796,29 @@ pub const cpu = struct {
2587 .clwb,2796 .clwb,
2588 .cmov,2797 .cmov,
2589 .cx16,2798 .cx16,
2590 .cx8,
2591 .ermsb,2799 .ermsb,
2592 .f16c,2800 .fast_15bytenop,
2593 .fma,2801 .fast_gather,
2802 .fast_scalar_fsqrt,
2803 .fast_shld_rotate,
2804 .fast_variable_shuffle,
2805 .fast_vector_fsqrt,
2594 .fsgsbase,2806 .fsgsbase,
2595 .fsrm,2807 .fsrm,
2596 .fxsr,2808 .fxsr,
2597 .gfni,2809 .gfni,
2810 .idivq_to_divl,
2598 .invpcid,2811 .invpcid,
2599 .lzcnt,2812 .lzcnt,
2813 .macrofusion,
2600 .mmx,2814 .mmx,
2601 .movbe,2815 .movbe,
2602 .movdir64b,2816 .movdir64b,
2603 .movdiri,2817 .movdiri,
2604 .nopl,2818 .nopl,
2605 .pclmul,
2606 .pku,2819 .pku,
2607 .popcnt,2820 .popcnt,
2821 .prefer_256_bit,
2608 .prfchw,2822 .prfchw,
2609 .rdpid,2823 .rdpid,
2610 .rdrnd,2824 .rdrnd,
...@@ -2613,12 +2827,11 @@ pub const cpu = struct {...@@ -2613,12 +2827,11 @@ pub const cpu = struct {
2613 .sgx,2827 .sgx,
2614 .sha,2828 .sha,
2615 .shstk,2829 .shstk,
2616 .sse2,2830 .slow_3ops_lea,
2617 .sse4_2,
2618 .vaes,2831 .vaes,
2619 .vpclmulqdq,2832 .vpclmulqdq,
2833 .vzeroupper,
2620 .x87,2834 .x87,
2621 .xsave,
2622 .xsavec,2835 .xsavec,
2623 .xsaveopt,2836 .xsaveopt,
2624 .xsaves,2837 .xsaves,
...@@ -2634,7 +2847,6 @@ pub const cpu = struct {...@@ -2634,7 +2847,6 @@ pub const cpu = struct {
2634 .clwb,2847 .clwb,
2635 .cmov,2848 .cmov,
2636 .cx16,2849 .cx16,
2637 .cx8,
2638 .fsgsbase,2850 .fsgsbase,
2639 .fxsr,2851 .fxsr,
2640 .gfni,2852 .gfni,
...@@ -2651,10 +2863,13 @@ pub const cpu = struct {...@@ -2651,10 +2863,13 @@ pub const cpu = struct {
2651 .sahf,2863 .sahf,
2652 .sgx,2864 .sgx,
2653 .sha,2865 .sha,
2866 .slow_incdec,
2867 .slow_lea,
2868 .slow_two_mem_ops,
2654 .sse4_2,2869 .sse4_2,
2655 .ssse3,2870 .use_glm_div_sqrt_costs,
2871 .vzeroupper,
2656 .x87,2872 .x87,
2657 .xsave,
2658 .xsavec,2873 .xsavec,
2659 .xsaveopt,2874 .xsaveopt,
2660 .xsaves,2875 .xsaves,
...@@ -2667,15 +2882,15 @@ pub const cpu = struct {...@@ -2667,15 +2882,15 @@ pub const cpu = struct {
2667 .@"64bit",2882 .@"64bit",
2668 .cmov,2883 .cmov,
2669 .cx16,2884 .cx16,
2670 .cx8,
2671 .fxsr,2885 .fxsr,
2886 .macrofusion,
2672 .mmx,2887 .mmx,
2673 .nopl,2888 .nopl,
2674 .pclmul,2889 .pclmul,
2675 .popcnt,2890 .popcnt,
2676 .sahf,2891 .sahf,
2677 .sse2,
2678 .sse4_2,2892 .sse4_2,
2893 .vzeroupper,
2679 .x87,2894 .x87,
2680 }),2895 }),
2681 };2896 };
...@@ -2684,6 +2899,8 @@ pub const cpu = struct {...@@ -2684,6 +2899,8 @@ pub const cpu = struct {
2684 .llvm_name = "winchip-c6",2899 .llvm_name = "winchip-c6",
2685 .features = featureSet(&[_]Feature{2900 .features = featureSet(&[_]Feature{
2686 .mmx,2901 .mmx,
2902 .slow_unaligned_mem_16,
2903 .vzeroupper,
2687 .x87,2904 .x87,
2688 }),2905 }),
2689 };2906 };
...@@ -2692,6 +2909,8 @@ pub const cpu = struct {...@@ -2692,6 +2909,8 @@ pub const cpu = struct {
2692 .llvm_name = "winchip2",2909 .llvm_name = "winchip2",
2693 .features = featureSet(&[_]Feature{2910 .features = featureSet(&[_]Feature{
2694 .@"3dnow",2911 .@"3dnow",
2912 .slow_unaligned_mem_16,
2913 .vzeroupper,
2695 .x87,2914 .x87,
2696 }),2915 }),
2697 };2916 };
...@@ -2703,9 +2922,14 @@ pub const cpu = struct {...@@ -2703,9 +2922,14 @@ pub const cpu = struct {
2703 .cmov,2922 .cmov,
2704 .cx8,2923 .cx8,
2705 .fxsr,2924 .fxsr,
2925 .idivq_to_divl,
2926 .macrofusion,
2706 .mmx,2927 .mmx,
2707 .nopl,2928 .nopl,
2929 .slow_3ops_lea,
2930 .slow_incdec,
2708 .sse2,2931 .sse2,
2932 .vzeroupper,
2709 .x87,2933 .x87,
2710 }),2934 }),
2711 };2935 };
...@@ -2716,14 +2940,21 @@ pub const cpu = struct {...@@ -2716,14 +2940,21 @@ pub const cpu = struct {
2716 .@"64bit",2940 .@"64bit",
2717 .cmov,2941 .cmov,
2718 .cx16,2942 .cx16,
2719 .cx8,2943 .false_deps_popcnt,
2944 .fast_15bytenop,
2945 .fast_scalar_fsqrt,
2946 .fast_shld_rotate,
2720 .fxsr,2947 .fxsr,
2948 .idivq_to_divl,
2949 .macrofusion,
2721 .mmx,2950 .mmx,
2722 .nopl,2951 .nopl,
2723 .popcnt,2952 .popcnt,
2724 .sahf,2953 .sahf,
2725 .sse2,2954 .slow_3ops_lea,
2955 .slow_unaligned_mem_32,
2726 .sse4_2,2956 .sse4_2,
2957 .vzeroupper,
2727 .x87,2958 .x87,
2728 }),2959 }),
2729 };2960 };
...@@ -2737,18 +2968,25 @@ pub const cpu = struct {...@@ -2737,18 +2968,25 @@ pub const cpu = struct {
2737 .bmi2,2968 .bmi2,
2738 .cmov,2969 .cmov,
2739 .cx16,2970 .cx16,
2740 .cx8,
2741 .f16c,2971 .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,
2742 .fma,2978 .fma,
2743 .fxsr,2979 .fxsr,
2980 .idivq_to_divl,
2744 .lzcnt,2981 .lzcnt,
2982 .macrofusion,
2745 .mmx,2983 .mmx,
2746 .movbe,2984 .movbe,
2747 .nopl,2985 .nopl,
2748 .popcnt,2986 .popcnt,
2749 .sahf,2987 .sahf,
2750 .sse2,2988 .slow_3ops_lea,
2751 .sse4_2,2989 .vzeroupper,
2752 .x87,2990 .x87,
2753 .xsave,2991 .xsave,
2754 }),2992 }),
...@@ -2758,7 +2996,6 @@ pub const cpu = struct {...@@ -2758,7 +2996,6 @@ pub const cpu = struct {
2758 .llvm_name = "x86-64-v4",2996 .llvm_name = "x86-64-v4",
2759 .features = featureSet(&[_]Feature{2997 .features = featureSet(&[_]Feature{
2760 .@"64bit",2998 .@"64bit",
2761 .avx2,
2762 .avx512bw,2999 .avx512bw,
2763 .avx512cd,3000 .avx512cd,
2764 .avx512dq,3001 .avx512dq,
...@@ -2767,18 +3004,25 @@ pub const cpu = struct {...@@ -2767,18 +3004,25 @@ pub const cpu = struct {
2767 .bmi2,3004 .bmi2,
2768 .cmov,3005 .cmov,
2769 .cx16,3006 .cx16,
2770 .cx8,3007 .false_deps_popcnt,
2771 .f16c,3008 .fast_15bytenop,
2772 .fma,3009 .fast_gather,
2773 .fxsr,3010 .fast_scalar_fsqrt,
3011 .fast_shld_rotate,
3012 .fast_variable_shuffle,
3013 .fast_vector_fsqrt,
3014 .fxsr,
3015 .idivq_to_divl,
2774 .lzcnt,3016 .lzcnt,
3017 .macrofusion,
2775 .mmx,3018 .mmx,
2776 .movbe,3019 .movbe,
2777 .nopl,3020 .nopl,
2778 .popcnt,3021 .popcnt,
3022 .prefer_256_bit,
2779 .sahf,3023 .sahf,
2780 .sse2,3024 .slow_3ops_lea,
2781 .sse4_2,3025 .vzeroupper,
2782 .x87,3026 .x87,
2783 .xsave,3027 .xsave,
2784 }),3028 }),
...@@ -2792,7 +3036,9 @@ pub const cpu = struct {...@@ -2792,7 +3036,9 @@ pub const cpu = struct {
2792 .fxsr,3036 .fxsr,
2793 .mmx,3037 .mmx,
2794 .nopl,3038 .nopl,
3039 .slow_unaligned_mem_16,
2795 .sse3,3040 .sse3,
3041 .vzeroupper,
2796 .x87,3042 .x87,
2797 }),3043 }),
2798 };3044 };
...@@ -2806,11 +3052,16 @@ pub const cpu = struct {...@@ -2806,11 +3052,16 @@ pub const cpu = struct {
2806 .avx2,3052 .avx2,
2807 .bmi,3053 .bmi,
2808 .bmi2,3054 .bmi2,
3055 .branchfusion,
2809 .clflushopt,3056 .clflushopt,
2810 .clzero,3057 .clzero,
2811 .cmov,3058 .cmov,
2812 .cx16,3059 .cx16,
2813 .f16c,3060 .f16c,
3061 .fast_15bytenop,
3062 .fast_bextr,
3063 .fast_lzcnt,
3064 .fast_scalar_shift_masks,
2814 .fma,3065 .fma,
2815 .fsgsbase,3066 .fsgsbase,
2816 .fxsr,3067 .fxsr,
...@@ -2826,9 +3077,10 @@ pub const cpu = struct {...@@ -2826,9 +3077,10 @@ pub const cpu = struct {
2826 .rdseed,3077 .rdseed,
2827 .sahf,3078 .sahf,
2828 .sha,3079 .sha,
3080 .slow_shld,
2829 .sse4a,3081 .sse4a,
3082 .vzeroupper,
2830 .x87,3083 .x87,
2831 .xsave,
2832 .xsavec,3084 .xsavec,
2833 .xsaveopt,3085 .xsaveopt,
2834 .xsaves,3086 .xsaves,
...@@ -2844,12 +3096,17 @@ pub const cpu = struct {...@@ -2844,12 +3096,17 @@ pub const cpu = struct {
2844 .avx2,3096 .avx2,
2845 .bmi,3097 .bmi,
2846 .bmi2,3098 .bmi2,
3099 .branchfusion,
2847 .clflushopt,3100 .clflushopt,
2848 .clwb,3101 .clwb,
2849 .clzero,3102 .clzero,
2850 .cmov,3103 .cmov,
2851 .cx16,3104 .cx16,
2852 .f16c,3105 .f16c,
3106 .fast_15bytenop,
3107 .fast_bextr,
3108 .fast_lzcnt,
3109 .fast_scalar_shift_masks,
2853 .fma,3110 .fma,
2854 .fsgsbase,3111 .fsgsbase,
2855 .fxsr,3112 .fxsr,
...@@ -2866,10 +3123,11 @@ pub const cpu = struct {...@@ -2866,10 +3123,11 @@ pub const cpu = struct {
2866 .rdseed,3123 .rdseed,
2867 .sahf,3124 .sahf,
2868 .sha,3125 .sha,
3126 .slow_shld,
2869 .sse4a,3127 .sse4a,
3128 .vzeroupper,
2870 .wbnoinvd,3129 .wbnoinvd,
2871 .x87,3130 .x87,
2872 .xsave,
2873 .xsavec,3131 .xsavec,
2874 .xsaveopt,3132 .xsaveopt,
2875 .xsaves,3133 .xsaves,
...@@ -2881,18 +3139,23 @@ pub const cpu = struct {...@@ -2881,18 +3139,23 @@ pub const cpu = struct {
2881 .features = featureSet(&[_]Feature{3139 .features = featureSet(&[_]Feature{
2882 .@"64bit",3140 .@"64bit",
2883 .adx,3141 .adx,
2884 .aes,
2885 .avx2,3142 .avx2,
2886 .bmi,3143 .bmi,
2887 .bmi2,3144 .bmi2,
3145 .branchfusion,
2888 .clflushopt,3146 .clflushopt,
2889 .clwb,3147 .clwb,
2890 .clzero,3148 .clzero,
2891 .cmov,3149 .cmov,
2892 .cx16,3150 .cx16,
2893 .f16c,3151 .f16c,
3152 .fast_15bytenop,
3153 .fast_bextr,
3154 .fast_lzcnt,
3155 .fast_scalar_shift_masks,
2894 .fma,3156 .fma,
2895 .fsgsbase,3157 .fsgsbase,
3158 .fsrm,
2896 .fxsr,3159 .fxsr,
2897 .invpcid,3160 .invpcid,
2898 .lzcnt,3161 .lzcnt,
...@@ -2900,7 +3163,6 @@ pub const cpu = struct {...@@ -2900,7 +3163,6 @@ pub const cpu = struct {
2900 .movbe,3163 .movbe,
2901 .mwaitx,3164 .mwaitx,
2902 .nopl,3165 .nopl,
2903 .pclmul,
2904 .pku,3166 .pku,
2905 .popcnt,3167 .popcnt,
2906 .prfchw,3168 .prfchw,
...@@ -2909,12 +3171,13 @@ pub const cpu = struct {...@@ -2909,12 +3171,13 @@ pub const cpu = struct {
2909 .rdseed,3171 .rdseed,
2910 .sahf,3172 .sahf,
2911 .sha,3173 .sha,
3174 .slow_shld,
2912 .sse4a,3175 .sse4a,
2913 .vaes,3176 .vaes,
2914 .vpclmulqdq,3177 .vpclmulqdq,
3178 .vzeroupper,
2915 .wbnoinvd,3179 .wbnoinvd,
2916 .x87,3180 .x87,
2917 .xsave,
2918 .xsavec,3181 .xsavec,
2919 .xsaveopt,3182 .xsaveopt,
2920 .xsaves,3183 .xsaves,