authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-09-27 17:56:09-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-09-27 18:30:52-04:00
loga744fbd22fe3666873715c22fabe854f55573bbb
tree4c50f386bda1ea60a66d777f132fd115c2d50e0b
parentd79b3cc1342a6be32d2bf69554f0e15670a54f14

x86_64: fix `~`/`!` miscomps


2 files changed, 638 insertions(+), 123 deletions(-)

src/codegen/x86_64/CodeGen.zig+636-123
......@@ -2292,7 +2292,7 @@ fn genBodyBlock(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22922292}
22932293
22942294fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2295 @setEvalBranchQuota(29_500);
2295 @setEvalBranchQuota(29_600);
22962296 const pt = cg.pt;
22972297 const zcu = pt.zcu;
22982298 const ip = &zcu.intern_pool;
......@@ -59433,9 +59433,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5943359433 .required_features = .{ .mmx, null, null, null },
5943459434 .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword }, .any },
5943559435 .patterns = &.{
59436 .{ .src = .{ .to_mut_mm, .mem, .none } },
59437 .{ .src = .{ .mem, .to_mut_mm, .none }, .commute = .{ 0, 1 } },
59438 .{ .src = .{ .to_mut_mm, .to_mm, .none } },
59436 .{ .src = .{ .to_mut_mmx, .mem, .none } },
59437 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
59438 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
5943959439 },
5944059440 .dst_temps = .{ .{ .ref = .src0 }, .unused },
5944159441 .each = .{ .once = &.{
......@@ -59445,9 +59445,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5944559445 .required_features = .{ .avx, null, null, null },
5944659446 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any },
5944759447 .patterns = &.{
59448 .{ .src = .{ .to_xmm, .mem, .none } },
59449 .{ .src = .{ .mem, .to_xmm, .none }, .commute = .{ 0, 1 } },
59450 .{ .src = .{ .to_xmm, .to_xmm, .none } },
59448 .{ .src = .{ .to_sse, .mem, .none } },
59449 .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
59450 .{ .src = .{ .to_sse, .to_sse, .none } },
5945159451 },
5945259452 .dst_temps = .{ .{ .rc = .sse }, .unused },
5945359453 .each = .{ .once = &.{
......@@ -59457,9 +59457,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5945759457 .required_features = .{ .sse2, null, null, null },
5945859458 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any },
5945959459 .patterns = &.{
59460 .{ .src = .{ .to_mut_xmm, .mem, .none } },
59461 .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } },
59462 .{ .src = .{ .to_mut_xmm, .to_xmm, .none } },
59460 .{ .src = .{ .to_mut_sse, .mem, .none } },
59461 .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
59462 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
5946359463 },
5946459464 .dst_temps = .{ .{ .ref = .src0 }, .unused },
5946559465 .each = .{ .once = &.{
......@@ -59469,9 +59469,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5946959469 .required_features = .{ .sse, null, null, null },
5947059470 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword }, .any },
5947159471 .patterns = &.{
59472 .{ .src = .{ .to_mut_xmm, .mem, .none } },
59473 .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } },
59474 .{ .src = .{ .to_mut_xmm, .to_xmm, .none } },
59472 .{ .src = .{ .to_mut_sse, .mem, .none } },
59473 .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
59474 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
5947559475 },
5947659476 .dst_temps = .{ .{ .ref = .src0 }, .unused },
5947759477 .each = .{ .once = &.{
......@@ -59481,9 +59481,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5948159481 .required_features = .{ .avx2, null, null, null },
5948259482 .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword }, .any },
5948359483 .patterns = &.{
59484 .{ .src = .{ .to_ymm, .mem, .none } },
59485 .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } },
59486 .{ .src = .{ .to_ymm, .to_ymm, .none } },
59484 .{ .src = .{ .to_sse, .mem, .none } },
59485 .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
59486 .{ .src = .{ .to_sse, .to_sse, .none } },
5948759487 },
5948859488 .dst_temps = .{ .{ .rc = .sse }, .unused },
5948959489 .each = .{ .once = &.{
......@@ -59493,9 +59493,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5949359493 .required_features = .{ .avx, null, null, null },
5949459494 .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword }, .any },
5949559495 .patterns = &.{
59496 .{ .src = .{ .to_ymm, .mem, .none } },
59497 .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } },
59498 .{ .src = .{ .to_ymm, .to_ymm, .none } },
59496 .{ .src = .{ .to_sse, .mem, .none } },
59497 .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
59498 .{ .src = .{ .to_sse, .to_sse, .none } },
5949959499 },
5950059500 .dst_temps = .{ .{ .rc = .sse }, .unused },
5950159501 .each = .{ .once = &.{
......@@ -64081,6 +64081,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6408164081 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
6408264082 var res: [1]Temp = undefined;
6408364083 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
64084 .src_constraints = .{ .{ .bool_vec = .byte }, .any, .any },
64085 .patterns = &.{
64086 .{ .src = .{ .mut_mem, .none, .none } },
64087 .{ .src = .{ .to_mut_gpr, .none, .none } },
64088 },
64089 .dst_temps = .{ .{ .ref = .src0 }, .unused },
64090 .each = .{ .once = &.{
64091 .{ ._, ._, .not, .dst0b, ._, ._, ._ },
64092 } },
64093 }, .{
6408464094 .src_constraints = .{ .{ .signed_or_exact_int = .byte }, .any, .any },
6408564095 .patterns = &.{
6408664096 .{ .src = .{ .mut_mem, .none, .none } },
......@@ -64101,6 +64111,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6410164111 .each = .{ .once = &.{
6410264112 .{ ._, ._, .xor, .dst0b, .sa(.src0, .add_umax), ._, ._ },
6410364113 } },
64114 }, .{
64115 .src_constraints = .{ .{ .bool_vec = .word }, .any, .any },
64116 .patterns = &.{
64117 .{ .src = .{ .mut_mem, .none, .none } },
64118 .{ .src = .{ .to_mut_gpr, .none, .none } },
64119 },
64120 .dst_temps = .{ .{ .ref = .src0 }, .unused },
64121 .each = .{ .once = &.{
64122 .{ ._, ._, .not, .dst0w, ._, ._, ._ },
64123 } },
6410464124 }, .{
6410564125 .src_constraints = .{ .{ .signed_or_exact_int = .word }, .any, .any },
6410664126 .patterns = &.{
......@@ -64122,6 +64142,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6412264142 .each = .{ .once = &.{
6412364143 .{ ._, ._, .xor, .dst0w, .sa(.src0, .add_umax), ._, ._ },
6412464144 } },
64145 }, .{
64146 .src_constraints = .{ .{ .bool_vec = .dword }, .any, .any },
64147 .patterns = &.{
64148 .{ .src = .{ .mut_mem, .none, .none } },
64149 .{ .src = .{ .to_mut_gpr, .none, .none } },
64150 },
64151 .dst_temps = .{ .{ .ref = .src0 }, .unused },
64152 .each = .{ .once = &.{
64153 .{ ._, ._, .not, .dst0d, ._, ._, ._ },
64154 } },
6412564155 }, .{
6412664156 .src_constraints = .{ .{ .signed_or_exact_int = .dword }, .any, .any },
6412764157 .patterns = &.{
......@@ -64143,6 +64173,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6414364173 .each = .{ .once = &.{
6414464174 .{ ._, ._, .xor, .dst0d, .sa(.src0, .add_umax), ._, ._ },
6414564175 } },
64176 }, .{
64177 .required_features = .{ .@"64bit", null, null, null },
64178 .src_constraints = .{ .{ .bool_vec = .qword }, .any, .any },
64179 .patterns = &.{
64180 .{ .src = .{ .mut_mem, .none, .none } },
64181 .{ .src = .{ .to_mut_gpr, .none, .none } },
64182 },
64183 .dst_temps = .{ .{ .ref = .src0 }, .unused },
64184 .each = .{ .once = &.{
64185 .{ ._, ._, .not, .dst0q, ._, ._, ._ },
64186 } },
6414664187 }, .{
6414764188 .required_features = .{ .@"64bit", null, null, null },
6414864189 .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any, .any },
......@@ -64166,12 +64207,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6416664207 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
6416764208 .{ ._, ._, .xor, .dst0q, .src0q, ._, ._ },
6416864209 } },
64210 }, .{
64211 .required_features = .{ .mmx, null, null, null },
64212 .src_constraints = .{ .{ .bool_vec = .qword }, .any, .any },
64213 .patterns = &.{
64214 .{ .src = .{ .mem, .none, .none } },
64215 .{ .src = .{ .to_mmx, .none, .none } },
64216 },
64217 .dst_temps = .{ .{ .rc = .mmx }, .unused },
64218 .each = .{ .once = &.{
64219 .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ },
64220 .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ },
64221 } },
6416964222 }, .{
6417064223 .required_features = .{ .mmx, null, null, null },
6417164224 .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any, .any },
6417264225 .patterns = &.{
6417364226 .{ .src = .{ .mem, .none, .none } },
64174 .{ .src = .{ .to_mm, .none, .none } },
64227 .{ .src = .{ .to_mmx, .none, .none } },
6417564228 },
6417664229 .dst_temps = .{ .{ .rc = .mmx }, .unused },
6417764230 .each = .{ .once = &.{
......@@ -64182,7 +64235,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6418264235 .required_features = .{ .mmx, null, null, null },
6418364236 .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
6418464237 .patterns = &.{
64185 .{ .src = .{ .to_mut_mm, .none, .none } },
64238 .{ .src = .{ .to_mut_mmx, .none, .none } },
6418664239 },
6418764240 .extra_temps = .{
6418864241 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -64202,12 +64255,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6420264255 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
6420364256 .{ ._, .p_, .xor, .dst0q, .lea(.tmp0q), ._, ._ },
6420464257 } },
64258 }, .{
64259 .required_features = .{ .avx, null, null, null },
64260 .src_constraints = .{ .{ .bool_vec = .xword }, .any, .any },
64261 .patterns = &.{
64262 .{ .src = .{ .mem, .none, .none } },
64263 .{ .src = .{ .to_sse, .none, .none } },
64264 },
64265 .dst_temps = .{ .{ .rc = .sse }, .unused },
64266 .each = .{ .once = &.{
64267 .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ },
64268 .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ },
64269 } },
6420564270 }, .{
6420664271 .required_features = .{ .avx, null, null, null },
6420764272 .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any, .any },
6420864273 .patterns = &.{
6420964274 .{ .src = .{ .mem, .none, .none } },
64210 .{ .src = .{ .to_xmm, .none, .none } },
64275 .{ .src = .{ .to_sse, .none, .none } },
6421164276 },
6421264277 .dst_temps = .{ .{ .rc = .sse }, .unused },
6421364278 .each = .{ .once = &.{
......@@ -64218,7 +64283,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6421864283 .required_features = .{ .avx, null, null, null },
6421964284 .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
6422064285 .patterns = &.{
64221 .{ .src = .{ .to_xmm, .none, .none } },
64286 .{ .src = .{ .to_sse, .none, .none } },
6422264287 },
6422364288 .extra_temps = .{
6422464289 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -64238,12 +64303,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6423864303 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
6423964304 .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ },
6424064305 } },
64306 }, .{
64307 .required_features = .{ .sse2, null, null, null },
64308 .src_constraints = .{ .{ .bool_vec = .xword }, .any, .any },
64309 .patterns = &.{
64310 .{ .src = .{ .mem, .none, .none } },
64311 .{ .src = .{ .to_sse, .none, .none } },
64312 },
64313 .dst_temps = .{ .{ .rc = .sse }, .unused },
64314 .each = .{ .once = &.{
64315 .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ },
64316 .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ },
64317 } },
6424164318 }, .{
6424264319 .required_features = .{ .sse2, null, null, null },
6424364320 .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any, .any },
6424464321 .patterns = &.{
6424564322 .{ .src = .{ .mem, .none, .none } },
64246 .{ .src = .{ .to_xmm, .none, .none } },
64323 .{ .src = .{ .to_sse, .none, .none } },
6424764324 },
6424864325 .dst_temps = .{ .{ .rc = .sse }, .unused },
6424964326 .each = .{ .once = &.{
......@@ -64254,7 +64331,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6425464331 .required_features = .{ .sse2, null, null, null },
6425564332 .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
6425664333 .patterns = &.{
64257 .{ .src = .{ .to_mut_xmm, .none, .none } },
64334 .{ .src = .{ .to_mut_sse, .none, .none } },
6425864335 },
6425964336 .extra_temps = .{
6426064337 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -64274,11 +64351,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6427464351 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
6427564352 .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
6427664353 } },
64354 }, .{
64355 .required_features = .{ .sse, null, null, null },
64356 .src_constraints = .{ .{ .bool_vec = .xword }, .any, .any },
64357 .patterns = &.{
64358 .{ .src = .{ .to_mut_sse, .none, .none } },
64359 },
64360 .extra_temps = .{
64361 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
64362 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
64363 .unused,
64364 .unused,
64365 .unused,
64366 .unused,
64367 .unused,
64368 .unused,
64369 .unused,
64370 .unused,
64371 .unused,
64372 },
64373 .dst_temps = .{ .{ .ref = .src0 }, .unused },
64374 .each = .{ .once = &.{
64375 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
64376 .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
64377 } },
6427764378 }, .{
6427864379 .required_features = .{ .sse, null, null, null },
6427964380 .src_constraints = .{ .{ .int = .xword }, .any, .any },
6428064381 .patterns = &.{
64281 .{ .src = .{ .to_mut_xmm, .none, .none } },
64382 .{ .src = .{ .to_mut_sse, .none, .none } },
6428264383 },
6428364384 .extra_temps = .{
6428464385 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -64298,12 +64399,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6429864399 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
6429964400 .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
6430064401 } },
64402 }, .{
64403 .required_features = .{ .avx2, null, null, null },
64404 .src_constraints = .{ .{ .bool_vec = .yword }, .any, .any },
64405 .patterns = &.{
64406 .{ .src = .{ .mem, .none, .none } },
64407 .{ .src = .{ .to_sse, .none, .none } },
64408 },
64409 .dst_temps = .{ .{ .rc = .sse }, .unused },
64410 .each = .{ .once = &.{
64411 .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ },
64412 .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ },
64413 } },
6430164414 }, .{
6430264415 .required_features = .{ .avx2, null, null, null },
6430364416 .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any, .any },
6430464417 .patterns = &.{
6430564418 .{ .src = .{ .mem, .none, .none } },
64306 .{ .src = .{ .to_ymm, .none, .none } },
64419 .{ .src = .{ .to_sse, .none, .none } },
6430764420 },
6430864421 .dst_temps = .{ .{ .rc = .sse }, .unused },
6430964422 .each = .{ .once = &.{
......@@ -64314,7 +64427,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6431464427 .required_features = .{ .avx2, null, null, null },
6431564428 .src_constraints = .{ .{ .unsigned_int = .yword }, .any, .any },
6431664429 .patterns = &.{
64317 .{ .src = .{ .to_ymm, .none, .none } },
64430 .{ .src = .{ .to_sse, .none, .none } },
6431864431 },
6431964432 .extra_temps = .{
6432064433 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -64334,12 +64447,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6433464447 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
6433564448 .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
6433664449 } },
64450 }, .{
64451 .required_features = .{ .avx, null, null, null },
64452 .src_constraints = .{ .{ .bool_vec = .yword }, .any, .any },
64453 .patterns = &.{
64454 .{ .src = .{ .mem, .none, .none } },
64455 .{ .src = .{ .to_sse, .none, .none } },
64456 },
64457 .dst_temps = .{ .{ .rc = .sse }, .unused },
64458 .each = .{ .once = &.{
64459 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) },
64460 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
64461 } },
6433764462 }, .{
6433864463 .required_features = .{ .avx, null, null, null },
6433964464 .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any, .any },
6434064465 .patterns = &.{
6434164466 .{ .src = .{ .mem, .none, .none } },
64342 .{ .src = .{ .to_ymm, .none, .none } },
64467 .{ .src = .{ .to_sse, .none, .none } },
6434364468 },
6434464469 .dst_temps = .{ .{ .rc = .sse }, .unused },
6434564470 .each = .{ .once = &.{
......@@ -64350,7 +64475,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6435064475 .required_features = .{ .avx, null, null, null },
6435164476 .src_constraints = .{ .{ .unsigned_int = .yword }, .any, .any },
6435264477 .patterns = &.{
64353 .{ .src = .{ .to_ymm, .none, .none } },
64478 .{ .src = .{ .to_sse, .none, .none } },
6435464479 },
6435564480 .extra_temps = .{
6435664481 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -64370,6 +64495,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6437064495 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
6437164496 .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
6437264497 } },
64498 }, .{
64499 .required_features = .{ .avx2, null, null, null },
64500 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .yword, .is = .xword } }, .any, .any },
64501 .patterns = &.{
64502 .{ .src = .{ .to_mem, .none, .none } },
64503 },
64504 .extra_temps = .{
64505 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64506 .{ .kind = .{ .rc = .sse } },
64507 .{ .kind = .{ .rc = .sse } },
64508 .unused,
64509 .unused,
64510 .unused,
64511 .unused,
64512 .unused,
64513 .unused,
64514 .unused,
64515 .unused,
64516 },
64517 .dst_temps = .{ .mem, .unused },
64518 .clobbers = .{ .eflags = true },
64519 .each = .{ .once = &.{
64520 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
64521 .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ },
64522 .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
64523 .{ ._, .v_dqu, .mov, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
64524 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
64525 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64526 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ },
64527 .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ },
64528 } },
6437364529 }, .{
6437464530 .required_features = .{ .avx2, null, null, null },
6437564531 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any, .any },
......@@ -64401,6 +64557,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6440164557 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ },
6440264558 .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ },
6440364559 } },
64560 }, .{
64561 .required_features = .{ .avx2, null, null, null },
64562 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .yword, .is = .yword } }, .any, .any },
64563 .patterns = &.{
64564 .{ .src = .{ .to_mem, .none, .none } },
64565 },
64566 .extra_temps = .{
64567 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64568 .{ .kind = .{ .rc = .sse } },
64569 .{ .kind = .{ .rc = .sse } },
64570 .unused,
64571 .unused,
64572 .unused,
64573 .unused,
64574 .unused,
64575 .unused,
64576 .unused,
64577 .unused,
64578 },
64579 .dst_temps = .{ .mem, .unused },
64580 .clobbers = .{ .eflags = true },
64581 .each = .{ .once = &.{
64582 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
64583 .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ },
64584 .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
64585 .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
64586 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
64587 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64588 } },
6440464589 }, .{
6440564590 .required_features = .{ .avx2, null, null, null },
6440664591 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any, .any },
......@@ -64430,6 +64615,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6443064615 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
6443164616 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6443264617 } },
64618 }, .{
64619 .required_features = .{ .avx, null, null, null },
64620 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .yword, .is = .xword } }, .any, .any },
64621 .patterns = &.{
64622 .{ .src = .{ .to_mem, .none, .none } },
64623 },
64624 .extra_temps = .{
64625 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64626 .{ .kind = .{ .rc = .sse } },
64627 .{ .kind = .{ .rc = .sse } },
64628 .unused,
64629 .unused,
64630 .unused,
64631 .unused,
64632 .unused,
64633 .unused,
64634 .unused,
64635 .unused,
64636 },
64637 .dst_temps = .{ .mem, .unused },
64638 .clobbers = .{ .eflags = true },
64639 .each = .{ .once = &.{
64640 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
64641 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) },
64642 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
64643 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
64644 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
64645 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64646 .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ },
64647 .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ },
64648 } },
6443364649 }, .{
6443464650 .required_features = .{ .avx, null, null, null },
6443564651 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any, .any },
......@@ -64461,6 +64677,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6446164677 .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ },
6446264678 .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ },
6446364679 } },
64680 }, .{
64681 .required_features = .{ .avx, null, null, null },
64682 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .yword, .is = .yword } }, .any, .any },
64683 .patterns = &.{
64684 .{ .src = .{ .to_mem, .none, .none } },
64685 },
64686 .extra_temps = .{
64687 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64688 .{ .kind = .{ .rc = .sse } },
64689 .{ .kind = .{ .rc = .sse } },
64690 .unused,
64691 .unused,
64692 .unused,
64693 .unused,
64694 .unused,
64695 .unused,
64696 .unused,
64697 .unused,
64698 },
64699 .dst_temps = .{ .mem, .unused },
64700 .clobbers = .{ .eflags = true },
64701 .each = .{ .once = &.{
64702 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
64703 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) },
64704 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
64705 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
64706 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
64707 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64708 } },
6446464709 }, .{
6446564710 .required_features = .{ .avx, null, null, null },
6446664711 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any, .any },
......@@ -64490,6 +64735,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6449064735 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
6449164736 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6449264737 } },
64738 }, .{
64739 .required_features = .{ .avx, null, null, null },
64740 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any },
64741 .patterns = &.{
64742 .{ .src = .{ .to_mem, .none, .none } },
64743 },
64744 .extra_temps = .{
64745 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64746 .{ .kind = .{ .rc = .sse } },
64747 .{ .kind = .{ .rc = .sse } },
64748 .unused,
64749 .unused,
64750 .unused,
64751 .unused,
64752 .unused,
64753 .unused,
64754 .unused,
64755 .unused,
64756 },
64757 .dst_temps = .{ .mem, .unused },
64758 .clobbers = .{ .eflags = true },
64759 .each = .{ .once = &.{
64760 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
64761 .{ ._, .vp_q, .cmpeq, .tmp1x, .tmp1x, .tmp1x, ._ },
64762 .{ .@"0:", .v_, .xor, .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._ },
64763 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
64764 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
64765 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64766 } },
6449364767 }, .{
6449464768 .required_features = .{ .avx, null, null, null },
6449564769 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any },
......@@ -64519,6 +64793,36 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6451964793 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6452064794 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6452164795 } },
64796 }, .{
64797 .required_features = .{ .sse2, null, null, null },
64798 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any },
64799 .patterns = &.{
64800 .{ .src = .{ .to_mem, .none, .none } },
64801 },
64802 .extra_temps = .{
64803 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64804 .{ .kind = .{ .rc = .sse } },
64805 .{ .kind = .{ .rc = .sse } },
64806 .unused,
64807 .unused,
64808 .unused,
64809 .unused,
64810 .unused,
64811 .unused,
64812 .unused,
64813 .unused,
64814 },
64815 .dst_temps = .{ .mem, .unused },
64816 .clobbers = .{ .eflags = true },
64817 .each = .{ .once = &.{
64818 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
64819 .{ ._, .p_d, .cmpeq, .tmp1x, .tmp1x, ._, ._ },
64820 .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
64821 .{ ._, .p_, .xor, .tmp2x, .tmp1x, ._, ._ },
64822 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
64823 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
64824 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64825 } },
6452264826 }, .{
6452364827 .required_features = .{ .sse2, null, null, null },
6452464828 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any },
......@@ -64549,6 +64853,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6454964853 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6455064854 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6455164855 } },
64856 }, .{
64857 .required_features = .{ .@"64bit", null, null, null },
64858 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any },
64859 .patterns = &.{
64860 .{ .src = .{ .mut_mem, .none, .none } },
64861 },
64862 .extra_temps = .{
64863 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64864 .unused,
64865 .unused,
64866 .unused,
64867 .unused,
64868 .unused,
64869 .unused,
64870 .unused,
64871 .unused,
64872 .unused,
64873 .unused,
64874 },
64875 .dst_temps = .{ .{ .ref = .src0 }, .unused },
64876 .clobbers = .{ .eflags = true },
64877 .each = .{ .once = &.{
64878 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
64879 .{ .@"0:", ._, .not, .memia(.dst0q, .tmp0, .add_size), ._, ._, ._ },
64880 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, 8), ._, ._, ._ },
64881 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
64882 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64883 } },
6455264884 }, .{
6455364885 .required_features = .{ .@"64bit", null, null, null },
6455464886 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any },
......@@ -64577,6 +64909,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6457764909 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6457864910 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6457964911 } },
64912 }, .{
64913 .required_features = .{ .@"64bit", null, null, null },
64914 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any },
64915 .patterns = &.{
64916 .{ .src = .{ .to_mem, .none, .none } },
64917 },
64918 .extra_temps = .{
64919 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64920 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
64921 .unused,
64922 .unused,
64923 .unused,
64924 .unused,
64925 .unused,
64926 .unused,
64927 .unused,
64928 .unused,
64929 .unused,
64930 },
64931 .dst_temps = .{ .mem, .unused },
64932 .clobbers = .{ .eflags = true },
64933 .each = .{ .once = &.{
64934 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
64935 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
64936 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
64937 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
64938 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
64939 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64940 } },
6458064941 }, .{
6458164942 .required_features = .{ .@"64bit", null, null, null },
6458264943 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any },
......@@ -65042,7 +65403,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6504265403 .src_constraints = .{ .{ .signed_int_or_full_vec = .qword }, .any, .any },
6504365404 .patterns = &.{
6504465405 .{ .src = .{ .mem, .none, .none } },
65045 .{ .src = .{ .to_mm, .none, .none } },
65406 .{ .src = .{ .to_mmx, .none, .none } },
6504665407 },
6504765408 .dst_temps = .{ .{ .rc = .mmx }, .unused },
6504865409 .each = .{ .once = &.{
......@@ -65053,7 +65414,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6505365414 .required_features = .{ .mmx, null, null, null },
6505465415 .src_constraints = .{ .{ .unsigned_int_vec = .qword }, .any, .any },
6505565416 .patterns = &.{
65056 .{ .src = .{ .to_mut_mm, .none, .none } },
65417 .{ .src = .{ .to_mut_mmx, .none, .none } },
6505765418 },
6505865419 .extra_temps = .{
6505965420 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -65078,7 +65439,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6507865439 .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any, .any },
6507965440 .patterns = &.{
6508065441 .{ .src = .{ .mem, .none, .none } },
65081 .{ .src = .{ .to_xmm, .none, .none } },
65442 .{ .src = .{ .to_sse, .none, .none } },
6508265443 },
6508365444 .dst_temps = .{ .{ .rc = .sse }, .unused },
6508465445 .each = .{ .once = &.{
......@@ -65089,7 +65450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6508965450 .required_features = .{ .avx, null, null, null },
6509065451 .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any },
6509165452 .patterns = &.{
65092 .{ .src = .{ .to_xmm, .none, .none } },
65453 .{ .src = .{ .to_sse, .none, .none } },
6509365454 },
6509465455 .extra_temps = .{
6509565456 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -65114,7 +65475,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6511465475 .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any, .any },
6511565476 .patterns = &.{
6511665477 .{ .src = .{ .mem, .none, .none } },
65117 .{ .src = .{ .to_xmm, .none, .none } },
65478 .{ .src = .{ .to_sse, .none, .none } },
6511865479 },
6511965480 .dst_temps = .{ .{ .rc = .sse }, .unused },
6512065481 .each = .{ .once = &.{
......@@ -65125,7 +65486,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6512565486 .required_features = .{ .sse2, null, null, null },
6512665487 .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any },
6512765488 .patterns = &.{
65128 .{ .src = .{ .to_mut_xmm, .none, .none } },
65489 .{ .src = .{ .to_mut_sse, .none, .none } },
6512965490 },
6513065491 .extra_temps = .{
6513165492 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -65149,7 +65510,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6514965510 .required_features = .{ .sse, null, null, null },
6515065511 .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any },
6515165512 .patterns = &.{
65152 .{ .src = .{ .to_mut_xmm, .none, .none } },
65513 .{ .src = .{ .to_mut_sse, .none, .none } },
6515365514 },
6515465515 .extra_temps = .{
6515565516 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -65174,7 +65535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6517465535 .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any, .any },
6517565536 .patterns = &.{
6517665537 .{ .src = .{ .mem, .none, .none } },
65177 .{ .src = .{ .to_ymm, .none, .none } },
65538 .{ .src = .{ .to_sse, .none, .none } },
6517865539 },
6517965540 .dst_temps = .{ .{ .rc = .sse }, .unused },
6518065541 .each = .{ .once = &.{
......@@ -65185,7 +65546,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6518565546 .required_features = .{ .avx2, null, null, null },
6518665547 .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any, .any },
6518765548 .patterns = &.{
65188 .{ .src = .{ .to_ymm, .none, .none } },
65549 .{ .src = .{ .to_sse, .none, .none } },
6518965550 },
6519065551 .extra_temps = .{
6519165552 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -65210,7 +65571,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6521065571 .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any, .any },
6521165572 .patterns = &.{
6521265573 .{ .src = .{ .mem, .none, .none } },
65213 .{ .src = .{ .to_ymm, .none, .none } },
65574 .{ .src = .{ .to_sse, .none, .none } },
6521465575 },
6521565576 .dst_temps = .{ .{ .rc = .sse }, .unused },
6521665577 .each = .{ .once = &.{
......@@ -65221,7 +65582,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6522165582 .required_features = .{ .avx, null, null, null },
6522265583 .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any, .any },
6522365584 .patterns = &.{
65224 .{ .src = .{ .to_ymm, .none, .none } },
65585 .{ .src = .{ .to_sse, .none, .none } },
6522565586 },
6522665587 .extra_temps = .{
6522765588 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
......@@ -65241,6 +65602,118 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6524165602 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
6524265603 .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
6524365604 } },
65605 }, .{
65606 .required_features = .{ .@"64bit", null, null, null },
65607 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .qword } }, .any, .any },
65608 .patterns = &.{
65609 .{ .src = .{ .to_mem, .none, .none } },
65610 },
65611 .extra_temps = .{
65612 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65613 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
65614 .unused,
65615 .unused,
65616 .unused,
65617 .unused,
65618 .unused,
65619 .unused,
65620 .unused,
65621 .unused,
65622 .unused,
65623 },
65624 .dst_temps = .{ .mem, .unused },
65625 .each = .{ .once = &.{
65626 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
65627 .{ .@"0:", ._, .mov, .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
65628 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
65629 .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp1q, ._, ._ },
65630 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
65631 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
65632 } },
65633 }, .{
65634 .required_features = .{ .@"64bit", null, null, null },
65635 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .xword, .is = .xword } }, .any, .any },
65636 .patterns = &.{
65637 .{ .src = .{ .to_mem, .none, .none } },
65638 },
65639 .extra_temps = .{
65640 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65641 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
65642 .unused,
65643 .unused,
65644 .unused,
65645 .unused,
65646 .unused,
65647 .unused,
65648 .unused,
65649 .unused,
65650 .unused,
65651 },
65652 .dst_temps = .{ .mem, .unused },
65653 .each = .{ .once = &.{
65654 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
65655 .{ .@"0:", ._, .mov, .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
65656 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
65657 .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp1q, ._, ._ },
65658 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
65659 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
65660 } },
65661 }, .{
65662 .required_features = .{ .@"64bit", null, null, null },
65663 .src_constraints = .{ .any_signed_int_or_full_vec, .any, .any },
65664 .patterns = &.{
65665 .{ .src = .{ .to_mem, .none, .none } },
65666 },
65667 .extra_temps = .{
65668 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65669 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
65670 .unused,
65671 .unused,
65672 .unused,
65673 .unused,
65674 .unused,
65675 .unused,
65676 .unused,
65677 .unused,
65678 .unused,
65679 },
65680 .dst_temps = .{ .mem, .unused },
65681 .each = .{ .once = &.{
65682 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
65683 .{ .@"0:", ._, .mov, .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
65684 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
65685 .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp1q, ._, ._ },
65686 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
65687 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
65688 } },
65689 }, .{
65690 .required_features = .{ .@"64bit", null, null, null },
65691 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any },
65692 .patterns = &.{
65693 .{ .src = .{ .to_mem, .none, .none } },
65694 },
65695 .extra_temps = .{
65696 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65697 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
65698 .unused,
65699 .unused,
65700 .unused,
65701 .unused,
65702 .unused,
65703 .unused,
65704 .unused,
65705 .unused,
65706 .unused,
65707 },
65708 .dst_temps = .{ .mem, .unused },
65709 .each = .{ .once = &.{
65710 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
65711 .{ .@"0:", ._, .mov, .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
65712 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
65713 .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp1q, ._, ._ },
65714 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
65715 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
65716 } },
6524465717 }, .{
6524565718 .required_features = .{ .@"64bit", null, null, null },
6524665719 .patterns = &.{
......@@ -65261,14 +65734,94 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6526165734 },
6526265735 .dst_temps = .{ .mem, .unused },
6526365736 .each = .{ .once = &.{
65264 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
65737 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
6526565738 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
6526665739 .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ },
6526765740 .{ ._, ._, .xor, .tmp2q, .leai(.tmp1q, .tmp0), ._, ._ },
6526865741 .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ },
65269 .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 8), ._, ._ },
65270 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
65271 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
65742 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
65743 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
65744 } },
65745 }, .{
65746 .src_constraints = .{ .{ .remainder_bool_vec = .{ .of = .dword, .is = .dword } }, .any, .any },
65747 .patterns = &.{
65748 .{ .src = .{ .to_mem, .none, .none } },
65749 },
65750 .extra_temps = .{
65751 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65752 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65753 .unused,
65754 .unused,
65755 .unused,
65756 .unused,
65757 .unused,
65758 .unused,
65759 .unused,
65760 .unused,
65761 .unused,
65762 },
65763 .dst_temps = .{ .mem, .unused },
65764 .each = .{ .once = &.{
65765 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
65766 .{ .@"0:", ._, .mov, .tmp1d, .memi(.src0d, .tmp0), ._, ._ },
65767 .{ ._, ._, .not, .tmp1d, ._, ._, ._ },
65768 .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp1d, ._, ._ },
65769 .{ ._, ._, .sub, .tmp0d, .si(4), ._, ._ },
65770 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
65771 } },
65772 }, .{
65773 .src_constraints = .{ .any_signed_int_or_full_vec, .any, .any },
65774 .patterns = &.{
65775 .{ .src = .{ .to_mem, .none, .none } },
65776 },
65777 .extra_temps = .{
65778 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65779 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65780 .unused,
65781 .unused,
65782 .unused,
65783 .unused,
65784 .unused,
65785 .unused,
65786 .unused,
65787 .unused,
65788 .unused,
65789 },
65790 .dst_temps = .{ .mem, .unused },
65791 .each = .{ .once = &.{
65792 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
65793 .{ .@"0:", ._, .mov, .tmp1d, .memi(.src0d, .tmp0), ._, ._ },
65794 .{ ._, ._, .not, .tmp1d, ._, ._, ._ },
65795 .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp1d, ._, ._ },
65796 .{ ._, ._, .sub, .tmp0d, .si(4), ._, ._ },
65797 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
65798 } },
65799 }, .{
65800 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any, .any },
65801 .patterns = &.{
65802 .{ .src = .{ .to_mem, .none, .none } },
65803 },
65804 .extra_temps = .{
65805 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65806 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
65807 .unused,
65808 .unused,
65809 .unused,
65810 .unused,
65811 .unused,
65812 .unused,
65813 .unused,
65814 .unused,
65815 .unused,
65816 },
65817 .dst_temps = .{ .mem, .unused },
65818 .each = .{ .once = &.{
65819 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
65820 .{ .@"0:", ._, .mov, .tmp1d, .memi(.src0d, .tmp0), ._, ._ },
65821 .{ ._, ._, .not, .tmp1d, ._, ._, ._ },
65822 .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp1d, ._, ._ },
65823 .{ ._, ._, .sub, .tmp0d, .si(4), ._, ._ },
65824 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
6527265825 } },
6527365826 }, .{
6527465827 .patterns = &.{
......@@ -65289,14 +65842,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6528965842 },
6529065843 .dst_temps = .{ .mem, .unused },
6529165844 .each = .{ .once = &.{
65292 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
65845 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
6529365846 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
6529465847 .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ },
6529565848 .{ ._, ._, .xor, .tmp2d, .leai(.tmp1d, .tmp0), ._, ._ },
6529665849 .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ },
65297 .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 4), ._, ._ },
65298 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
65299 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
65850 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
65851 .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
6530065852 } },
6530165853 } }) catch |err| switch (err) {
6530265854 error.SelectFailed => return cg.fail("failed to select {s} {f} {f}", .{
......@@ -75371,7 +75923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7537175923 .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any, .any },
7537275924 .patterns = &.{
7537375925 .{ .src = .{ .mem, .none, .none } },
75374 .{ .src = .{ .to_mm, .none, .none } },
75926 .{ .src = .{ .to_mmx, .none, .none } },
7537575927 },
7537675928 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused },
7537775929 .each = .{ .once = &.{
......@@ -75382,7 +75934,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7538275934 .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
7538375935 .patterns = &.{
7538475936 .{ .src = .{ .mem, .none, .none } },
75385 .{ .src = .{ .to_mm, .none, .none } },
75937 .{ .src = .{ .to_mmx, .none, .none } },
7538675938 },
7538775939 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused },
7538875940 .each = .{ .once = &.{
......@@ -75393,7 +75945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7539375945 .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
7539475946 .patterns = &.{
7539575947 .{ .src = .{ .mem, .none, .none } },
75396 .{ .src = .{ .to_mm, .none, .none } },
75948 .{ .src = .{ .to_mmx, .none, .none } },
7539775949 },
7539875950 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }, .unused },
7539975951 .each = .{ .once = &.{
......@@ -190208,9 +190760,9 @@ const Temp = struct {
190208190760 .required_features = .{ .sse, .mmx, null, null },
190209190761 .src_constraints = .{ .{ .int = .qword }, .{ .int = .qword }, .any },
190210190762 .patterns = &.{
190211 .{ .src = .{ .to_mut_mm, .mem, .none } },
190212 .{ .src = .{ .mem, .to_mut_mm, .none }, .commute = .{ 0, 1 } },
190213 .{ .src = .{ .to_mut_mm, .to_mm, .none } },
190763 .{ .src = .{ .to_mut_mmx, .mem, .none } },
190764 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
190765 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
190214190766 },
190215190767 .extra_temps = .{
190216190768 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
......@@ -190238,9 +190790,9 @@ const Temp = struct {
190238190790 .required_features = .{ .avx, null, null, null },
190239190791 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any },
190240190792 .patterns = &.{
190241 .{ .src = .{ .to_xmm, .mem, .none } },
190242 .{ .src = .{ .mem, .to_xmm, .none }, .commute = .{ 0, 1 } },
190243 .{ .src = .{ .to_xmm, .to_xmm, .none } },
190793 .{ .src = .{ .to_sse, .mem, .none } },
190794 .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
190795 .{ .src = .{ .to_sse, .to_sse, .none } },
190244190796 },
190245190797 .extra_temps = .{
190246190798 .{ .kind = .{ .rc = .sse } },
......@@ -190265,9 +190817,9 @@ const Temp = struct {
190265190817 .required_features = .{ .sse4_1, null, null, null },
190266190818 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any },
190267190819 .patterns = &.{
190268 .{ .src = .{ .to_mut_xmm, .mem, .none } },
190269 .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } },
190270 .{ .src = .{ .to_mut_xmm, .to_xmm, .none } },
190820 .{ .src = .{ .to_mut_sse, .mem, .none } },
190821 .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
190822 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
190271190823 },
190272190824 .dst_temps = .{ .{ .cc = .z }, .unused },
190273190825 .clobbers = .{ .eflags = true },
......@@ -190279,9 +190831,9 @@ const Temp = struct {
190279190831 .required_features = .{ .sse2, .fast_imm16, null, null },
190280190832 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any },
190281190833 .patterns = &.{
190282 .{ .src = .{ .to_mut_xmm, .mem, .none } },
190283 .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } },
190284 .{ .src = .{ .to_mut_xmm, .to_xmm, .none } },
190834 .{ .src = .{ .to_mut_sse, .mem, .none } },
190835 .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
190836 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
190285190837 },
190286190838 .extra_temps = .{
190287190839 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
......@@ -190309,9 +190861,9 @@ const Temp = struct {
190309190861 .required_features = .{ .sse2, null, null, null },
190310190862 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword }, .any },
190311190863 .patterns = &.{
190312 .{ .src = .{ .to_mut_xmm, .mem, .none } },
190313 .{ .src = .{ .mem, .to_mut_xmm, .none }, .commute = .{ 0, 1 } },
190314 .{ .src = .{ .to_mut_xmm, .to_xmm, .none } },
190864 .{ .src = .{ .to_mut_sse, .mem, .none } },
190865 .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
190866 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
190315190867 },
190316190868 .extra_temps = .{
190317190869 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
......@@ -190339,9 +190891,9 @@ const Temp = struct {
190339190891 .required_features = .{ .avx2, null, null, null },
190340190892 .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword }, .any },
190341190893 .patterns = &.{
190342 .{ .src = .{ .to_ymm, .mem, .none } },
190343 .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } },
190344 .{ .src = .{ .to_ymm, .to_ymm, .none } },
190894 .{ .src = .{ .to_sse, .mem, .none } },
190895 .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
190896 .{ .src = .{ .to_sse, .to_sse, .none } },
190345190897 },
190346190898 .extra_temps = .{
190347190899 .{ .kind = .{ .rc = .sse } },
......@@ -190366,9 +190918,9 @@ const Temp = struct {
190366190918 .required_features = .{ .avx, null, null, null },
190367190919 .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword }, .any },
190368190920 .patterns = &.{
190369 .{ .src = .{ .to_ymm, .mem, .none } },
190370 .{ .src = .{ .mem, .to_ymm, .none }, .commute = .{ 0, 1 } },
190371 .{ .src = .{ .to_ymm, .to_ymm, .none } },
190921 .{ .src = .{ .to_sse, .mem, .none } },
190922 .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
190923 .{ .src = .{ .to_sse, .to_sse, .none } },
190372190924 },
190373190925 .extra_temps = .{
190374190926 .{ .kind = .{ .rc = .sse } },
......@@ -192348,6 +192900,7 @@ const Select = struct {
192348192900 any_scalar_int,
192349192901 any_scalar_signed_int,
192350192902 any_scalar_unsigned_int,
192903 any_signed_int_or_full_vec,
192351192904 any_float,
192352192905 po2_any,
192353192906 bool,
......@@ -192444,6 +192997,11 @@ const Select = struct {
192444192997 .any_scalar_int => cg.intInfo(ty.scalarType(zcu)) != null,
192445192998 .any_scalar_signed_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed else false,
192446192999 .any_scalar_unsigned_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned else false,
193000 .any_signed_int_or_full_vec => ty.isVector(zcu) and
193001 if (cg.intInfo(ty.childType(zcu))) |int_info| switch (int_info.signedness) {
193002 .signed => true,
193003 .unsigned => (int_info.bits >= 8 and std.math.isPowerOfTwo(int_info.bits)) or int_info.bits % 128 == 0,
193004 } else false,
192447193005 .any_float => ty.isRuntimeFloat(),
192448193006 .po2_any => std.math.isPowerOfTwo(ty.abiSize(zcu)),
192449193007 .bool => ty.toIntern() == .bool_type,
......@@ -192484,7 +193042,7 @@ const Select = struct {
192484193042 .signed_int_or_full_vec => |size| ty.isVector(zcu) and @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
192485193043 if (cg.intInfo(ty.childType(zcu))) |int_info| switch (int_info.signedness) {
192486193044 .signed => true,
192487 .unsigned => int_info.bits >= 8 and std.math.isPowerOfTwo(int_info.bits),
193045 .unsigned => (int_info.bits >= 8 and std.math.isPowerOfTwo(int_info.bits)) or int_info.bits % 128 == 0,
192488193046 } else false,
192489193047 .unsigned_int_vec => |size| ty.isVector(zcu) and @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
192490193048 if (cg.intInfo(ty.childType(zcu))) |int_info| int_info.signedness == .unsigned else false,
......@@ -192733,22 +193291,10 @@ const Select = struct {
192733193291 to_mmx,
192734193292 mut_mmx,
192735193293 to_mut_mmx,
192736 mm,
192737 to_mm,
192738 mut_mm,
192739 to_mut_mm,
192740193294 sse,
192741193295 to_sse,
192742193296 mut_sse,
192743193297 to_mut_sse,
192744 xmm,
192745 to_xmm,
192746 mut_xmm,
192747 to_mut_xmm,
192748 ymm,
192749 to_ymm,
192750 mut_ymm,
192751 to_mut_ymm,
192752193298 reg_mask: RegMaskSpec,
192753193299 all_reg_mask: RegMaskSpec,
192754193300
......@@ -192838,17 +193384,6 @@ const Select = struct {
192838193384 else => false,
192839193385 },
192840193386 .to_mmx, .to_mut_mmx => true,
192841 .mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) {
192842 .register => |reg| reg.isClass(.mmx),
192843 .register_offset => |reg_off| reg_off.reg.isClass(.mmx) and reg_off.off == 0,
192844 else => false,
192845 },
192846 .mut_mm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) {
192847 .register => |reg| reg.isClass(.mmx),
192848 .register_offset => |reg_off| reg_off.reg.isClass(.mmx) and reg_off.off == 0,
192849 else => false,
192850 },
192851 .to_mm, .to_mut_mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8,
192852193387 .sse => switch (temp.tracking(cg).short) {
192853193388 .register => |reg| reg.isClass(.sse),
192854193389 .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0,
......@@ -192860,28 +193395,6 @@ const Select = struct {
192860193395 else => false,
192861193396 },
192862193397 .to_sse, .to_mut_sse => true,
192863 .xmm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 16 and switch (temp.tracking(cg).short) {
192864 .register => |reg| reg.isClass(.sse),
192865 .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0,
192866 else => false,
192867 },
192868 .mut_xmm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 16 and switch (temp.tracking(cg).short) {
192869 .register => |reg| reg.isClass(.sse),
192870 .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0,
192871 else => false,
192872 },
192873 .to_xmm, .to_mut_xmm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 16,
192874 .ymm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 32 and switch (temp.tracking(cg).short) {
192875 .register => |reg| reg.isClass(.sse),
192876 .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0,
192877 else => false,
192878 },
192879 .mut_ymm => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) == 32 and switch (temp.tracking(cg).short) {
192880 .register => |reg| reg.isClass(.sse),
192881 .register_offset => |reg_off| reg_off.reg.isClass(.sse) and reg_off.off == 0,
192882 else => false,
192883 },
192884 .to_ymm, .to_mut_ymm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 32,
192885193398 .reg_mask => |mask_spec| switch (temp.tracking(cg).short) {
192886193399 .register_mask => |reg_mask| mask_spec.size.bitSize(cg.target) >=
192887193400 reg_mask.info.scalar.bitSize(cg.target) * temp.typeOf(cg).vectorLen(cg.pt.zcu) and
......@@ -192915,10 +193428,10 @@ const Select = struct {
192915193428 .to_mut_gphi => try temp.toRegClass(true, .gphi, cg),
192916193429 .x87, .to_x87 => try temp.toRegClass(false, .x87, cg),
192917193430 .mut_x87, .to_mut_x87 => try temp.toRegClass(true, .x87, cg),
192918 .mmx, .to_mmx, .mm, .to_mm => try temp.toRegClass(false, .mmx, cg),
192919 .mut_mmx, .to_mut_mmx, .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg),
192920 .sse, .to_sse, .xmm, .to_xmm, .ymm, .to_ymm => try temp.toRegClass(false, .sse, cg),
192921 .mut_sse, .to_mut_sse, .mut_xmm, .to_mut_xmm, .mut_ymm, .to_mut_ymm => try temp.toRegClass(true, .sse, cg),
193431 .mmx, .to_mmx => try temp.toRegClass(false, .mmx, cg),
193432 .mut_mmx, .to_mut_mmx => try temp.toRegClass(true, .mmx, cg),
193433 .sse, .to_sse => try temp.toRegClass(false, .sse, cg),
193434 .mut_sse, .to_mut_sse => try temp.toRegClass(true, .sse, cg),
192922193435 };
192923193436 }
192924193437 };
test/behavior/x86_64/build.zig+2
......@@ -5,6 +5,7 @@ pub fn build(b: *std.Build) void {
55 "test-filter",
66 "Skip tests that do not match any filter",
77 ) orelse &[0][]const u8{};
8 const strip = b.option(bool, "strip", "Omit debug information");
89
910 const compiler_rt_lib = b.addLibrary(.{
1011 .linkage = .static,
......@@ -171,6 +172,7 @@ pub fn build(b: *std.Build) void {
171172 const test_mod = b.createModule(.{
172173 .root_source_file = b.path(path),
173174 .target = target,
175 .strip = strip,
174176 });
175177 const test_exe = b.addTest(.{
176178 .name = std.fs.path.stem(path),