authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-01-27 11:47:52-08:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2025-01-27 11:47:52-08:00
logeed3b9567d361941accf0b507dbe83a39b75dffb
treec8e28afae107f714e69e1b021c2f4fefbf829ae0
parentdf1fa36feb04f932f47ddc5ab7091306e39bcc39
parent654da648b3af7cbc5e30b6dfec4d7515d047e99b
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #22610 from jacobly0/x86_64-rewrite

x86_64: rewrite `@min`/`@max` for scalar floats

7 files changed, 6824 insertions(+), 1860 deletions(-)

lib/compiler_rt/extendxftf2.zig+1-8
......@@ -15,8 +15,6 @@ fn __extendxftf2(a: f80) callconv(.C) f128 {
1515
1616 const dst_bits = @bitSizeOf(f128);
1717
18 const dst_min_normal = @as(u128, 1) << dst_sig_bits;
19
2018 // Break a into a sign and representation of the absolute value
2119 var a_rep = std.math.F80.fromFloat(a);
2220 const sign = a_rep.exp & 0x8000;
......@@ -36,12 +34,7 @@ fn __extendxftf2(a: f80) callconv(.C) f128 {
3634 abs_result |= @as(u128, a_rep.exp) << dst_sig_bits;
3735 } else {
3836 // a is denormal
39 // renormalize the significand and clear the leading bit and integer part,
40 // then insert the correct adjusted exponent in the destination type.
41 const scale: u32 = @clz(a_rep.fraction);
42 abs_result = @as(u128, a_rep.fraction) << @intCast(dst_sig_bits - src_sig_bits + scale + 1);
43 abs_result ^= dst_min_normal;
44 abs_result |= @as(u128, scale + 1) << dst_sig_bits;
37 abs_result = @as(u128, a_rep.fraction) << (dst_sig_bits - src_sig_bits);
4538 }
4639
4740 // Apply the signbit to (dst_t)abs(a).
src/arch/x86_64/CodeGen.zig+4460-1782
......@@ -1421,7 +1421,7 @@ fn asmCmovccRegisterRegister(self: *CodeGen, cc: Condition, reg1: Register, reg2
14211421 },
14221422 .data = .{ .rr = .{
14231423 .fixes = switch (cc) {
1424 else => .fromCondition(cc),
1424 else => .fromCond(cc),
14251425 .z_and_np, .nz_or_p => ._,
14261426 },
14271427 .r1 = reg1,
......@@ -1449,7 +1449,7 @@ fn asmCmovccRegisterMemory(self: *CodeGen, cc: Condition, reg: Register, m: Memo
14491449 },
14501450 .data = .{ .rx = .{
14511451 .fixes = switch (cc) {
1452 else => .fromCondition(cc),
1452 else => .fromCond(cc),
14531453 .z_and_np => unreachable,
14541454 .nz_or_p => ._,
14551455 },
......@@ -1476,7 +1476,7 @@ fn asmSetccRegister(self: *CodeGen, cc: Condition, reg: Register) !void {
14761476 },
14771477 .data = switch (cc) {
14781478 else => .{ .r = .{
1479 .fixes = .fromCondition(cc),
1479 .fixes = .fromCond(cc),
14801480 .r1 = reg,
14811481 } },
14821482 .z_and_np, .nz_or_p => .{ .rr = .{
......@@ -1501,7 +1501,7 @@ fn asmSetccMemory(self: *CodeGen, cc: Condition, m: Memory) !void {
15011501 },
15021502 .data = switch (cc) {
15031503 else => .{ .x = .{
1504 .fixes = .fromCondition(cc),
1504 .fixes = .fromCond(cc),
15051505 .payload = payload,
15061506 } },
15071507 .z_and_np, .nz_or_p => .{ .rx = .{
......@@ -1536,7 +1536,7 @@ fn asmJccReloc(self: *CodeGen, cc: Condition, target: Mir.Inst.Index) !Mir.Inst.
15361536 },
15371537 .data = .{ .inst = .{
15381538 .fixes = switch (cc) {
1539 else => .fromCondition(cc),
1539 else => .fromCond(cc),
15401540 .z_and_np, .nz_or_p => ._,
15411541 },
15421542 .inst = target,
......@@ -2224,7 +2224,7 @@ fn gen(self: *CodeGen) InnerError!void {
22242224 else => |cc| return self.fail("{s} does not support var args", .{@tagName(cc)}),
22252225 };
22262226
2227 try self.asmPseudo(.pseudo_dbg_prologue_end_none);
2227 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_prologue_end_none);
22282228
22292229 try self.genBody(self.air.getMainBody());
22302230
......@@ -2235,7 +2235,7 @@ fn gen(self: *CodeGen) InnerError!void {
22352235 break :epilogue_relocs self.epilogue_relocs.items[0..epilogue_relocs_last_index];
22362236 } else self.epilogue_relocs.items) |epilogue_reloc| self.performReloc(epilogue_reloc);
22372237
2238 try self.asmPseudo(.pseudo_dbg_epilogue_begin_none);
2238 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_epilogue_begin_none);
22392239 const backpatch_stack_dealloc = try self.asmPlaceholder();
22402240 const backpatch_pop_callee_preserved_regs = try self.asmPlaceholder();
22412241 try self.asmRegister(.{ ._, .pop }, .rbp);
......@@ -2354,15 +2354,15 @@ fn gen(self: *CodeGen) InnerError!void {
23542354 });
23552355 }
23562356 } else {
2357 try self.asmPseudo(.pseudo_dbg_prologue_end_none);
2357 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_prologue_end_none);
23582358 try self.genBody(self.air.getMainBody());
2359 try self.asmPseudo(.pseudo_dbg_epilogue_begin_none);
2359 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_epilogue_begin_none);
23602360 }
23612361
23622362 // Drop them off at the rbrace.
2363 _ = try self.addInst(.{
2363 if (self.debug_output != .none) _ = try self.addInst(.{
23642364 .tag = .pseudo,
2365 .ops = .pseudo_dbg_line_stmt_line_column,
2365 .ops = .pseudo_dbg_line_line_column,
23662366 .data = .{ .line_column = .{
23672367 .line = self.end_di_line,
23682368 .column = self.end_di_column,
......@@ -2387,13 +2387,13 @@ fn checkInvariantsAfterAirInst(self: *CodeGen) void {
23872387}
23882388
23892389fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2390 try self.asmPseudo(.pseudo_dbg_enter_block_none);
2390 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_enter_block_none);
23912391 try self.genBody(body);
2392 try self.asmPseudo(.pseudo_dbg_leave_block_none);
2392 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_leave_block_none);
23932393}
23942394
23952395fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2396 @setEvalBranchQuota(3_400);
2396 @setEvalBranchQuota(3_900);
23972397 const pt = cg.pt;
23982398 const zcu = pt.zcu;
23992399 const ip = &zcu.intern_pool;
......@@ -2543,7 +2543,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
25432543 .reduce_optimized => try cg.airReduce(inst),
25442544 .int_from_float_optimized => try cg.airIntFromFloat(inst),
25452545
2546 .arg => try cg.airDbgArg(inst),
2546 .arg => if (cg.debug_output != .none) {
2547 // skip zero-bit arguments as they don't have a corresponding arg instruction
2548 var arg_index = cg.arg_index;
2549 while (cg.args[arg_index] == .none) arg_index += 1;
2550 cg.arg_index = arg_index + 1;
2551
2552 const name = air_datas[@intFromEnum(inst)].arg.name;
2553 if (name != .none) try cg.genLocalDebugInfo(inst, cg.getResolvedInstValue(inst).short);
2554 if (cg.liveness.isUnused(inst)) try cg.processDeath(inst);
2555
2556 for (cg.args[arg_index + 1 ..]) |arg| {
2557 if (arg != .none) break;
2558 } else try cg.airDbgVarArgs();
2559 },
25472560 .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else {
25482561 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
25492562 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
......@@ -2792,9 +2805,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
27922805 }
27932806 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
27942807 },
2795 .max => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: {
2808 .max => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else {
27962809 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
2797 if (cg.typeOf(bin_op.lhs).scalarType(zcu).isRuntimeFloat()) break :fallback try cg.airBinOp(inst, air_tag);
27982810 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
27992811 var res: [1]Temp = undefined;
28002812 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -4496,7 +4508,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
44964508 },
44974509 .extra_temps = .{
44984510 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4499 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
4511 .{ .type = .vector_4_u32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
45004512 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
45014513 .unused,
45024514 .unused,
......@@ -4633,7 +4645,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
46334645 },
46344646 .extra_temps = .{
46354647 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4636 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
4648 .{ .type = .vector_4_u32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
46374649 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
46384650 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
46394651 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
......@@ -4953,7 +4965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
49534965 },
49544966 .extra_temps = .{
49554967 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4956 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
4968 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
49574969 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
49584970 .unused,
49594971 .unused,
......@@ -4984,7 +4996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
49844996 },
49854997 .extra_temps = .{
49864998 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4987 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
4999 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
49885000 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
49895001 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
49905002 .unused,
......@@ -5016,7 +5028,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
50165028 },
50175029 .extra_temps = .{
50185030 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
5019 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
5031 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
50205032 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
50215033 .unused,
50225034 .unused,
......@@ -5045,7 +5057,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
50455057 },
50465058 .extra_temps = .{
50475059 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5048 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
5060 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
50495061 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
50505062 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
50515063 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
......@@ -5081,7 +5093,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
50815093 },
50825094 .extra_temps = .{
50835095 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5084 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
5096 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
50855097 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
50865098 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
50875099 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
......@@ -5117,7 +5129,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
51175129 },
51185130 .extra_temps = .{
51195131 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5120 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
5132 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
51215133 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
51225134 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
51235135 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
......@@ -5359,255 +5371,173 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
53595371 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
53605372 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
53615373 } },
5362 } }) catch |err| switch (err) {
5363 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
5364 @tagName(air_tag),
5365 cg.typeOf(bin_op.lhs).fmt(pt),
5366 ops[0].tracking(cg),
5367 ops[1].tracking(cg),
5368 }),
5369 else => |e| return e,
5370 };
5371 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
5372 },
5373 .min => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: {
5374 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
5375 if (cg.typeOf(bin_op.lhs).scalarType(zcu).isRuntimeFloat()) break :fallback try cg.airBinOp(inst, air_tag);
5376 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
5377 var res: [1]Temp = undefined;
5378 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
5379 .required_features = .{ .cmov, null, null, null },
5380 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },
5381 .patterns = &.{
5382 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5383 },
5384 .dst_temps = .{.{ .ref = .src0 }},
5385 .clobbers = .{ .eflags = true },
5386 .each = .{ .once = &.{
5387 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
5388 .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ },
5389 } },
53905374 }, .{
5391 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },
5392 .patterns = &.{
5393 .{ .src = .{ .to_mut_gpr, .mem } },
5394 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5395 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5375 .required_features = .{ .f16c, null, null, null },
5376 .src_constraints = .{
5377 .{ .scalar_float = .{ .of = .word, .is = .word } },
5378 .{ .scalar_float = .{ .of = .word, .is = .word } },
53965379 },
5397 .dst_temps = .{.{ .ref = .src0 }},
5398 .clobbers = .{ .eflags = true },
5399 .each = .{ .once = &.{
5400 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
5401 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5402 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },
5403 } },
5404 }, .{
5405 .required_features = .{ .cmov, null, null, null },
5406 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },
54075380 .patterns = &.{
5408 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5381 .{ .src = .{ .to_sse, .to_sse } },
54095382 },
5410 .dst_temps = .{.{ .ref = .src0 }},
5411 .clobbers = .{ .eflags = true },
5412 .each = .{ .once = &.{
5413 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
5414 .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ },
5415 } },
5416 }, .{
5417 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },
5418 .patterns = &.{
5419 .{ .src = .{ .to_mut_gpr, .mem } },
5420 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5421 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5383 .extra_temps = .{
5384 .{ .type = .f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
5385 .{ .type = .f16, .kind = .{ .rc = .sse } },
5386 .unused,
5387 .unused,
5388 .unused,
5389 .unused,
5390 .unused,
5391 .unused,
5392 .unused,
54225393 },
5423 .dst_temps = .{.{ .ref = .src0 }},
5424 .clobbers = .{ .eflags = true },
5394 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
54255395 .each = .{ .once = &.{
5426 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
5427 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5428 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },
5396 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
5397 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
5398 .{ ._, .v_ss, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) },
5399 .{ ._, .v_ss, .max, .dst0x, .tmp0x, .dst0x, ._ },
5400 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x },
5401 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
54295402 } },
54305403 }, .{
5431 .required_features = .{ .cmov, null, null, null },
5432 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },
5433 .patterns = &.{
5434 .{ .src = .{ .to_mut_gpr, .mem } },
5435 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5436 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5404 .required_features = .{ .sse, null, null, null },
5405 .src_constraints = .{
5406 .{ .scalar_float = .{ .of = .word, .is = .word } },
5407 .{ .scalar_float = .{ .of = .word, .is = .word } },
54375408 },
5438 .dst_temps = .{.{ .ref = .src0 }},
5439 .clobbers = .{ .eflags = true },
5440 .each = .{ .once = &.{
5441 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
5442 .{ ._, ._ge, .cmov, .dst0w, .src1w, ._, ._ },
5443 } },
5444 }, .{
5445 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },
54465409 .patterns = &.{
5447 .{ .src = .{ .to_mut_gpr, .mem } },
5448 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5449 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5410 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
54505411 },
5451 .dst_temps = .{.{ .ref = .src0 }},
5452 .clobbers = .{ .eflags = true },
5453 .each = .{ .once = &.{
5454 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
5455 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5456 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },
5457 } },
5458 }, .{
5459 .required_features = .{ .cmov, null, null, null },
5460 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },
5461 .patterns = &.{
5462 .{ .src = .{ .to_mut_gpr, .mem } },
5463 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5464 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5412 .call_frame = .{ .alignment = .@"16" },
5413 .extra_temps = .{
5414 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
5415 .unused,
5416 .unused,
5417 .unused,
5418 .unused,
5419 .unused,
5420 .unused,
5421 .unused,
5422 .unused,
54655423 },
54665424 .dst_temps = .{.{ .ref = .src0 }},
5467 .clobbers = .{ .eflags = true },
5425 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
54685426 .each = .{ .once = &.{
5469 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
5470 .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ },
5427 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
54715428 } },
54725429 }, .{
5473 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },
5474 .patterns = &.{
5475 .{ .src = .{ .to_mut_gpr, .mem } },
5476 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5477 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5430 .required_features = .{ .f16c, null, null, null },
5431 .src_constraints = .{
5432 .{ .scalar_float = .{ .of = .qword, .is = .word } },
5433 .{ .scalar_float = .{ .of = .qword, .is = .word } },
54785434 },
5479 .dst_temps = .{.{ .ref = .src0 }},
5480 .clobbers = .{ .eflags = true },
5481 .each = .{ .once = &.{
5482 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
5483 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5484 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },
5485 } },
5486 }, .{
5487 .required_features = .{ .cmov, null, null, null },
5488 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },
54895435 .patterns = &.{
5490 .{ .src = .{ .to_mut_gpr, .mem } },
5491 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5492 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5436 .{ .src = .{ .mem, .mem } },
5437 .{ .src = .{ .to_sse, .mem } },
5438 .{ .src = .{ .mem, .to_sse } },
5439 .{ .src = .{ .to_sse, .to_sse } },
54935440 },
5494 .dst_temps = .{.{ .ref = .src0 }},
5495 .clobbers = .{ .eflags = true },
5496 .each = .{ .once = &.{
5497 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
5498 .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ },
5499 } },
5500 }, .{
5501 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },
5502 .patterns = &.{
5503 .{ .src = .{ .to_mut_gpr, .mem } },
5504 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5505 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5441 .extra_temps = .{
5442 .{ .type = .vector_4_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
5443 .{ .type = .vector_4_f16, .kind = .{ .rc = .sse } },
5444 .unused,
5445 .unused,
5446 .unused,
5447 .unused,
5448 .unused,
5449 .unused,
5450 .unused,
55065451 },
5507 .dst_temps = .{.{ .ref = .src0 }},
5508 .clobbers = .{ .eflags = true },
5452 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
55095453 .each = .{ .once = &.{
5510 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
5511 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5512 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },
5454 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
5455 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
5456 .{ ._, .v_ps, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) },
5457 .{ ._, .v_ps, .max, .dst0x, .tmp0x, .dst0x, ._ },
5458 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x },
5459 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
55135460 } },
55145461 }, .{
5515 .required_features = .{ .cmov, null, null, null },
5516 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },
5517 .patterns = &.{
5518 .{ .src = .{ .to_mut_gpr, .mem } },
5519 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5520 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5462 .required_features = .{ .f16c, null, null, null },
5463 .src_constraints = .{
5464 .{ .scalar_float = .{ .of = .xword, .is = .word } },
5465 .{ .scalar_float = .{ .of = .xword, .is = .word } },
55215466 },
5522 .dst_temps = .{.{ .ref = .src0 }},
5523 .clobbers = .{ .eflags = true },
5524 .each = .{ .once = &.{
5525 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
5526 .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ },
5527 } },
5528 }, .{
5529 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },
55305467 .patterns = &.{
5531 .{ .src = .{ .to_mut_gpr, .mem } },
5532 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5533 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5468 .{ .src = .{ .mem, .mem } },
5469 .{ .src = .{ .to_sse, .mem } },
5470 .{ .src = .{ .mem, .to_sse } },
5471 .{ .src = .{ .to_sse, .to_sse } },
55345472 },
5535 .dst_temps = .{.{ .ref = .src0 }},
5536 .clobbers = .{ .eflags = true },
5537 .each = .{ .once = &.{
5538 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
5539 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5540 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },
5541 } },
5542 }, .{
5543 .required_features = .{ .@"64bit", .cmov, null, null },
5544 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },
5545 .patterns = &.{
5546 .{ .src = .{ .to_mut_gpr, .mem } },
5547 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5548 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5473 .extra_temps = .{
5474 .{ .type = .vector_8_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
5475 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
5476 .unused,
5477 .unused,
5478 .unused,
5479 .unused,
5480 .unused,
5481 .unused,
5482 .unused,
55495483 },
5550 .dst_temps = .{.{ .ref = .src0 }},
5551 .clobbers = .{ .eflags = true },
5484 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
55525485 .each = .{ .once = &.{
5553 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
5554 .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ },
5486 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
5487 .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
5488 .{ ._, .v_ps, .cmp, .tmp1y, .dst0y, .dst0y, .vp(.unord) },
5489 .{ ._, .v_ps, .max, .dst0y, .tmp0y, .dst0y, ._ },
5490 .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp0y, .tmp1y },
5491 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0y, .rm(.{}), ._ },
55555492 } },
55565493 }, .{
5557 .required_features = .{ .@"64bit", null, null, null },
5558 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },
5559 .patterns = &.{
5560 .{ .src = .{ .to_mut_gpr, .mem } },
5561 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5562 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5494 .required_features = .{ .f16c, null, null, null },
5495 .src_constraints = .{
5496 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
5497 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
55635498 },
5564 .dst_temps = .{.{ .ref = .src0 }},
5565 .clobbers = .{ .eflags = true },
5566 .each = .{ .once = &.{
5567 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
5568 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5569 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },
5570 } },
5571 }, .{
5572 .required_features = .{ .@"64bit", .cmov, null, null },
5573 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },
55745499 .patterns = &.{
5575 .{ .src = .{ .to_mut_gpr, .mem } },
5576 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5577 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5500 .{ .src = .{ .to_mem, .to_mem } },
55785501 },
5579 .dst_temps = .{.{ .ref = .src0 }},
5580 .clobbers = .{ .eflags = true },
5581 .each = .{ .once = &.{
5582 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
5583 .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ },
5584 } },
5585 }, .{
5586 .required_features = .{ .@"64bit", null, null, null },
5587 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },
5588 .patterns = &.{
5589 .{ .src = .{ .to_mut_gpr, .mem } },
5590 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5591 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5502 .extra_temps = .{
5503 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5504 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
5505 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
5506 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
5507 .unused,
5508 .unused,
5509 .unused,
5510 .unused,
5511 .unused,
55925512 },
5593 .dst_temps = .{.{ .ref = .src0 }},
5513 .dst_temps = .{.mem},
55945514 .clobbers = .{ .eflags = true },
55955515 .each = .{ .once = &.{
5596 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
5597 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5598 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },
5516 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5517 .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5518 .{ ._, .v_ps, .cvtph2, .tmp2y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5519 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
5520 .{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
5521 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
5522 .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_size), .tmp1y, .rm(.{}), ._ },
5523 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5524 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
55995525 } },
56005526 }, .{
5601 .required_features = .{ .@"64bit", .cmov, null, null },
5602 .src_constraints = .{ .any_signed_int, .any_signed_int },
5527 .required_features = .{ .avx, null, null, null },
5528 .src_constraints = .{
5529 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5530 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5531 },
56035532 .patterns = &.{
56045533 .{ .src = .{ .to_mem, .to_mem } },
56055534 },
5535 .call_frame = .{ .alignment = .@"16" },
56065536 .extra_temps = .{
5607 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5608 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5609 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5610 .unused,
5537 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5538 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
5539 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
5540 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
56115541 .unused,
56125542 .unused,
56135543 .unused,
......@@ -5615,34 +5545,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56155545 .unused,
56165546 },
56175547 .dst_temps = .{.mem},
5618 .clobbers = .{ .eflags = true },
5619 .each = .{ .once = &.{
5620 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
5621 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5622 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
5623 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
5624 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5625 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5626 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
5627 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
5628 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
5629 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
5630 .{ ._, ._ge, .cmov, .tmp0p, .tmp1p, ._, ._ },
5631 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
5632 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
5633 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
5548 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5549 .each = .{ .once = &.{
5550 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5551 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
5552 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
5553 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
5554 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
5555 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
5556 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5557 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
56345558 } },
56355559 }, .{
5636 .required_features = .{ .@"64bit", null, null, null },
5637 .src_constraints = .{ .any_signed_int, .any_signed_int },
5560 .required_features = .{ .sse4_1, null, null, null },
5561 .src_constraints = .{
5562 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5563 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5564 },
56385565 .patterns = &.{
56395566 .{ .src = .{ .to_mem, .to_mem } },
56405567 },
5568 .call_frame = .{ .alignment = .@"16" },
56415569 .extra_temps = .{
5642 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5643 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5644 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5645 .unused,
5570 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5571 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
5572 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
5573 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
56465574 .unused,
56475575 .unused,
56485576 .unused,
......@@ -5650,66 +5578,104 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56505578 .unused,
56515579 },
56525580 .dst_temps = .{.mem},
5653 .clobbers = .{ .eflags = true },
5654 .each = .{ .once = &.{
5655 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
5656 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5657 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
5658 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
5659 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5660 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5661 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
5662 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
5663 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
5664 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5665 .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ },
5666 .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
5667 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
5668 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
5581 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5582 .each = .{ .once = &.{
5583 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5584 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
5585 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
5586 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
5587 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
5588 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
5589 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
5590 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5591 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
56695592 } },
56705593 }, .{
5671 .required_features = .{ .@"64bit", .cmov, null, null },
5672 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },
5594 .required_features = .{ .sse2, null, null, null },
5595 .src_constraints = .{
5596 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5597 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5598 },
56735599 .patterns = &.{
56745600 .{ .src = .{ .to_mem, .to_mem } },
56755601 },
5602 .call_frame = .{ .alignment = .@"16" },
56765603 .extra_temps = .{
5677 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5678 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5679 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5604 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5605 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
5606 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
5607 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
5608 .{ .type = .f16, .kind = .{ .reg = .ax } },
5609 .unused,
56805610 .unused,
56815611 .unused,
56825612 .unused,
5613 },
5614 .dst_temps = .{.mem},
5615 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5616 .each = .{ .once = &.{
5617 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5618 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
5619 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
5620 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
5621 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
5622 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
5623 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
5624 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
5625 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5626 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5627 } },
5628 }, .{
5629 .required_features = .{ .sse, null, null, null },
5630 .src_constraints = .{
5631 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5632 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5633 },
5634 .patterns = &.{
5635 .{ .src = .{ .to_mem, .to_mem } },
5636 },
5637 .call_frame = .{ .alignment = .@"16" },
5638 .extra_temps = .{
5639 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5640 .{ .type = .f16, .kind = .{ .reg = .eax } },
5641 .{ .type = .f32, .kind = .mem },
5642 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
5643 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
5644 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
56835645 .unused,
56845646 .unused,
56855647 .unused,
56865648 },
56875649 .dst_temps = .{.mem},
5688 .clobbers = .{ .eflags = true },
5650 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
56895651 .each = .{ .once = &.{
5690 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
5691 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5692 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
5693 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
5694 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5695 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5696 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
5697 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
5698 .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ },
5699 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
5700 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
5701 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
5652 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5653 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
5654 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
5655 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
5656 .{ ._, ._, .movzx, .tmp1d, .memia(.src1w, .tmp0, .add_size), ._, ._ },
5657 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
5658 .{ ._, ._ss, .mov, .tmp4x, .mem(.tmp2d), ._, ._ },
5659 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
5660 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
5661 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
5662 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
5663 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5664 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
57025665 } },
57035666 }, .{
5704 .required_features = .{ .@"64bit", null, null, null },
5705 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },
5667 .required_features = .{ .avx, null, null, null },
5668 .src_constraints = .{
5669 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5670 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5671 },
57065672 .patterns = &.{
5707 .{ .src = .{ .to_mem, .to_mem } },
5673 .{ .src = .{ .to_sse, .to_sse } },
57085674 },
57095675 .extra_temps = .{
5710 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5711 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5712 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5676 .{ .type = .f32, .kind = .{ .rc = .sse } },
5677 .unused,
5678 .unused,
57135679 .unused,
57145680 .unused,
57155681 .unused,
......@@ -5717,98 +5683,115 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57175683 .unused,
57185684 .unused,
57195685 },
5720 .dst_temps = .{.mem},
5721 .clobbers = .{ .eflags = true },
5686 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
57225687 .each = .{ .once = &.{
5723 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
5724 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5725 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
5726 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
5727 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5728 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5729 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
5730 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5731 .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ },
5732 .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
5733 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
5734 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
5688 .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
5689 .{ ._, .v_ss, .max, .dst0x, .src1x, .src0x, ._ },
5690 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
57355691 } },
57365692 }, .{
5737 .required_features = .{ .avx, null, null, null },
5693 .required_features = .{ .sse4_1, null, null, null },
57385694 .src_constraints = .{
5739 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5740 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5695 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5696 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
57415697 },
57425698 .patterns = &.{
5743 .{ .src = .{ .to_sse, .mem } },
5744 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
5745 .{ .src = .{ .to_sse, .to_sse } },
5699 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
57465700 },
57475701 .dst_temps = .{.{ .rc = .sse }},
57485702 .each = .{ .once = &.{
5749 .{ ._, .vp_b, .mins, .dst0x, .src0x, .src1x, ._ },
5703 .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ },
5704 .{ ._, ._ss, .max, .dst0x, .src0x, ._, ._ },
5705 .{ ._, ._ss, .cmp, .src0x, .src0x, .vp(.unord), ._ },
5706 .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ },
57505707 } },
57515708 }, .{
5752 .required_features = .{ .sse4_1, null, null, null },
5709 .required_features = .{ .sse, null, null, null },
57535710 .src_constraints = .{
5754 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5755 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5711 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5712 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
57565713 },
57575714 .patterns = &.{
5758 .{ .src = .{ .to_mut_sse, .mem } },
5759 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
57605715 .{ .src = .{ .to_mut_sse, .to_sse } },
57615716 },
5717 .extra_temps = .{
5718 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5719 .unused,
5720 .unused,
5721 .unused,
5722 .unused,
5723 .unused,
5724 .unused,
5725 .unused,
5726 .unused,
5727 },
57625728 .dst_temps = .{.{ .ref = .src0 }},
57635729 .each = .{ .once = &.{
5764 .{ ._, .p_b, .mins, .dst0x, .src1x, ._, ._ },
5730 .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ },
5731 .{ ._, ._ss, .max, .tmp0x, .src0x, ._, ._ },
5732 .{ ._, ._ss, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
5733 .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ },
5734 .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ },
5735 .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
57655736 } },
57665737 }, .{
5767 .required_features = .{ .sse2, null, null, null },
5738 .required_features = .{ .avx, null, null, null },
57685739 .src_constraints = .{
5769 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5770 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5740 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5741 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
57715742 },
57725743 .patterns = &.{
5773 .{ .src = .{ .to_mut_sse, .mem } },
5774 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
5775 .{ .src = .{ .to_mut_sse, .to_sse } },
5744 .{ .src = .{ .to_sse, .to_sse } },
57765745 },
5777 .dst_temps = .{.{ .rc = .sse }},
5746 .extra_temps = .{
5747 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5748 .unused,
5749 .unused,
5750 .unused,
5751 .unused,
5752 .unused,
5753 .unused,
5754 .unused,
5755 .unused,
5756 },
5757 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
57785758 .each = .{ .once = &.{
5779 .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ },
5780 .{ ._, .p_b, .cmpgt, .dst0x, .src0x, ._, ._ },
5781 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
5782 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
5783 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
5759 .{ ._, .v_ps, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
5760 .{ ._, .v_ps, .max, .dst0x, .src1x, .src0x, ._ },
5761 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
57845762 } },
57855763 }, .{
5786 .required_features = .{ .avx2, null, null, null },
5764 .required_features = .{ .sse4_1, null, null, null },
57875765 .src_constraints = .{
5788 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
5789 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
5766 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5767 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
57905768 },
57915769 .patterns = &.{
5792 .{ .src = .{ .to_sse, .mem } },
5793 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
5794 .{ .src = .{ .to_sse, .to_sse } },
5770 .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } },
5771 .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } },
5772 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
57955773 },
57965774 .dst_temps = .{.{ .rc = .sse }},
57975775 .each = .{ .once = &.{
5798 .{ ._, .vp_b, .mins, .dst0y, .src0y, .src1y, ._ },
5776 .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ },
5777 .{ ._, ._ps, .max, .dst0x, .src0x, ._, ._ },
5778 .{ ._, ._ps, .cmp, .src0x, .src0x, .vp(.unord), ._ },
5779 .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ },
57995780 } },
58005781 }, .{
5801 .required_features = .{ .avx2, null, null, null },
5782 .required_features = .{ .sse, null, null, null },
58025783 .src_constraints = .{
5803 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
5804 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
5784 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5785 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
58055786 },
58065787 .patterns = &.{
5807 .{ .src = .{ .to_mem, .to_mem } },
5788 .{ .src = .{ .to_mut_sse, .mem } },
5789 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
5790 .{ .src = .{ .to_mut_sse, .to_sse } },
58085791 },
58095792 .extra_temps = .{
5810 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5811 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
5793 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5794 .unused,
58125795 .unused,
58135796 .unused,
58145797 .unused,
......@@ -5817,28 +5800,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58175800 .unused,
58185801 .unused,
58195802 },
5820 .dst_temps = .{.mem},
5821 .clobbers = .{ .eflags = true },
5803 .dst_temps = .{.{ .ref = .src0 }},
58225804 .each = .{ .once = &.{
5823 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5824 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
5825 .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
5826 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
5827 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
5828 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5805 .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ },
5806 .{ ._, ._ps, .max, .tmp0x, .src0x, ._, ._ },
5807 .{ ._, ._ps, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
5808 .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ },
5809 .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ },
5810 .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
58295811 } },
58305812 }, .{
58315813 .required_features = .{ .avx, null, null, null },
58325814 .src_constraints = .{
5833 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5834 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5815 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
5816 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
58355817 },
58365818 .patterns = &.{
5837 .{ .src = .{ .to_mem, .to_mem } },
5819 .{ .src = .{ .to_sse, .to_sse } },
58385820 },
58395821 .extra_temps = .{
5840 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5841 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
5822 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
5823 .unused,
58425824 .unused,
58435825 .unused,
58445826 .unused,
......@@ -5847,30 +5829,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58475829 .unused,
58485830 .unused,
58495831 },
5850 .dst_temps = .{.mem},
5851 .clobbers = .{ .eflags = true },
5832 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
58525833 .each = .{ .once = &.{
5853 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5854 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5855 .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
5856 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5857 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5858 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5834 .{ ._, .v_ps, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) },
5835 .{ ._, .v_ps, .max, .dst0y, .src1y, .src0y, ._ },
5836 .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .src1y, .tmp0y },
58595837 } },
58605838 }, .{
5861 .required_features = .{ .sse4_1, null, null, null },
5839 .required_features = .{ .avx, null, null, null },
58625840 .src_constraints = .{
5863 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5864 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5841 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
5842 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
58655843 },
58665844 .patterns = &.{
58675845 .{ .src = .{ .to_mem, .to_mem } },
58685846 },
58695847 .extra_temps = .{
58705848 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5871 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
5872 .unused,
5873 .unused,
5849 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
5850 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
5851 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
58745852 .unused,
58755853 .unused,
58765854 .unused,
......@@ -5880,27 +5858,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58805858 .dst_temps = .{.mem},
58815859 .clobbers = .{ .eflags = true },
58825860 .each = .{ .once = &.{
5883 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5884 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5885 .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5886 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5887 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5861 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5862 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
5863 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
5864 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
5865 .{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
5866 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
5867 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
5868 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
58885869 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
58895870 } },
58905871 }, .{
5891 .required_features = .{ .sse2, null, null, null },
5872 .required_features = .{ .sse4_1, null, null, null },
58925873 .src_constraints = .{
5893 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5894 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5874 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
5875 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
58955876 },
58965877 .patterns = &.{
58975878 .{ .src = .{ .to_mem, .to_mem } },
58985879 },
58995880 .extra_temps = .{
59005881 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5901 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
5902 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
5903 .unused,
5882 .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
5883 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5884 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
59045885 .unused,
59055886 .unused,
59065887 .unused,
......@@ -5910,31 +5891,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59105891 .dst_temps = .{.mem},
59115892 .clobbers = .{ .eflags = true },
59125893 .each = .{ .once = &.{
5913 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5914 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5915 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5916 .{ ._, .p_b, .cmpgt, .tmp1x, .tmp2x, ._, ._ },
5917 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },
5918 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5919 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
5920 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5921 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5894 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5895 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5896 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5897 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
5898 .{ ._, ._ps, .max, .tmp3x, .tmp1x, ._, ._ },
5899 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
5900 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
5901 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
5902 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
59225903 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
59235904 } },
59245905 }, .{
5925 .required_features = .{ .cmov, .slow_incdec, null, null },
5906 .required_features = .{ .sse, null, null, null },
59265907 .src_constraints = .{
5927 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5928 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5908 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
5909 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
59295910 },
59305911 .patterns = &.{
59315912 .{ .src = .{ .to_mem, .to_mem } },
59325913 },
59335914 .extra_temps = .{
59345915 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5935 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5936 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5937 .unused,
5916 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5917 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5918 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
59385919 .unused,
59395920 .unused,
59405921 .unused,
......@@ -5944,28 +5925,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59445925 .dst_temps = .{.mem},
59455926 .clobbers = .{ .eflags = true },
59465927 .each = .{ .once = &.{
5947 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5948 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
5949 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
5950 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
5951 .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ },
5952 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
5953 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
5928 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5929 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5930 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5931 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
5932 .{ ._, ._ps, .max, .tmp3x, .tmp1x, ._, ._ },
5933 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ },
5934 .{ ._, ._ps, .@"and", .tmp3x, .tmp1x, ._, ._ },
5935 .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
5936 .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },
5937 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5938 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
59545939 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
59555940 } },
59565941 }, .{
5957 .required_features = .{ .cmov, null, null, null },
5942 .required_features = .{ .avx, null, null, null },
59585943 .src_constraints = .{
5959 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5960 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5944 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5945 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
59615946 },
59625947 .patterns = &.{
5963 .{ .src = .{ .to_mem, .to_mem } },
5948 .{ .src = .{ .to_sse, .to_sse } },
59645949 },
59655950 .extra_temps = .{
5966 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5967 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5968 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5951 .{ .type = .f64, .kind = .{ .rc = .sse } },
5952 .unused,
5953 .unused,
59695954 .unused,
59705955 .unused,
59715956 .unused,
......@@ -5973,30 +5958,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59735958 .unused,
59745959 .unused,
59755960 },
5976 .dst_temps = .{.mem},
5977 .clobbers = .{ .eflags = true },
5961 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
59785962 .each = .{ .once = &.{
5979 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5980 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
5981 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
5982 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
5983 .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ },
5984 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
5985 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5986 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5963 .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
5964 .{ ._, .v_sd, .max, .dst0x, .src1x, .src0x, ._ },
5965 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
59875966 } },
59885967 }, .{
5989 .required_features = .{ .slow_incdec, null, null, null },
5968 .required_features = .{ .sse4_1, null, null, null },
59905969 .src_constraints = .{
5991 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5992 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5970 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5971 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
59935972 },
59945973 .patterns = &.{
5995 .{ .src = .{ .to_mem, .to_mem } },
5974 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
5975 },
5976 .dst_temps = .{.{ .rc = .sse }},
5977 .each = .{ .once = &.{
5978 .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ },
5979 .{ ._, ._sd, .max, .dst0x, .src0x, ._, ._ },
5980 .{ ._, ._sd, .cmp, .src0x, .src0x, .vp(.unord), ._ },
5981 .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ },
5982 } },
5983 }, .{
5984 .required_features = .{ .sse2, null, null, null },
5985 .src_constraints = .{
5986 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5987 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5988 },
5989 .patterns = &.{
5990 .{ .src = .{ .to_mut_sse, .to_sse } },
59965991 },
59975992 .extra_temps = .{
5998 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5999 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5993 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
5994 .unused,
60005995 .unused,
60015996 .unused,
60025997 .unused,
......@@ -6005,29 +6000,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
60056000 .unused,
60066001 .unused,
60076002 },
6008 .dst_temps = .{.mem},
6009 .clobbers = .{ .eflags = true },
6003 .dst_temps = .{.{ .ref = .src0 }},
60106004 .each = .{ .once = &.{
6011 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6012 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6013 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6014 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
6015 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6016 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
6017 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6018 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6005 .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ },
6006 .{ ._, ._sd, .max, .tmp0x, .src0x, ._, ._ },
6007 .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
6008 .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ },
6009 .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ },
6010 .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
60196011 } },
60206012 }, .{
6013 .required_features = .{ .sse, null, null, null },
60216014 .src_constraints = .{
6022 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
6023 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
6015 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
6016 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
60246017 },
60256018 .patterns = &.{
6026 .{ .src = .{ .to_mem, .to_mem } },
6019 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
60276020 },
6021 .call_frame = .{ .alignment = .@"16" },
60286022 .extra_temps = .{
6029 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6030 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
6023 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } },
6024 .unused,
60316025 .unused,
60326026 .unused,
60336027 .unused,
......@@ -6036,90 +6030,98 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
60366030 .unused,
60376031 .unused,
60386032 },
6039 .dst_temps = .{.mem},
6040 .clobbers = .{ .eflags = true },
6033 .dst_temps = .{.{ .ref = .src0 }},
6034 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
60416035 .each = .{ .once = &.{
6042 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6043 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6044 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6045 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
6046 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6047 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
6048 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6049 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6036 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
60506037 } },
60516038 }, .{
6052 .required_features = .{ .sse, .mmx, null, null },
6039 .required_features = .{ .avx, null, null, null },
60536040 .src_constraints = .{
6054 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
6055 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
6041 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6042 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
60566043 },
60576044 .patterns = &.{
6058 .{ .src = .{ .to_mut_mmx, .mem } },
6059 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
6060 .{ .src = .{ .to_mut_mmx, .to_mmx } },
6045 .{ .src = .{ .to_sse, .to_sse } },
60616046 },
6062 .dst_temps = .{.{ .ref = .src0 }},
6047 .extra_temps = .{
6048 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6049 .unused,
6050 .unused,
6051 .unused,
6052 .unused,
6053 .unused,
6054 .unused,
6055 .unused,
6056 .unused,
6057 },
6058 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
60636059 .each = .{ .once = &.{
6064 .{ ._, .p_b, .minu, .dst0q, .src1q, ._, ._ },
6060 .{ ._, .v_pd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
6061 .{ ._, .v_pd, .max, .dst0x, .src1x, .src0x, ._ },
6062 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
60656063 } },
60666064 }, .{
6067 .required_features = .{ .avx, null, null, null },
6065 .required_features = .{ .sse4_1, null, null, null },
60686066 .src_constraints = .{
6069 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6070 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6067 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6068 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
60716069 },
60726070 .patterns = &.{
6073 .{ .src = .{ .to_sse, .mem } },
6074 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6075 .{ .src = .{ .to_sse, .to_sse } },
6071 .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } },
6072 .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } },
6073 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
60766074 },
60776075 .dst_temps = .{.{ .rc = .sse }},
60786076 .each = .{ .once = &.{
6079 .{ ._, .vp_b, .minu, .dst0x, .src0x, .src1x, ._ },
6077 .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ },
6078 .{ ._, ._pd, .max, .dst0x, .src0x, ._, ._ },
6079 .{ ._, ._pd, .cmp, .src0x, .src0x, .vp(.unord), ._ },
6080 .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ },
60806081 } },
60816082 }, .{
60826083 .required_features = .{ .sse2, null, null, null },
60836084 .src_constraints = .{
6084 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6085 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6085 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6086 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
60866087 },
60876088 .patterns = &.{
60886089 .{ .src = .{ .to_mut_sse, .mem } },
60896090 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
60906091 .{ .src = .{ .to_mut_sse, .to_sse } },
60916092 },
6093 .extra_temps = .{
6094 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6095 .unused,
6096 .unused,
6097 .unused,
6098 .unused,
6099 .unused,
6100 .unused,
6101 .unused,
6102 .unused,
6103 },
60926104 .dst_temps = .{.{ .ref = .src0 }},
60936105 .each = .{ .once = &.{
6094 .{ ._, .p_b, .minu, .dst0x, .src1x, ._, ._ },
6106 .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ },
6107 .{ ._, ._pd, .max, .tmp0x, .src0x, ._, ._ },
6108 .{ ._, ._pd, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
6109 .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ },
6110 .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ },
6111 .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
60956112 } },
60966113 }, .{
6097 .required_features = .{ .avx2, null, null, null },
6114 .required_features = .{ .avx, null, null, null },
60986115 .src_constraints = .{
6099 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
6100 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
6116 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
6117 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
61016118 },
61026119 .patterns = &.{
6103 .{ .src = .{ .to_sse, .mem } },
6104 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
61056120 .{ .src = .{ .to_sse, .to_sse } },
61066121 },
6107 .dst_temps = .{.{ .rc = .sse }},
6108 .each = .{ .once = &.{
6109 .{ ._, .vp_b, .minu, .dst0y, .src0y, .src1y, ._ },
6110 } },
6111 }, .{
6112 .required_features = .{ .avx2, null, null, null },
6113 .src_constraints = .{
6114 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
6115 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
6116 },
6117 .patterns = &.{
6118 .{ .src = .{ .to_mem, .to_mem } },
6119 },
61206122 .extra_temps = .{
6121 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6122 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
6123 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
6124 .unused,
61236125 .unused,
61246126 .unused,
61256127 .unused,
......@@ -6128,30 +6130,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61286130 .unused,
61296131 .unused,
61306132 },
6131 .dst_temps = .{.mem},
6132 .clobbers = .{ .eflags = true },
6133 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
61336134 .each = .{ .once = &.{
6134 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6135 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6136 .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
6137 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6138 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
6139 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6135 .{ ._, .v_pd, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) },
6136 .{ ._, .v_pd, .max, .dst0y, .src1y, .src0y, ._ },
6137 .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .src1y, .tmp0y },
61406138 } },
61416139 }, .{
61426140 .required_features = .{ .avx, null, null, null },
61436141 .src_constraints = .{
6144 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6145 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6142 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
6143 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
61466144 },
61476145 .patterns = &.{
61486146 .{ .src = .{ .to_mem, .to_mem } },
61496147 },
61506148 .extra_temps = .{
61516149 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6152 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
6153 .unused,
6154 .unused,
6150 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
6151 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
6152 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
61556153 .unused,
61566154 .unused,
61576155 .unused,
......@@ -6161,27 +6159,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61616159 .dst_temps = .{.mem},
61626160 .clobbers = .{ .eflags = true },
61636161 .each = .{ .once = &.{
6164 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6165 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6166 .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
6167 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6168 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6162 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6163 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6164 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
6165 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
6166 .{ ._, .v_pd, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
6167 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
6168 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6169 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
61696170 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
61706171 } },
61716172 }, .{
6172 .required_features = .{ .sse2, null, null, null },
6173 .required_features = .{ .sse4_1, null, null, null },
61736174 .src_constraints = .{
6174 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6175 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6175 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
6176 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
61766177 },
61776178 .patterns = &.{
61786179 .{ .src = .{ .to_mem, .to_mem } },
61796180 },
61806181 .extra_temps = .{
61816182 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6182 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
6183 .unused,
6184 .unused,
6183 .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
6184 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6185 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
61856186 .unused,
61866187 .unused,
61876188 .unused,
......@@ -6191,27 +6192,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61916192 .dst_temps = .{.mem},
61926193 .clobbers = .{ .eflags = true },
61936194 .each = .{ .once = &.{
6194 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6195 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6196 .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6197 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6198 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6195 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6196 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6197 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6198 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
6199 .{ ._, ._pd, .max, .tmp3x, .tmp1x, ._, ._ },
6200 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
6201 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
6202 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
6203 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
61996204 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62006205 } },
62016206 }, .{
6202 .required_features = .{ .cmov, .slow_incdec, null, null },
6207 .required_features = .{ .sse2, null, null, null },
62036208 .src_constraints = .{
6204 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6205 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6209 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
6210 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
62066211 },
62076212 .patterns = &.{
62086213 .{ .src = .{ .to_mem, .to_mem } },
62096214 },
62106215 .extra_temps = .{
62116216 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6212 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6213 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6214 .unused,
6217 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6218 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6219 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
62156220 .unused,
62166221 .unused,
62176222 .unused,
......@@ -6221,29 +6226,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62216226 .dst_temps = .{.mem},
62226227 .clobbers = .{ .eflags = true },
62236228 .each = .{ .once = &.{
6224 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6225 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6226 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6227 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
6228 .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ },
6229 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
6230 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6229 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6230 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6231 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6232 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
6233 .{ ._, ._pd, .max, .tmp3x, .tmp1x, ._, ._ },
6234 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ },
6235 .{ ._, ._pd, .@"and", .tmp3x, .tmp1x, ._, ._ },
6236 .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
6237 .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },
6238 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6239 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
62316240 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62326241 } },
62336242 }, .{
6234 .required_features = .{ .cmov, null, null, null },
6243 .required_features = .{ .sse, null, null, null },
62356244 .src_constraints = .{
6236 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6237 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6245 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
6246 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
62386247 },
62396248 .patterns = &.{
62406249 .{ .src = .{ .to_mem, .to_mem } },
62416250 },
6251 .call_frame = .{ .alignment = .@"16" },
62426252 .extra_temps = .{
62436253 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6244 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6245 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6246 .unused,
6254 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
6255 .{ .type = .f64, .kind = .{ .reg = .xmm1 } },
6256 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } },
62476257 .unused,
62486258 .unused,
62496259 .unused,
......@@ -6251,29 +6261,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62516261 .unused,
62526262 },
62536263 .dst_temps = .{.mem},
6254 .clobbers = .{ .eflags = true },
6255 .each = .{ .once = &.{
6256 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6257 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6258 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6259 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
6260 .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ },
6261 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
6262 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6263 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6264 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6265 .each = .{ .once = &.{
6266 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6267 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
6268 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
6269 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
6270 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
6271 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6272 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
6273 .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },
6274 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62646275 } },
62656276 }, .{
6266 .required_features = .{ .slow_incdec, null, null, null },
6277 .required_features = .{ .x87, .cmov, null, null },
62676278 .src_constraints = .{
6268 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6269 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6279 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6280 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
62706281 },
62716282 .patterns = &.{
6272 .{ .src = .{ .to_mem, .to_mem } },
6283 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
6284 .{ .src = .{ .mem, .to_x87 } },
6285 .{ .src = .{ .to_x87, .to_x87 } },
62736286 },
62746287 .extra_temps = .{
6275 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6276 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6288 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6289 .unused,
62776290 .unused,
62786291 .unused,
62796292 .unused,
......@@ -6282,29 +6295,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62826295 .unused,
62836296 .unused,
62846297 },
6285 .dst_temps = .{.mem},
6298 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
62866299 .clobbers = .{ .eflags = true },
62876300 .each = .{ .once = &.{
6288 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6289 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6290 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6291 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
6292 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6293 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
6294 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6295 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6301 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
6302 .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ },
6303 .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ },
6304 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6305 .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ },
6306 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6307 .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ },
6308 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
62966309 } },
62976310 }, .{
6311 .required_features = .{ .sahf, .x87, null, null },
62986312 .src_constraints = .{
6299 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6300 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6313 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6314 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
63016315 },
63026316 .patterns = &.{
6303 .{ .src = .{ .to_mem, .to_mem } },
6317 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
6318 .{ .src = .{ .mem, .to_x87 } },
6319 .{ .src = .{ .to_x87, .to_x87 } },
63046320 },
63056321 .extra_temps = .{
6306 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6307 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6322 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6323 .{ .type = .u8, .kind = .{ .reg = .ah } },
63086324 .unused,
63096325 .unused,
63106326 .unused,
......@@ -6313,90 +6329,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
63136329 .unused,
63146330 .unused,
63156331 },
6316 .dst_temps = .{.mem},
6332 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
63176333 .clobbers = .{ .eflags = true },
63186334 .each = .{ .once = &.{
6319 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6320 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6321 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6322 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
6323 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6324 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
6325 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6326 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6327 } },
6328 }, .{
6329 .required_features = .{ .sse, .mmx, null, null },
6330 .src_constraints = .{
6331 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },
6332 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },
6333 },
6334 .patterns = &.{
6335 .{ .src = .{ .to_mut_mmx, .mem } },
6336 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
6337 .{ .src = .{ .to_mut_mmx, .to_mmx } },
6338 },
6339 .dst_temps = .{.{ .ref = .src0 }},
6340 .each = .{ .once = &.{
6341 .{ ._, .p_w, .mins, .dst0q, .src1q, ._, ._ },
6342 } },
6343 }, .{
6344 .required_features = .{ .avx, null, null, null },
6345 .src_constraints = .{
6346 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
6347 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
6348 },
6349 .patterns = &.{
6350 .{ .src = .{ .to_sse, .mem } },
6351 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6352 .{ .src = .{ .to_sse, .to_sse } },
6353 },
6354 .dst_temps = .{.{ .rc = .sse }},
6355 .each = .{ .once = &.{
6356 .{ ._, .vp_w, .mins, .dst0x, .src0x, .src1x, ._ },
6357 } },
6358 }, .{
6359 .required_features = .{ .sse2, null, null, null },
6360 .src_constraints = .{
6361 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
6362 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
6363 },
6364 .patterns = &.{
6365 .{ .src = .{ .to_mut_sse, .mem } },
6366 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6367 .{ .src = .{ .to_mut_sse, .to_sse } },
6368 },
6369 .dst_temps = .{.{ .ref = .src0 }},
6370 .each = .{ .once = &.{
6371 .{ ._, .p_w, .mins, .dst0x, .src1x, ._, ._ },
6372 } },
6373 }, .{
6374 .required_features = .{ .avx2, null, null, null },
6375 .src_constraints = .{
6376 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
6377 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
6378 },
6379 .patterns = &.{
6380 .{ .src = .{ .to_sse, .mem } },
6381 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6382 .{ .src = .{ .to_sse, .to_sse } },
6383 },
6384 .dst_temps = .{.{ .rc = .sse }},
6385 .each = .{ .once = &.{
6386 .{ ._, .vp_w, .mins, .dst0y, .src0y, .src1y, ._ },
6387 } },
6388 }, .{
6389 .required_features = .{ .avx2, null, null, null },
6335 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
6336 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
6337 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6338 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6339 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
6340 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6341 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
6342 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6343 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6344 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6345 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
6346 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
6347 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
6348 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
6349 } },
6350 }, .{
6351 .required_features = .{ .@"64bit", .x87, null, null },
63906352 .src_constraints = .{
6391 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
6392 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
6353 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6354 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
63936355 },
63946356 .patterns = &.{
6395 .{ .src = .{ .to_mem, .to_mem } },
6357 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
6358 .{ .src = .{ .mem, .to_x87 } },
6359 .{ .src = .{ .to_x87, .to_x87 } },
63966360 },
63976361 .extra_temps = .{
6398 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6399 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
6362 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6363 .{ .type = .u8, .kind = .{ .reg = .ah } },
64006364 .unused,
64016365 .unused,
64026366 .unused,
......@@ -6405,28 +6369,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64056369 .unused,
64066370 .unused,
64076371 },
6408 .dst_temps = .{.mem},
6372 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
64096373 .clobbers = .{ .eflags = true },
64106374 .each = .{ .once = &.{
6411 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6412 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6413 .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
6414 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6415 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
6416 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6375 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
6376 .{ ._, .f_, .xam, ._, ._, ._, ._ },
6377 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6378 .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ },
6379 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
6380 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6381 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
6382 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6383 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6384 .{ ._, ._, .@"test", .tmp1b, .si(0b0_0_000_001), ._, ._ },
6385 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
6386 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
6387 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
6388 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
64176389 } },
64186390 }, .{
6419 .required_features = .{ .avx, null, null, null },
6391 .required_features = .{ .x87, null, null, null },
64206392 .src_constraints = .{
6421 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
6422 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
6393 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6394 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
64236395 },
64246396 .patterns = &.{
6425 .{ .src = .{ .to_mem, .to_mem } },
6397 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
6398 .{ .src = .{ .mem, .to_x87 } },
6399 .{ .src = .{ .to_x87, .to_x87 } },
64266400 },
64276401 .extra_temps = .{
6428 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6429 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
6402 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6403 .{ .type = .u8, .kind = .{ .reg = .ah } },
64306404 .unused,
64316405 .unused,
64326406 .unused,
......@@ -6435,29 +6409,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64356409 .unused,
64366410 .unused,
64376411 },
6438 .dst_temps = .{.mem},
6412 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
64396413 .clobbers = .{ .eflags = true },
64406414 .each = .{ .once = &.{
6441 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6442 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6443 .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
6444 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6445 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6446 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6447 } },
6448 }, .{
6449 .required_features = .{ .sse2, null, null, null },
6415 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
6416 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
6417 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6418 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6419 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
6420 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6421 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
6422 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6423 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6424 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6425 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
6426 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
6427 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
6428 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
6429 } },
6430 }, .{
6431 .required_features = .{ .x87, .cmov, null, null },
64506432 .src_constraints = .{
6451 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
6452 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
6433 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6434 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
64536435 },
64546436 .patterns = &.{
64556437 .{ .src = .{ .to_mem, .to_mem } },
64566438 },
64576439 .extra_temps = .{
64586440 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6459 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
6460 .unused,
6441 .{ .type = .f80, .kind = .{ .reg = .st6 } },
6442 .{ .type = .f80, .kind = .{ .reg = .st7 } },
64616443 .unused,
64626444 .unused,
64636445 .unused,
......@@ -6469,26 +6451,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64696451 .clobbers = .{ .eflags = true },
64706452 .each = .{ .once = &.{
64716453 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6472 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6473 .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6474 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6454 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
6455 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
6456 .{ ._, .f_, .ucomi, .tmp1t, .tmp1t, ._, ._ },
6457 .{ ._, .f_u, .cmov, .tmp1t, .tmp2t, ._, ._ },
6458 .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ },
6459 .{ ._, .f_, .ucomi, .tmp1t, .tmp2t, ._, ._ },
6460 .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ },
6461 .{ ._, .f_nb, .cmov, .tmp1t, .tmp2t, ._, ._ },
6462 .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
6463 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
64756464 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
64766465 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64776466 } },
64786467 }, .{
6479 .required_features = .{ .cmov, null, null, null },
6468 .required_features = .{ .sahf, .x87, null, null },
64806469 .src_constraints = .{
6481 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
6482 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
6470 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6471 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
64836472 },
64846473 .patterns = &.{
64856474 .{ .src = .{ .to_mem, .to_mem } },
64866475 },
64876476 .extra_temps = .{
64886477 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6489 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
6490 .unused,
6491 .unused,
6478 .{ .type = .f80, .kind = .{ .reg = .st6 } },
6479 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6480 .{ .type = .u8, .kind = .{ .reg = .ah } },
64926481 .unused,
64936482 .unused,
64946483 .unused,
......@@ -6499,26 +6488,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64996488 .clobbers = .{ .eflags = true },
65006489 .each = .{ .once = &.{
65016490 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6502 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6503 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6504 .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6505 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
6506 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
6491 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
6492 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
6493 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
6494 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
6495 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6496 .{ ._, ._p, .j, .@"1f", ._, ._, ._ },
6497 .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ },
6498 .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ },
6499 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
6500 .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ },
6501 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6502 .{ ._, ._b, .j, .@"2f", ._, ._, ._ },
6503 .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
6504 .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ },
6505 .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
6506 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
6507 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
65076508 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
65086509 } },
65096510 }, .{
6511 .required_features = .{ .@"64bit", .x87, null, null },
65106512 .src_constraints = .{
6511 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
6512 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
6513 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6514 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
65136515 },
65146516 .patterns = &.{
65156517 .{ .src = .{ .to_mem, .to_mem } },
65166518 },
65176519 .extra_temps = .{
65186520 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6519 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
6520 .unused,
6521 .unused,
6521 .{ .type = .f80, .kind = .{ .reg = .st6 } },
6522 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6523 .{ .type = .u8, .kind = .{ .reg = .ah } },
65226524 .unused,
65236525 .unused,
65246526 .unused,
......@@ -6529,90 +6531,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
65296531 .clobbers = .{ .eflags = true },
65306532 .each = .{ .once = &.{
65316533 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6532 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6533 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6534 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
6535 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6536 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
6537 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
6534 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
6535 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
6536 .{ ._, .f_, .xam, ._, ._, ._, ._ },
6537 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
6538 .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ },
6539 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
6540 .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ },
6541 .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ },
6542 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
6543 .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ },
6544 .{ ._, ._, .@"test", .tmp3b, .si(0b0_0_000_001), ._, ._ },
6545 .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
6546 .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
6547 .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ },
6548 .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
6549 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
6550 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
65386551 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
65396552 } },
65406553 }, .{
6541 .required_features = .{ .avx, null, null, null },
6542 .src_constraints = .{
6543 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6544 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6545 },
6546 .patterns = &.{
6547 .{ .src = .{ .to_sse, .mem } },
6548 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6549 .{ .src = .{ .to_sse, .to_sse } },
6550 },
6551 .dst_temps = .{.{ .rc = .sse }},
6552 .each = .{ .once = &.{
6553 .{ ._, .vp_w, .minu, .dst0x, .src0x, .src1x, ._ },
6554 } },
6555 }, .{
6556 .required_features = .{ .sse4_1, null, null, null },
6557 .src_constraints = .{
6558 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6559 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6560 },
6561 .patterns = &.{
6562 .{ .src = .{ .to_mut_sse, .mem } },
6563 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6564 .{ .src = .{ .to_mut_sse, .to_sse } },
6565 },
6566 .dst_temps = .{.{ .ref = .src0 }},
6567 .each = .{ .once = &.{
6568 .{ ._, .p_w, .minu, .dst0x, .src1x, ._, ._ },
6569 } },
6570 }, .{
6571 .required_features = .{ .sse2, null, null, null },
6572 .src_constraints = .{
6573 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6574 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6575 },
6576 .patterns = &.{
6577 .{ .src = .{ .to_mut_sse, .mem } },
6578 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6579 .{ .src = .{ .to_mut_sse, .to_sse } },
6580 },
6581 .dst_temps = .{.{ .rc = .sse }},
6582 .each = .{ .once = &.{
6583 .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
6584 .{ ._, .p_w, .subus, .src0x, .src1x, ._, ._ },
6585 .{ ._, .p_w, .sub, .dst0x, .src0x, ._, ._ },
6586 } },
6587 }, .{
6588 .required_features = .{ .avx2, null, null, null },
6589 .src_constraints = .{
6590 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
6591 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
6592 },
6593 .patterns = &.{
6594 .{ .src = .{ .to_sse, .mem } },
6595 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6596 .{ .src = .{ .to_sse, .to_sse } },
6597 },
6598 .dst_temps = .{.{ .rc = .sse }},
6599 .each = .{ .once = &.{
6600 .{ ._, .vp_w, .minu, .dst0y, .src0y, .src1y, ._ },
6601 } },
6602 }, .{
6603 .required_features = .{ .avx2, null, null, null },
6554 .required_features = .{ .x87, null, null, null },
66046555 .src_constraints = .{
6605 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
6606 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
6556 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6557 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
66076558 },
66086559 .patterns = &.{
66096560 .{ .src = .{ .to_mem, .to_mem } },
66106561 },
66116562 .extra_temps = .{
66126563 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6613 .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
6614 .unused,
6615 .unused,
6564 .{ .type = .f80, .kind = .{ .reg = .st6 } },
6565 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6566 .{ .type = .u8, .kind = .{ .reg = .ah } },
66166567 .unused,
66176568 .unused,
66186569 .unused,
......@@ -6623,24 +6574,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
66236574 .clobbers = .{ .eflags = true },
66246575 .each = .{ .once = &.{
66256576 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6626 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6627 .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
6628 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6629 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
6577 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
6578 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
6579 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
6580 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
6581 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6582 .{ ._, ._p, .j, .@"1f", ._, ._, ._ },
6583 .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ },
6584 .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ },
6585 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
6586 .{ ._, .f_, .xch, .tmp2t, ._, ._, ._ },
6587 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6588 .{ ._, ._b, .j, .@"2f", ._, ._, ._ },
6589 .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
6590 .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ },
6591 .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
6592 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
6593 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
66306594 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
66316595 } },
66326596 }, .{
6633 .required_features = .{ .avx, null, null, null },
6597 .required_features = .{ .sse, null, null, null },
66346598 .src_constraints = .{
6635 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6636 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6599 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
6600 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
66376601 },
66386602 .patterns = &.{
6639 .{ .src = .{ .to_mem, .to_mem } },
6603 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
66406604 },
6605 .call_frame = .{ .alignment = .@"16" },
66416606 .extra_temps = .{
6642 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6643 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
6607 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
6608 .unused,
66446609 .unused,
66456610 .unused,
66466611 .unused,
......@@ -6649,30 +6614,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
66496614 .unused,
66506615 .unused,
66516616 },
6652 .dst_temps = .{.mem},
6653 .clobbers = .{ .eflags = true },
6617 .dst_temps = .{.{ .ref = .src0 }},
6618 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
66546619 .each = .{ .once = &.{
6655 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6656 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6657 .{ ._, .vp_w, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
6658 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6659 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6660 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6620 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
66616621 } },
66626622 }, .{
6663 .required_features = .{ .sse4_1, null, null, null },
6623 .required_features = .{ .avx, null, null, null },
66646624 .src_constraints = .{
6665 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6666 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6625 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6626 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
66676627 },
66686628 .patterns = &.{
66696629 .{ .src = .{ .to_mem, .to_mem } },
66706630 },
6631 .call_frame = .{ .alignment = .@"16" },
66716632 .extra_temps = .{
66726633 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6673 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
6674 .unused,
6675 .unused,
6634 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
6635 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
6636 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
66766637 .unused,
66776638 .unused,
66786639 .unused,
......@@ -6680,29 +6641,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
66806641 .unused,
66816642 },
66826643 .dst_temps = .{.mem},
6683 .clobbers = .{ .eflags = true },
6644 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
66846645 .each = .{ .once = &.{
6685 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6686 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6687 .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6688 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6689 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6646 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6647 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6648 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6649 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6650 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6651 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
66906652 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
66916653 } },
66926654 }, .{
66936655 .required_features = .{ .sse2, null, null, null },
66946656 .src_constraints = .{
6695 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6696 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6657 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6658 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
66976659 },
66986660 .patterns = &.{
66996661 .{ .src = .{ .to_mem, .to_mem } },
67006662 },
6663 .call_frame = .{ .alignment = .@"16" },
67016664 .extra_temps = .{
67026665 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6703 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
6704 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
6705 .unused,
6666 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
6667 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
6668 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
67066669 .unused,
67076670 .unused,
67086671 .unused,
......@@ -6710,31 +6673,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
67106673 .unused,
67116674 },
67126675 .dst_temps = .{.mem},
6713 .clobbers = .{ .eflags = true },
6676 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
67146677 .each = .{ .once = &.{
6715 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6678 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
67166679 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6717 .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
6718 .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6719 .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ },
6720 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
6721 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6680 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6681 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6682 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6683 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
67226684 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
67236685 } },
67246686 }, .{
6725 .required_features = .{ .cmov, null, null, null },
6687 .required_features = .{ .sse, null, null, null },
67266688 .src_constraints = .{
6727 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
6728 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
6689 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6690 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
67296691 },
67306692 .patterns = &.{
67316693 .{ .src = .{ .to_mem, .to_mem } },
67326694 },
6695 .call_frame = .{ .alignment = .@"16" },
67336696 .extra_temps = .{
67346697 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6735 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
6736 .unused,
6737 .unused,
6698 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
6699 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
6700 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
67386701 .unused,
67396702 .unused,
67406703 .unused,
......@@ -6742,19 +6705,1411 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
67426705 .unused,
67436706 },
67446707 .dst_temps = .{.mem},
6745 .clobbers = .{ .eflags = true },
6746 .each = .{ .once = &.{
6747 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6748 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6749 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6750 .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6751 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
6752 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
6708 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6709 .each = .{ .once = &.{
6710 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6711 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6712 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6713 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6714 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6715 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
67536716 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
67546717 } },
6755 }, .{
6756 .src_constraints = .{
6757 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
6718 } }) catch |err| switch (err) {
6719 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
6720 @tagName(air_tag),
6721 cg.typeOf(bin_op.lhs).fmt(pt),
6722 ops[0].tracking(cg),
6723 ops[1].tracking(cg),
6724 }),
6725 else => |e| return e,
6726 };
6727 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
6728 },
6729 .min => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else {
6730 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
6731 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
6732 var res: [1]Temp = undefined;
6733 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
6734 .required_features = .{ .cmov, null, null, null },
6735 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },
6736 .patterns = &.{
6737 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6738 },
6739 .dst_temps = .{.{ .ref = .src0 }},
6740 .clobbers = .{ .eflags = true },
6741 .each = .{ .once = &.{
6742 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
6743 .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ },
6744 } },
6745 }, .{
6746 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },
6747 .patterns = &.{
6748 .{ .src = .{ .to_mut_gpr, .mem } },
6749 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6750 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6751 },
6752 .dst_temps = .{.{ .ref = .src0 }},
6753 .clobbers = .{ .eflags = true },
6754 .each = .{ .once = &.{
6755 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
6756 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
6757 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },
6758 } },
6759 }, .{
6760 .required_features = .{ .cmov, null, null, null },
6761 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },
6762 .patterns = &.{
6763 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6764 },
6765 .dst_temps = .{.{ .ref = .src0 }},
6766 .clobbers = .{ .eflags = true },
6767 .each = .{ .once = &.{
6768 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
6769 .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ },
6770 } },
6771 }, .{
6772 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },
6773 .patterns = &.{
6774 .{ .src = .{ .to_mut_gpr, .mem } },
6775 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6776 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6777 },
6778 .dst_temps = .{.{ .ref = .src0 }},
6779 .clobbers = .{ .eflags = true },
6780 .each = .{ .once = &.{
6781 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
6782 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
6783 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },
6784 } },
6785 }, .{
6786 .required_features = .{ .cmov, null, null, null },
6787 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },
6788 .patterns = &.{
6789 .{ .src = .{ .to_mut_gpr, .mem } },
6790 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6791 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6792 },
6793 .dst_temps = .{.{ .ref = .src0 }},
6794 .clobbers = .{ .eflags = true },
6795 .each = .{ .once = &.{
6796 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
6797 .{ ._, ._ge, .cmov, .dst0w, .src1w, ._, ._ },
6798 } },
6799 }, .{
6800 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },
6801 .patterns = &.{
6802 .{ .src = .{ .to_mut_gpr, .mem } },
6803 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6804 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6805 },
6806 .dst_temps = .{.{ .ref = .src0 }},
6807 .clobbers = .{ .eflags = true },
6808 .each = .{ .once = &.{
6809 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
6810 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
6811 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },
6812 } },
6813 }, .{
6814 .required_features = .{ .cmov, null, null, null },
6815 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },
6816 .patterns = &.{
6817 .{ .src = .{ .to_mut_gpr, .mem } },
6818 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6819 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6820 },
6821 .dst_temps = .{.{ .ref = .src0 }},
6822 .clobbers = .{ .eflags = true },
6823 .each = .{ .once = &.{
6824 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
6825 .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ },
6826 } },
6827 }, .{
6828 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },
6829 .patterns = &.{
6830 .{ .src = .{ .to_mut_gpr, .mem } },
6831 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6832 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6833 },
6834 .dst_temps = .{.{ .ref = .src0 }},
6835 .clobbers = .{ .eflags = true },
6836 .each = .{ .once = &.{
6837 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
6838 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
6839 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },
6840 } },
6841 }, .{
6842 .required_features = .{ .cmov, null, null, null },
6843 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },
6844 .patterns = &.{
6845 .{ .src = .{ .to_mut_gpr, .mem } },
6846 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6847 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6848 },
6849 .dst_temps = .{.{ .ref = .src0 }},
6850 .clobbers = .{ .eflags = true },
6851 .each = .{ .once = &.{
6852 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
6853 .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ },
6854 } },
6855 }, .{
6856 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },
6857 .patterns = &.{
6858 .{ .src = .{ .to_mut_gpr, .mem } },
6859 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6860 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6861 },
6862 .dst_temps = .{.{ .ref = .src0 }},
6863 .clobbers = .{ .eflags = true },
6864 .each = .{ .once = &.{
6865 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
6866 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
6867 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },
6868 } },
6869 }, .{
6870 .required_features = .{ .cmov, null, null, null },
6871 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },
6872 .patterns = &.{
6873 .{ .src = .{ .to_mut_gpr, .mem } },
6874 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6875 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6876 },
6877 .dst_temps = .{.{ .ref = .src0 }},
6878 .clobbers = .{ .eflags = true },
6879 .each = .{ .once = &.{
6880 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
6881 .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ },
6882 } },
6883 }, .{
6884 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },
6885 .patterns = &.{
6886 .{ .src = .{ .to_mut_gpr, .mem } },
6887 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6888 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6889 },
6890 .dst_temps = .{.{ .ref = .src0 }},
6891 .clobbers = .{ .eflags = true },
6892 .each = .{ .once = &.{
6893 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
6894 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
6895 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },
6896 } },
6897 }, .{
6898 .required_features = .{ .@"64bit", .cmov, null, null },
6899 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },
6900 .patterns = &.{
6901 .{ .src = .{ .to_mut_gpr, .mem } },
6902 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6903 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6904 },
6905 .dst_temps = .{.{ .ref = .src0 }},
6906 .clobbers = .{ .eflags = true },
6907 .each = .{ .once = &.{
6908 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
6909 .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ },
6910 } },
6911 }, .{
6912 .required_features = .{ .@"64bit", null, null, null },
6913 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },
6914 .patterns = &.{
6915 .{ .src = .{ .to_mut_gpr, .mem } },
6916 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6917 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6918 },
6919 .dst_temps = .{.{ .ref = .src0 }},
6920 .clobbers = .{ .eflags = true },
6921 .each = .{ .once = &.{
6922 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
6923 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
6924 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },
6925 } },
6926 }, .{
6927 .required_features = .{ .@"64bit", .cmov, null, null },
6928 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },
6929 .patterns = &.{
6930 .{ .src = .{ .to_mut_gpr, .mem } },
6931 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6932 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6933 },
6934 .dst_temps = .{.{ .ref = .src0 }},
6935 .clobbers = .{ .eflags = true },
6936 .each = .{ .once = &.{
6937 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
6938 .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ },
6939 } },
6940 }, .{
6941 .required_features = .{ .@"64bit", null, null, null },
6942 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },
6943 .patterns = &.{
6944 .{ .src = .{ .to_mut_gpr, .mem } },
6945 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
6946 .{ .src = .{ .to_mut_gpr, .to_gpr } },
6947 },
6948 .dst_temps = .{.{ .ref = .src0 }},
6949 .clobbers = .{ .eflags = true },
6950 .each = .{ .once = &.{
6951 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
6952 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
6953 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },
6954 } },
6955 }, .{
6956 .required_features = .{ .@"64bit", .cmov, null, null },
6957 .src_constraints = .{ .any_signed_int, .any_signed_int },
6958 .patterns = &.{
6959 .{ .src = .{ .to_mem, .to_mem } },
6960 },
6961 .extra_temps = .{
6962 .{ .type = .isize, .kind = .{ .reg = .rsi } },
6963 .{ .type = .u64, .kind = .{ .reg = .rdi } },
6964 .{ .type = .u64, .kind = .{ .reg = .rcx } },
6965 .unused,
6966 .unused,
6967 .unused,
6968 .unused,
6969 .unused,
6970 .unused,
6971 },
6972 .dst_temps = .{.mem},
6973 .clobbers = .{ .eflags = true },
6974 .each = .{ .once = &.{
6975 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
6976 .{ ._, ._c, .cl, ._, ._, ._, ._ },
6977 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
6978 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
6979 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6980 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6981 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
6982 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
6983 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
6984 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
6985 .{ ._, ._ge, .cmov, .tmp0p, .tmp1p, ._, ._ },
6986 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
6987 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
6988 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
6989 } },
6990 }, .{
6991 .required_features = .{ .@"64bit", null, null, null },
6992 .src_constraints = .{ .any_signed_int, .any_signed_int },
6993 .patterns = &.{
6994 .{ .src = .{ .to_mem, .to_mem } },
6995 },
6996 .extra_temps = .{
6997 .{ .type = .isize, .kind = .{ .reg = .rsi } },
6998 .{ .type = .u64, .kind = .{ .reg = .rdi } },
6999 .{ .type = .u64, .kind = .{ .reg = .rcx } },
7000 .unused,
7001 .unused,
7002 .unused,
7003 .unused,
7004 .unused,
7005 .unused,
7006 },
7007 .dst_temps = .{.mem},
7008 .clobbers = .{ .eflags = true },
7009 .each = .{ .once = &.{
7010 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
7011 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7012 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
7013 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
7014 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
7015 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7016 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
7017 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
7018 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
7019 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
7020 .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ },
7021 .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
7022 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
7023 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7024 } },
7025 }, .{
7026 .required_features = .{ .@"64bit", .cmov, null, null },
7027 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },
7028 .patterns = &.{
7029 .{ .src = .{ .to_mem, .to_mem } },
7030 },
7031 .extra_temps = .{
7032 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7033 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7034 .{ .type = .u64, .kind = .{ .reg = .rcx } },
7035 .unused,
7036 .unused,
7037 .unused,
7038 .unused,
7039 .unused,
7040 .unused,
7041 },
7042 .dst_temps = .{.mem},
7043 .clobbers = .{ .eflags = true },
7044 .each = .{ .once = &.{
7045 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
7046 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7047 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
7048 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
7049 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
7050 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7051 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
7052 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
7053 .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ },
7054 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
7055 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
7056 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7057 } },
7058 }, .{
7059 .required_features = .{ .@"64bit", null, null, null },
7060 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },
7061 .patterns = &.{
7062 .{ .src = .{ .to_mem, .to_mem } },
7063 },
7064 .extra_temps = .{
7065 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7066 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7067 .{ .type = .u64, .kind = .{ .reg = .rcx } },
7068 .unused,
7069 .unused,
7070 .unused,
7071 .unused,
7072 .unused,
7073 .unused,
7074 },
7075 .dst_temps = .{.mem},
7076 .clobbers = .{ .eflags = true },
7077 .each = .{ .once = &.{
7078 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
7079 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7080 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
7081 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
7082 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
7083 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7084 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
7085 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
7086 .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ },
7087 .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
7088 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
7089 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7090 } },
7091 }, .{
7092 .required_features = .{ .avx, null, null, null },
7093 .src_constraints = .{
7094 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
7095 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
7096 },
7097 .patterns = &.{
7098 .{ .src = .{ .to_sse, .mem } },
7099 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7100 .{ .src = .{ .to_sse, .to_sse } },
7101 },
7102 .dst_temps = .{.{ .rc = .sse }},
7103 .each = .{ .once = &.{
7104 .{ ._, .vp_b, .mins, .dst0x, .src0x, .src1x, ._ },
7105 } },
7106 }, .{
7107 .required_features = .{ .sse4_1, null, null, null },
7108 .src_constraints = .{
7109 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
7110 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
7111 },
7112 .patterns = &.{
7113 .{ .src = .{ .to_mut_sse, .mem } },
7114 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7115 .{ .src = .{ .to_mut_sse, .to_sse } },
7116 },
7117 .dst_temps = .{.{ .ref = .src0 }},
7118 .each = .{ .once = &.{
7119 .{ ._, .p_b, .mins, .dst0x, .src1x, ._, ._ },
7120 } },
7121 }, .{
7122 .required_features = .{ .sse2, null, null, null },
7123 .src_constraints = .{
7124 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
7125 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
7126 },
7127 .patterns = &.{
7128 .{ .src = .{ .to_mut_sse, .mem } },
7129 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7130 .{ .src = .{ .to_mut_sse, .to_sse } },
7131 },
7132 .dst_temps = .{.{ .rc = .sse }},
7133 .each = .{ .once = &.{
7134 .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ },
7135 .{ ._, .p_b, .cmpgt, .dst0x, .src0x, ._, ._ },
7136 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
7137 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
7138 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
7139 } },
7140 }, .{
7141 .required_features = .{ .avx2, null, null, null },
7142 .src_constraints = .{
7143 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
7144 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
7145 },
7146 .patterns = &.{
7147 .{ .src = .{ .to_sse, .mem } },
7148 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7149 .{ .src = .{ .to_sse, .to_sse } },
7150 },
7151 .dst_temps = .{.{ .rc = .sse }},
7152 .each = .{ .once = &.{
7153 .{ ._, .vp_b, .mins, .dst0y, .src0y, .src1y, ._ },
7154 } },
7155 }, .{
7156 .required_features = .{ .avx2, null, null, null },
7157 .src_constraints = .{
7158 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
7159 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
7160 },
7161 .patterns = &.{
7162 .{ .src = .{ .to_mem, .to_mem } },
7163 },
7164 .extra_temps = .{
7165 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7166 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
7167 .unused,
7168 .unused,
7169 .unused,
7170 .unused,
7171 .unused,
7172 .unused,
7173 .unused,
7174 },
7175 .dst_temps = .{.mem},
7176 .clobbers = .{ .eflags = true },
7177 .each = .{ .once = &.{
7178 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7179 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7180 .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
7181 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
7182 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7183 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7184 } },
7185 }, .{
7186 .required_features = .{ .avx, null, null, null },
7187 .src_constraints = .{
7188 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
7189 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
7190 },
7191 .patterns = &.{
7192 .{ .src = .{ .to_mem, .to_mem } },
7193 },
7194 .extra_temps = .{
7195 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7196 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
7197 .unused,
7198 .unused,
7199 .unused,
7200 .unused,
7201 .unused,
7202 .unused,
7203 .unused,
7204 },
7205 .dst_temps = .{.mem},
7206 .clobbers = .{ .eflags = true },
7207 .each = .{ .once = &.{
7208 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7209 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7210 .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
7211 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7212 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7213 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7214 } },
7215 }, .{
7216 .required_features = .{ .sse4_1, null, null, null },
7217 .src_constraints = .{
7218 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
7219 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
7220 },
7221 .patterns = &.{
7222 .{ .src = .{ .to_mem, .to_mem } },
7223 },
7224 .extra_temps = .{
7225 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7226 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
7227 .unused,
7228 .unused,
7229 .unused,
7230 .unused,
7231 .unused,
7232 .unused,
7233 .unused,
7234 },
7235 .dst_temps = .{.mem},
7236 .clobbers = .{ .eflags = true },
7237 .each = .{ .once = &.{
7238 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7239 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7240 .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7241 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7242 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7243 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7244 } },
7245 }, .{
7246 .required_features = .{ .sse2, null, null, null },
7247 .src_constraints = .{
7248 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
7249 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
7250 },
7251 .patterns = &.{
7252 .{ .src = .{ .to_mem, .to_mem } },
7253 },
7254 .extra_temps = .{
7255 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7256 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
7257 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
7258 .unused,
7259 .unused,
7260 .unused,
7261 .unused,
7262 .unused,
7263 .unused,
7264 },
7265 .dst_temps = .{.mem},
7266 .clobbers = .{ .eflags = true },
7267 .each = .{ .once = &.{
7268 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7269 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7270 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7271 .{ ._, .p_b, .cmpgt, .tmp1x, .tmp2x, ._, ._ },
7272 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },
7273 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7274 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
7275 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7276 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7277 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7278 } },
7279 }, .{
7280 .required_features = .{ .cmov, .slow_incdec, null, null },
7281 .src_constraints = .{
7282 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
7283 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
7284 },
7285 .patterns = &.{
7286 .{ .src = .{ .to_mem, .to_mem } },
7287 },
7288 .extra_temps = .{
7289 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7290 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
7291 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
7292 .unused,
7293 .unused,
7294 .unused,
7295 .unused,
7296 .unused,
7297 .unused,
7298 },
7299 .dst_temps = .{.mem},
7300 .clobbers = .{ .eflags = true },
7301 .each = .{ .once = &.{
7302 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7303 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
7304 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7305 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
7306 .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ },
7307 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
7308 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7309 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7310 } },
7311 }, .{
7312 .required_features = .{ .cmov, null, null, null },
7313 .src_constraints = .{
7314 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
7315 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
7316 },
7317 .patterns = &.{
7318 .{ .src = .{ .to_mem, .to_mem } },
7319 },
7320 .extra_temps = .{
7321 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7322 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
7323 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
7324 .unused,
7325 .unused,
7326 .unused,
7327 .unused,
7328 .unused,
7329 .unused,
7330 },
7331 .dst_temps = .{.mem},
7332 .clobbers = .{ .eflags = true },
7333 .each = .{ .once = &.{
7334 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7335 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
7336 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7337 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
7338 .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ },
7339 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
7340 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
7341 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7342 } },
7343 }, .{
7344 .required_features = .{ .slow_incdec, null, null, null },
7345 .src_constraints = .{
7346 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
7347 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
7348 },
7349 .patterns = &.{
7350 .{ .src = .{ .to_mem, .to_mem } },
7351 },
7352 .extra_temps = .{
7353 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7354 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
7355 .unused,
7356 .unused,
7357 .unused,
7358 .unused,
7359 .unused,
7360 .unused,
7361 .unused,
7362 },
7363 .dst_temps = .{.mem},
7364 .clobbers = .{ .eflags = true },
7365 .each = .{ .once = &.{
7366 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7367 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
7368 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7369 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7370 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7371 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
7372 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7373 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7374 } },
7375 }, .{
7376 .src_constraints = .{
7377 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
7378 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
7379 },
7380 .patterns = &.{
7381 .{ .src = .{ .to_mem, .to_mem } },
7382 },
7383 .extra_temps = .{
7384 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7385 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
7386 .unused,
7387 .unused,
7388 .unused,
7389 .unused,
7390 .unused,
7391 .unused,
7392 .unused,
7393 },
7394 .dst_temps = .{.mem},
7395 .clobbers = .{ .eflags = true },
7396 .each = .{ .once = &.{
7397 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7398 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
7399 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7400 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7401 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7402 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
7403 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
7404 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7405 } },
7406 }, .{
7407 .required_features = .{ .sse, .mmx, null, null },
7408 .src_constraints = .{
7409 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
7410 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
7411 },
7412 .patterns = &.{
7413 .{ .src = .{ .to_mut_mmx, .mem } },
7414 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
7415 .{ .src = .{ .to_mut_mmx, .to_mmx } },
7416 },
7417 .dst_temps = .{.{ .ref = .src0 }},
7418 .each = .{ .once = &.{
7419 .{ ._, .p_b, .minu, .dst0q, .src1q, ._, ._ },
7420 } },
7421 }, .{
7422 .required_features = .{ .avx, null, null, null },
7423 .src_constraints = .{
7424 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
7425 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
7426 },
7427 .patterns = &.{
7428 .{ .src = .{ .to_sse, .mem } },
7429 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7430 .{ .src = .{ .to_sse, .to_sse } },
7431 },
7432 .dst_temps = .{.{ .rc = .sse }},
7433 .each = .{ .once = &.{
7434 .{ ._, .vp_b, .minu, .dst0x, .src0x, .src1x, ._ },
7435 } },
7436 }, .{
7437 .required_features = .{ .sse2, null, null, null },
7438 .src_constraints = .{
7439 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
7440 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
7441 },
7442 .patterns = &.{
7443 .{ .src = .{ .to_mut_sse, .mem } },
7444 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7445 .{ .src = .{ .to_mut_sse, .to_sse } },
7446 },
7447 .dst_temps = .{.{ .ref = .src0 }},
7448 .each = .{ .once = &.{
7449 .{ ._, .p_b, .minu, .dst0x, .src1x, ._, ._ },
7450 } },
7451 }, .{
7452 .required_features = .{ .avx2, null, null, null },
7453 .src_constraints = .{
7454 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
7455 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
7456 },
7457 .patterns = &.{
7458 .{ .src = .{ .to_sse, .mem } },
7459 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7460 .{ .src = .{ .to_sse, .to_sse } },
7461 },
7462 .dst_temps = .{.{ .rc = .sse }},
7463 .each = .{ .once = &.{
7464 .{ ._, .vp_b, .minu, .dst0y, .src0y, .src1y, ._ },
7465 } },
7466 }, .{
7467 .required_features = .{ .avx2, null, null, null },
7468 .src_constraints = .{
7469 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
7470 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
7471 },
7472 .patterns = &.{
7473 .{ .src = .{ .to_mem, .to_mem } },
7474 },
7475 .extra_temps = .{
7476 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7477 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
7478 .unused,
7479 .unused,
7480 .unused,
7481 .unused,
7482 .unused,
7483 .unused,
7484 .unused,
7485 },
7486 .dst_temps = .{.mem},
7487 .clobbers = .{ .eflags = true },
7488 .each = .{ .once = &.{
7489 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7490 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7491 .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
7492 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
7493 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7494 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7495 } },
7496 }, .{
7497 .required_features = .{ .avx, null, null, null },
7498 .src_constraints = .{
7499 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
7500 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
7501 },
7502 .patterns = &.{
7503 .{ .src = .{ .to_mem, .to_mem } },
7504 },
7505 .extra_temps = .{
7506 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7507 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
7508 .unused,
7509 .unused,
7510 .unused,
7511 .unused,
7512 .unused,
7513 .unused,
7514 .unused,
7515 },
7516 .dst_temps = .{.mem},
7517 .clobbers = .{ .eflags = true },
7518 .each = .{ .once = &.{
7519 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7520 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7521 .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
7522 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7523 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7524 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7525 } },
7526 }, .{
7527 .required_features = .{ .sse2, null, null, null },
7528 .src_constraints = .{
7529 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
7530 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
7531 },
7532 .patterns = &.{
7533 .{ .src = .{ .to_mem, .to_mem } },
7534 },
7535 .extra_temps = .{
7536 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7537 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
7538 .unused,
7539 .unused,
7540 .unused,
7541 .unused,
7542 .unused,
7543 .unused,
7544 .unused,
7545 },
7546 .dst_temps = .{.mem},
7547 .clobbers = .{ .eflags = true },
7548 .each = .{ .once = &.{
7549 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7550 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7551 .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7552 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7553 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7554 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7555 } },
7556 }, .{
7557 .required_features = .{ .cmov, .slow_incdec, null, null },
7558 .src_constraints = .{
7559 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
7560 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
7561 },
7562 .patterns = &.{
7563 .{ .src = .{ .to_mem, .to_mem } },
7564 },
7565 .extra_temps = .{
7566 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7567 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7568 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7569 .unused,
7570 .unused,
7571 .unused,
7572 .unused,
7573 .unused,
7574 .unused,
7575 },
7576 .dst_temps = .{.mem},
7577 .clobbers = .{ .eflags = true },
7578 .each = .{ .once = &.{
7579 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7580 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
7581 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7582 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
7583 .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ },
7584 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
7585 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7586 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7587 } },
7588 }, .{
7589 .required_features = .{ .cmov, null, null, null },
7590 .src_constraints = .{
7591 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
7592 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
7593 },
7594 .patterns = &.{
7595 .{ .src = .{ .to_mem, .to_mem } },
7596 },
7597 .extra_temps = .{
7598 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7599 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7600 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7601 .unused,
7602 .unused,
7603 .unused,
7604 .unused,
7605 .unused,
7606 .unused,
7607 },
7608 .dst_temps = .{.mem},
7609 .clobbers = .{ .eflags = true },
7610 .each = .{ .once = &.{
7611 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7612 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
7613 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7614 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
7615 .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ },
7616 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
7617 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
7618 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7619 } },
7620 }, .{
7621 .required_features = .{ .slow_incdec, null, null, null },
7622 .src_constraints = .{
7623 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
7624 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
7625 },
7626 .patterns = &.{
7627 .{ .src = .{ .to_mem, .to_mem } },
7628 },
7629 .extra_temps = .{
7630 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7631 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7632 .unused,
7633 .unused,
7634 .unused,
7635 .unused,
7636 .unused,
7637 .unused,
7638 .unused,
7639 },
7640 .dst_temps = .{.mem},
7641 .clobbers = .{ .eflags = true },
7642 .each = .{ .once = &.{
7643 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7644 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
7645 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7646 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
7647 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7648 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
7649 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7650 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7651 } },
7652 }, .{
7653 .src_constraints = .{
7654 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
7655 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
7656 },
7657 .patterns = &.{
7658 .{ .src = .{ .to_mem, .to_mem } },
7659 },
7660 .extra_temps = .{
7661 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7662 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7663 .unused,
7664 .unused,
7665 .unused,
7666 .unused,
7667 .unused,
7668 .unused,
7669 .unused,
7670 },
7671 .dst_temps = .{.mem},
7672 .clobbers = .{ .eflags = true },
7673 .each = .{ .once = &.{
7674 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7675 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
7676 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7677 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
7678 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
7679 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
7680 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
7681 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7682 } },
7683 }, .{
7684 .required_features = .{ .sse, .mmx, null, null },
7685 .src_constraints = .{
7686 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },
7687 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },
7688 },
7689 .patterns = &.{
7690 .{ .src = .{ .to_mut_mmx, .mem } },
7691 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
7692 .{ .src = .{ .to_mut_mmx, .to_mmx } },
7693 },
7694 .dst_temps = .{.{ .ref = .src0 }},
7695 .each = .{ .once = &.{
7696 .{ ._, .p_w, .mins, .dst0q, .src1q, ._, ._ },
7697 } },
7698 }, .{
7699 .required_features = .{ .avx, null, null, null },
7700 .src_constraints = .{
7701 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
7702 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
7703 },
7704 .patterns = &.{
7705 .{ .src = .{ .to_sse, .mem } },
7706 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7707 .{ .src = .{ .to_sse, .to_sse } },
7708 },
7709 .dst_temps = .{.{ .rc = .sse }},
7710 .each = .{ .once = &.{
7711 .{ ._, .vp_w, .mins, .dst0x, .src0x, .src1x, ._ },
7712 } },
7713 }, .{
7714 .required_features = .{ .sse2, null, null, null },
7715 .src_constraints = .{
7716 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
7717 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
7718 },
7719 .patterns = &.{
7720 .{ .src = .{ .to_mut_sse, .mem } },
7721 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7722 .{ .src = .{ .to_mut_sse, .to_sse } },
7723 },
7724 .dst_temps = .{.{ .ref = .src0 }},
7725 .each = .{ .once = &.{
7726 .{ ._, .p_w, .mins, .dst0x, .src1x, ._, ._ },
7727 } },
7728 }, .{
7729 .required_features = .{ .avx2, null, null, null },
7730 .src_constraints = .{
7731 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
7732 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
7733 },
7734 .patterns = &.{
7735 .{ .src = .{ .to_sse, .mem } },
7736 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7737 .{ .src = .{ .to_sse, .to_sse } },
7738 },
7739 .dst_temps = .{.{ .rc = .sse }},
7740 .each = .{ .once = &.{
7741 .{ ._, .vp_w, .mins, .dst0y, .src0y, .src1y, ._ },
7742 } },
7743 }, .{
7744 .required_features = .{ .avx2, null, null, null },
7745 .src_constraints = .{
7746 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
7747 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
7748 },
7749 .patterns = &.{
7750 .{ .src = .{ .to_mem, .to_mem } },
7751 },
7752 .extra_temps = .{
7753 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7754 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
7755 .unused,
7756 .unused,
7757 .unused,
7758 .unused,
7759 .unused,
7760 .unused,
7761 .unused,
7762 },
7763 .dst_temps = .{.mem},
7764 .clobbers = .{ .eflags = true },
7765 .each = .{ .once = &.{
7766 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7767 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7768 .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
7769 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
7770 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7771 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7772 } },
7773 }, .{
7774 .required_features = .{ .avx, null, null, null },
7775 .src_constraints = .{
7776 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
7777 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
7778 },
7779 .patterns = &.{
7780 .{ .src = .{ .to_mem, .to_mem } },
7781 },
7782 .extra_temps = .{
7783 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7784 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
7785 .unused,
7786 .unused,
7787 .unused,
7788 .unused,
7789 .unused,
7790 .unused,
7791 .unused,
7792 },
7793 .dst_temps = .{.mem},
7794 .clobbers = .{ .eflags = true },
7795 .each = .{ .once = &.{
7796 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7797 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7798 .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
7799 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7800 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7801 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7802 } },
7803 }, .{
7804 .required_features = .{ .sse2, null, null, null },
7805 .src_constraints = .{
7806 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
7807 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
7808 },
7809 .patterns = &.{
7810 .{ .src = .{ .to_mem, .to_mem } },
7811 },
7812 .extra_temps = .{
7813 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7814 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
7815 .unused,
7816 .unused,
7817 .unused,
7818 .unused,
7819 .unused,
7820 .unused,
7821 .unused,
7822 },
7823 .dst_temps = .{.mem},
7824 .clobbers = .{ .eflags = true },
7825 .each = .{ .once = &.{
7826 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7827 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7828 .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7829 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7830 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7831 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7832 } },
7833 }, .{
7834 .required_features = .{ .cmov, null, null, null },
7835 .src_constraints = .{
7836 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
7837 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
7838 },
7839 .patterns = &.{
7840 .{ .src = .{ .to_mem, .to_mem } },
7841 },
7842 .extra_temps = .{
7843 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7844 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
7845 .unused,
7846 .unused,
7847 .unused,
7848 .unused,
7849 .unused,
7850 .unused,
7851 .unused,
7852 },
7853 .dst_temps = .{.mem},
7854 .clobbers = .{ .eflags = true },
7855 .each = .{ .once = &.{
7856 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7857 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
7858 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
7859 .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
7860 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
7861 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
7862 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7863 } },
7864 }, .{
7865 .src_constraints = .{
7866 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
7867 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
7868 },
7869 .patterns = &.{
7870 .{ .src = .{ .to_mem, .to_mem } },
7871 },
7872 .extra_temps = .{
7873 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7874 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
7875 .unused,
7876 .unused,
7877 .unused,
7878 .unused,
7879 .unused,
7880 .unused,
7881 .unused,
7882 },
7883 .dst_temps = .{.mem},
7884 .clobbers = .{ .eflags = true },
7885 .each = .{ .once = &.{
7886 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7887 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
7888 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
7889 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7890 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
7891 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
7892 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
7893 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7894 } },
7895 }, .{
7896 .required_features = .{ .avx, null, null, null },
7897 .src_constraints = .{
7898 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
7899 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
7900 },
7901 .patterns = &.{
7902 .{ .src = .{ .to_sse, .mem } },
7903 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7904 .{ .src = .{ .to_sse, .to_sse } },
7905 },
7906 .dst_temps = .{.{ .rc = .sse }},
7907 .each = .{ .once = &.{
7908 .{ ._, .vp_w, .minu, .dst0x, .src0x, .src1x, ._ },
7909 } },
7910 }, .{
7911 .required_features = .{ .sse4_1, null, null, null },
7912 .src_constraints = .{
7913 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
7914 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
7915 },
7916 .patterns = &.{
7917 .{ .src = .{ .to_mut_sse, .mem } },
7918 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7919 .{ .src = .{ .to_mut_sse, .to_sse } },
7920 },
7921 .dst_temps = .{.{ .ref = .src0 }},
7922 .each = .{ .once = &.{
7923 .{ ._, .p_w, .minu, .dst0x, .src1x, ._, ._ },
7924 } },
7925 }, .{
7926 .required_features = .{ .sse2, null, null, null },
7927 .src_constraints = .{
7928 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
7929 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
7930 },
7931 .patterns = &.{
7932 .{ .src = .{ .to_mut_sse, .mem } },
7933 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7934 .{ .src = .{ .to_mut_sse, .to_sse } },
7935 },
7936 .dst_temps = .{.{ .rc = .sse }},
7937 .each = .{ .once = &.{
7938 .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
7939 .{ ._, .p_w, .subus, .src0x, .src1x, ._, ._ },
7940 .{ ._, .p_w, .sub, .dst0x, .src0x, ._, ._ },
7941 } },
7942 }, .{
7943 .required_features = .{ .avx2, null, null, null },
7944 .src_constraints = .{
7945 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
7946 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
7947 },
7948 .patterns = &.{
7949 .{ .src = .{ .to_sse, .mem } },
7950 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7951 .{ .src = .{ .to_sse, .to_sse } },
7952 },
7953 .dst_temps = .{.{ .rc = .sse }},
7954 .each = .{ .once = &.{
7955 .{ ._, .vp_w, .minu, .dst0y, .src0y, .src1y, ._ },
7956 } },
7957 }, .{
7958 .required_features = .{ .avx2, null, null, null },
7959 .src_constraints = .{
7960 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
7961 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
7962 },
7963 .patterns = &.{
7964 .{ .src = .{ .to_mem, .to_mem } },
7965 },
7966 .extra_temps = .{
7967 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7968 .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
7969 .unused,
7970 .unused,
7971 .unused,
7972 .unused,
7973 .unused,
7974 .unused,
7975 .unused,
7976 },
7977 .dst_temps = .{.mem},
7978 .clobbers = .{ .eflags = true },
7979 .each = .{ .once = &.{
7980 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7981 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7982 .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
7983 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
7984 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7985 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7986 } },
7987 }, .{
7988 .required_features = .{ .avx, null, null, null },
7989 .src_constraints = .{
7990 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
7991 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
7992 },
7993 .patterns = &.{
7994 .{ .src = .{ .to_mem, .to_mem } },
7995 },
7996 .extra_temps = .{
7997 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7998 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
7999 .unused,
8000 .unused,
8001 .unused,
8002 .unused,
8003 .unused,
8004 .unused,
8005 .unused,
8006 },
8007 .dst_temps = .{.mem},
8008 .clobbers = .{ .eflags = true },
8009 .each = .{ .once = &.{
8010 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8011 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8012 .{ ._, .vp_w, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
8013 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8014 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8015 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8016 } },
8017 }, .{
8018 .required_features = .{ .sse4_1, null, null, null },
8019 .src_constraints = .{
8020 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
8021 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
8022 },
8023 .patterns = &.{
8024 .{ .src = .{ .to_mem, .to_mem } },
8025 },
8026 .extra_temps = .{
8027 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8028 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
8029 .unused,
8030 .unused,
8031 .unused,
8032 .unused,
8033 .unused,
8034 .unused,
8035 .unused,
8036 },
8037 .dst_temps = .{.mem},
8038 .clobbers = .{ .eflags = true },
8039 .each = .{ .once = &.{
8040 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8041 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8042 .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8043 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8044 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8045 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8046 } },
8047 }, .{
8048 .required_features = .{ .sse2, null, null, null },
8049 .src_constraints = .{
8050 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
8051 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
8052 },
8053 .patterns = &.{
8054 .{ .src = .{ .to_mem, .to_mem } },
8055 },
8056 .extra_temps = .{
8057 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8058 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
8059 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
8060 .unused,
8061 .unused,
8062 .unused,
8063 .unused,
8064 .unused,
8065 .unused,
8066 },
8067 .dst_temps = .{.mem},
8068 .clobbers = .{ .eflags = true },
8069 .each = .{ .once = &.{
8070 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8071 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8072 .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
8073 .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8074 .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ },
8075 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
8076 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8077 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8078 } },
8079 }, .{
8080 .required_features = .{ .cmov, null, null, null },
8081 .src_constraints = .{
8082 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
8083 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
8084 },
8085 .patterns = &.{
8086 .{ .src = .{ .to_mem, .to_mem } },
8087 },
8088 .extra_temps = .{
8089 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8090 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
8091 .unused,
8092 .unused,
8093 .unused,
8094 .unused,
8095 .unused,
8096 .unused,
8097 .unused,
8098 },
8099 .dst_temps = .{.mem},
8100 .clobbers = .{ .eflags = true },
8101 .each = .{ .once = &.{
8102 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8103 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
8104 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
8105 .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
8106 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
8107 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
8108 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8109 } },
8110 }, .{
8111 .src_constraints = .{
8112 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
67588113 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
67598114 },
67608115 .patterns = &.{
......@@ -6762,9 +8117,1161 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
67628117 },
67638118 .extra_temps = .{
67648119 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6765 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
8120 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
8121 .unused,
8122 .unused,
8123 .unused,
8124 .unused,
8125 .unused,
8126 .unused,
8127 .unused,
8128 },
8129 .dst_temps = .{.mem},
8130 .clobbers = .{ .eflags = true },
8131 .each = .{ .once = &.{
8132 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8133 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
8134 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
8135 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
8136 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
8137 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
8138 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
8139 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8140 } },
8141 }, .{
8142 .required_features = .{ .avx, null, null, null },
8143 .src_constraints = .{
8144 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
8145 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
8146 },
8147 .patterns = &.{
8148 .{ .src = .{ .to_sse, .mem } },
8149 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8150 .{ .src = .{ .to_sse, .to_sse } },
8151 },
8152 .dst_temps = .{.{ .rc = .sse }},
8153 .each = .{ .once = &.{
8154 .{ ._, .vp_d, .mins, .dst0x, .src0x, .src1x, ._ },
8155 } },
8156 }, .{
8157 .required_features = .{ .sse4_1, null, null, null },
8158 .src_constraints = .{
8159 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
8160 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
8161 },
8162 .patterns = &.{
8163 .{ .src = .{ .to_mut_sse, .mem } },
8164 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
8165 .{ .src = .{ .to_mut_sse, .to_sse } },
8166 },
8167 .dst_temps = .{.{ .ref = .src0 }},
8168 .each = .{ .once = &.{
8169 .{ ._, .p_d, .mins, .dst0x, .src1x, ._, ._ },
8170 } },
8171 }, .{
8172 .required_features = .{ .sse2, null, null, null },
8173 .src_constraints = .{
8174 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
8175 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
8176 },
8177 .patterns = &.{
8178 .{ .src = .{ .to_mut_sse, .mem } },
8179 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
8180 .{ .src = .{ .to_mut_sse, .to_sse } },
8181 },
8182 .dst_temps = .{.{ .rc = .sse }},
8183 .each = .{ .once = &.{
8184 .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ },
8185 .{ ._, .p_d, .cmpgt, .dst0x, .src0x, ._, ._ },
8186 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
8187 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
8188 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
8189 } },
8190 }, .{
8191 .required_features = .{ .avx2, null, null, null },
8192 .src_constraints = .{
8193 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
8194 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
8195 },
8196 .patterns = &.{
8197 .{ .src = .{ .to_sse, .mem } },
8198 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8199 .{ .src = .{ .to_sse, .to_sse } },
8200 },
8201 .dst_temps = .{.{ .rc = .sse }},
8202 .each = .{ .once = &.{
8203 .{ ._, .vp_d, .mins, .dst0y, .src0y, .src1y, ._ },
8204 } },
8205 }, .{
8206 .required_features = .{ .avx2, null, null, null },
8207 .src_constraints = .{
8208 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
8209 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
8210 },
8211 .patterns = &.{
8212 .{ .src = .{ .to_mem, .to_mem } },
8213 },
8214 .extra_temps = .{
8215 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8216 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
8217 .unused,
8218 .unused,
8219 .unused,
8220 .unused,
8221 .unused,
8222 .unused,
8223 .unused,
8224 },
8225 .dst_temps = .{.mem},
8226 .clobbers = .{ .eflags = true },
8227 .each = .{ .once = &.{
8228 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8229 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
8230 .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
8231 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
8232 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8233 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8234 } },
8235 }, .{
8236 .required_features = .{ .avx, null, null, null },
8237 .src_constraints = .{
8238 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
8239 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
8240 },
8241 .patterns = &.{
8242 .{ .src = .{ .to_mem, .to_mem } },
8243 },
8244 .extra_temps = .{
8245 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8246 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
8247 .unused,
8248 .unused,
8249 .unused,
8250 .unused,
8251 .unused,
8252 .unused,
8253 .unused,
8254 },
8255 .dst_temps = .{.mem},
8256 .clobbers = .{ .eflags = true },
8257 .each = .{ .once = &.{
8258 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8259 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8260 .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
8261 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8262 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8263 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8264 } },
8265 }, .{
8266 .required_features = .{ .sse4_1, null, null, null },
8267 .src_constraints = .{
8268 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
8269 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
8270 },
8271 .patterns = &.{
8272 .{ .src = .{ .to_mem, .to_mem } },
8273 },
8274 .extra_temps = .{
8275 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8276 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
8277 .unused,
8278 .unused,
8279 .unused,
8280 .unused,
8281 .unused,
8282 .unused,
8283 .unused,
8284 },
8285 .dst_temps = .{.mem},
8286 .clobbers = .{ .eflags = true },
8287 .each = .{ .once = &.{
8288 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8289 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8290 .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8291 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8292 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8293 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8294 } },
8295 }, .{
8296 .required_features = .{ .sse2, null, null, null },
8297 .src_constraints = .{
8298 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
8299 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
8300 },
8301 .patterns = &.{
8302 .{ .src = .{ .to_mem, .to_mem } },
8303 },
8304 .extra_temps = .{
8305 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8306 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
8307 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
8308 .unused,
8309 .unused,
8310 .unused,
8311 .unused,
8312 .unused,
8313 .unused,
8314 },
8315 .dst_temps = .{.mem},
8316 .clobbers = .{ .eflags = true },
8317 .each = .{ .once = &.{
8318 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8319 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8320 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8321 .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ },
8322 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },
8323 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8324 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
8325 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8326 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8327 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8328 } },
8329 }, .{
8330 .required_features = .{ .cmov, null, null, null },
8331 .src_constraints = .{
8332 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
8333 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
8334 },
8335 .patterns = &.{
8336 .{ .src = .{ .to_mem, .to_mem } },
8337 },
8338 .extra_temps = .{
8339 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8340 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
8341 .unused,
8342 .unused,
8343 .unused,
8344 .unused,
8345 .unused,
8346 .unused,
8347 .unused,
8348 },
8349 .dst_temps = .{.mem},
8350 .clobbers = .{ .eflags = true },
8351 .each = .{ .once = &.{
8352 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8353 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
8354 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8355 .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8356 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
8357 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
8358 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8359 } },
8360 }, .{
8361 .src_constraints = .{
8362 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
8363 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
8364 },
8365 .patterns = &.{
8366 .{ .src = .{ .to_mem, .to_mem } },
8367 },
8368 .extra_temps = .{
8369 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8370 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
8371 .unused,
8372 .unused,
8373 .unused,
8374 .unused,
8375 .unused,
8376 .unused,
8377 .unused,
8378 },
8379 .dst_temps = .{.mem},
8380 .clobbers = .{ .eflags = true },
8381 .each = .{ .once = &.{
8382 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8383 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
8384 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8385 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
8386 .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8387 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
8388 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
8389 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8390 } },
8391 }, .{
8392 .required_features = .{ .avx, null, null, null },
8393 .src_constraints = .{
8394 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8395 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8396 },
8397 .patterns = &.{
8398 .{ .src = .{ .to_sse, .mem } },
8399 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8400 .{ .src = .{ .to_sse, .to_sse } },
8401 },
8402 .dst_temps = .{.{ .rc = .sse }},
8403 .each = .{ .once = &.{
8404 .{ ._, .vp_d, .minu, .dst0x, .src0x, .src1x, ._ },
8405 } },
8406 }, .{
8407 .required_features = .{ .sse4_1, null, null, null },
8408 .src_constraints = .{
8409 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8410 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8411 },
8412 .patterns = &.{
8413 .{ .src = .{ .to_mut_sse, .mem } },
8414 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
8415 .{ .src = .{ .to_mut_sse, .to_sse } },
8416 },
8417 .dst_temps = .{.{ .ref = .src0 }},
8418 .each = .{ .once = &.{
8419 .{ ._, .p_d, .minu, .dst0x, .src1x, ._, ._ },
8420 } },
8421 }, .{
8422 .required_features = .{ .sse2, null, null, null },
8423 .src_constraints = .{
8424 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8425 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8426 },
8427 .patterns = &.{
8428 .{ .src = .{ .to_mut_sse, .mem } },
8429 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
8430 .{ .src = .{ .to_mut_sse, .to_sse } },
8431 },
8432 .extra_temps = .{
8433 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8434 .{ .type = .vector_4_u32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
8435 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
8436 .unused,
8437 .unused,
8438 .unused,
8439 .unused,
8440 .unused,
8441 .unused,
8442 },
8443 .dst_temps = .{.{ .rc = .sse }},
8444 .each = .{ .once = &.{
8445 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8446 .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ },
8447 .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
8448 .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ },
8449 .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ },
8450 .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ },
8451 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
8452 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
8453 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
8454 } },
8455 }, .{
8456 .required_features = .{ .avx2, null, null, null },
8457 .src_constraints = .{
8458 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
8459 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
8460 },
8461 .patterns = &.{
8462 .{ .src = .{ .to_sse, .mem } },
8463 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8464 .{ .src = .{ .to_sse, .to_sse } },
8465 },
8466 .dst_temps = .{.{ .rc = .sse }},
8467 .each = .{ .once = &.{
8468 .{ ._, .vp_d, .minu, .dst0y, .src0y, .src1y, ._ },
8469 } },
8470 }, .{
8471 .required_features = .{ .avx2, null, null, null },
8472 .src_constraints = .{
8473 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
8474 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
8475 },
8476 .patterns = &.{
8477 .{ .src = .{ .to_mem, .to_mem } },
8478 },
8479 .extra_temps = .{
8480 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8481 .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
8482 .unused,
8483 .unused,
8484 .unused,
8485 .unused,
8486 .unused,
8487 .unused,
8488 .unused,
8489 },
8490 .dst_temps = .{.mem},
8491 .clobbers = .{ .eflags = true },
8492 .each = .{ .once = &.{
8493 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8494 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
8495 .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
8496 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
8497 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8498 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8499 } },
8500 }, .{
8501 .required_features = .{ .avx, null, null, null },
8502 .src_constraints = .{
8503 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8504 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8505 },
8506 .patterns = &.{
8507 .{ .src = .{ .to_mem, .to_mem } },
8508 },
8509 .extra_temps = .{
8510 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8511 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
8512 .unused,
8513 .unused,
8514 .unused,
8515 .unused,
8516 .unused,
8517 .unused,
8518 .unused,
8519 },
8520 .dst_temps = .{.mem},
8521 .clobbers = .{ .eflags = true },
8522 .each = .{ .once = &.{
8523 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8524 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8525 .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
8526 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8527 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8528 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8529 } },
8530 }, .{
8531 .required_features = .{ .sse4_1, null, null, null },
8532 .src_constraints = .{
8533 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8534 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8535 },
8536 .patterns = &.{
8537 .{ .src = .{ .to_mem, .to_mem } },
8538 },
8539 .extra_temps = .{
8540 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8541 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
8542 .unused,
8543 .unused,
8544 .unused,
8545 .unused,
8546 .unused,
8547 .unused,
8548 .unused,
8549 },
8550 .dst_temps = .{.mem},
8551 .clobbers = .{ .eflags = true },
8552 .each = .{ .once = &.{
8553 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8554 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8555 .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8556 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8557 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8558 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8559 } },
8560 }, .{
8561 .required_features = .{ .sse2, null, null, null },
8562 .src_constraints = .{
8563 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8564 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
8565 },
8566 .patterns = &.{
8567 .{ .src = .{ .to_mem, .to_mem } },
8568 },
8569 .extra_temps = .{
8570 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8571 .{ .type = .vector_4_u32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
8572 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
8573 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
8574 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
8575 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
8576 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
8577 .unused,
8578 .unused,
8579 },
8580 .dst_temps = .{.mem},
8581 .clobbers = .{ .eflags = true },
8582 .each = .{ .once = &.{
8583 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8584 .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
8585 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8586 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8587 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8588 .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
8589 .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ },
8590 .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ },
8591 .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ },
8592 .{ ._, .p_d, .cmpgt, .tmp5x, .tmp6x, ._, ._ },
8593 .{ ._, .p_, .@"and", .tmp4x, .tmp5x, ._, ._ },
8594 .{ ._, .p_, .andn, .tmp5x, .tmp3x, ._, ._ },
8595 .{ ._, .p_, .@"or", .tmp4x, .tmp5x, ._, ._ },
8596 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp4x, ._, ._ },
8597 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8598 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8599 } },
8600 }, .{
8601 .required_features = .{ .cmov, null, null, null },
8602 .src_constraints = .{
8603 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
8604 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
8605 },
8606 .patterns = &.{
8607 .{ .src = .{ .to_mem, .to_mem } },
8608 },
8609 .extra_temps = .{
8610 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8611 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8612 .unused,
8613 .unused,
8614 .unused,
8615 .unused,
8616 .unused,
8617 .unused,
8618 .unused,
8619 },
8620 .dst_temps = .{.mem},
8621 .clobbers = .{ .eflags = true },
8622 .each = .{ .once = &.{
8623 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8624 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
8625 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8626 .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8627 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
8628 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
8629 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8630 } },
8631 }, .{
8632 .src_constraints = .{
8633 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
8634 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
8635 },
8636 .patterns = &.{
8637 .{ .src = .{ .to_mem, .to_mem } },
8638 },
8639 .extra_temps = .{
8640 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8641 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8642 .unused,
8643 .unused,
8644 .unused,
8645 .unused,
8646 .unused,
8647 .unused,
8648 .unused,
8649 },
8650 .dst_temps = .{.mem},
8651 .clobbers = .{ .eflags = true },
8652 .each = .{ .once = &.{
8653 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8654 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
8655 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8656 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
8657 .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8658 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
8659 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
8660 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8661 } },
8662 }, .{
8663 .required_features = .{ .avx, null, null, null },
8664 .src_constraints = .{
8665 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
8666 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
8667 },
8668 .patterns = &.{
8669 .{ .src = .{ .to_sse, .mem } },
8670 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8671 .{ .src = .{ .to_sse, .to_sse } },
8672 },
8673 .dst_temps = .{.{ .rc = .sse }},
8674 .each = .{ .once = &.{
8675 .{ ._, .vp_q, .cmpgt, .dst0x, .src0x, .src1x, ._ },
8676 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },
8677 } },
8678 }, .{
8679 .required_features = .{ .sse4_2, null, null, null },
8680 .src_constraints = .{
8681 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
8682 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
8683 },
8684 .patterns = &.{
8685 .{ .src = .{ .to_mut_sse, .mem } },
8686 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
8687 .{ .src = .{ .to_mut_sse, .to_sse } },
8688 },
8689 .extra_temps = .{
8690 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
8691 .unused,
8692 .unused,
8693 .unused,
8694 .unused,
8695 .unused,
8696 .unused,
8697 .unused,
8698 .unused,
8699 },
8700 .dst_temps = .{.{ .ref = .src0 }},
8701 .each = .{ .once = &.{
8702 .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
8703 .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ },
8704 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ },
8705 } },
8706 }, .{
8707 .required_features = .{ .avx2, null, null, null },
8708 .src_constraints = .{
8709 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
8710 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
8711 },
8712 .patterns = &.{
8713 .{ .src = .{ .to_sse, .mem } },
8714 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8715 .{ .src = .{ .to_sse, .to_sse } },
8716 },
8717 .dst_temps = .{.{ .rc = .sse }},
8718 .each = .{ .once = &.{
8719 .{ ._, .vp_q, .cmpgt, .dst0y, .src0y, .src1y, ._ },
8720 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },
8721 } },
8722 }, .{
8723 .required_features = .{ .avx2, null, null, null },
8724 .src_constraints = .{
8725 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
8726 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
8727 },
8728 .patterns = &.{
8729 .{ .src = .{ .to_mem, .to_mem } },
8730 },
8731 .extra_temps = .{
8732 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8733 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
8734 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
8735 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
8736 .unused,
8737 .unused,
8738 .unused,
8739 .unused,
8740 .unused,
8741 },
8742 .dst_temps = .{.mem},
8743 .clobbers = .{ .eflags = true },
8744 .each = .{ .once = &.{
8745 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8746 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
8747 .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
8748 .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp1y, .tmp2y, ._ },
8749 .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
8750 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
8751 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8752 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8753 } },
8754 }, .{
8755 .required_features = .{ .avx, null, null, null },
8756 .src_constraints = .{
8757 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
8758 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
8759 },
8760 .patterns = &.{
8761 .{ .src = .{ .to_mem, .to_mem } },
8762 },
8763 .extra_temps = .{
8764 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8765 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
8766 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
8767 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
8768 .unused,
8769 .unused,
8770 .unused,
8771 .unused,
8772 .unused,
8773 },
8774 .dst_temps = .{.mem},
8775 .clobbers = .{ .eflags = true },
8776 .each = .{ .once = &.{
8777 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8778 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8779 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8780 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ },
8781 .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x },
8782 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8783 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8784 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8785 } },
8786 }, .{
8787 .required_features = .{ .sse4_2, null, null, null },
8788 .src_constraints = .{
8789 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
8790 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
8791 },
8792 .patterns = &.{
8793 .{ .src = .{ .to_mem, .to_mem } },
8794 },
8795 .extra_temps = .{
8796 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8797 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
8798 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
8799 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
8800 .unused,
8801 .unused,
8802 .unused,
8803 .unused,
8804 .unused,
8805 },
8806 .dst_temps = .{.mem},
8807 .clobbers = .{ .eflags = true },
8808 .each = .{ .once = &.{
8809 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8810 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8811 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8812 .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ },
8813 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
8814 .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ },
8815 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8816 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8817 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8818 } },
8819 }, .{
8820 .required_features = .{ .@"64bit", .cmov, null, null },
8821 .src_constraints = .{
8822 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
8823 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
8824 },
8825 .patterns = &.{
8826 .{ .src = .{ .to_mem, .to_mem } },
8827 },
8828 .extra_temps = .{
8829 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8830 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
8831 .unused,
8832 .unused,
8833 .unused,
8834 .unused,
8835 .unused,
8836 .unused,
8837 .unused,
8838 },
8839 .dst_temps = .{.mem},
8840 .clobbers = .{ .eflags = true },
8841 .each = .{ .once = &.{
8842 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8843 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8844 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8845 .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8846 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
8847 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8848 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8849 } },
8850 }, .{
8851 .required_features = .{ .@"64bit", null, null, null },
8852 .src_constraints = .{
8853 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
8854 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
8855 },
8856 .patterns = &.{
8857 .{ .src = .{ .to_mem, .to_mem } },
8858 },
8859 .extra_temps = .{
8860 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8861 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
8862 .unused,
8863 .unused,
8864 .unused,
8865 .unused,
8866 .unused,
8867 .unused,
8868 .unused,
8869 },
8870 .dst_temps = .{.mem},
8871 .clobbers = .{ .eflags = true },
8872 .each = .{ .once = &.{
8873 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8874 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8875 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8876 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
8877 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8878 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
8879 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8880 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8881 } },
8882 }, .{
8883 .required_features = .{ .avx, null, null, null },
8884 .src_constraints = .{
8885 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
8886 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
8887 },
8888 .patterns = &.{
8889 .{ .src = .{ .to_sse, .mem } },
8890 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8891 .{ .src = .{ .to_sse, .to_sse } },
8892 },
8893 .extra_temps = .{
8894 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8895 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
8896 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
8897 .unused,
8898 .unused,
8899 .unused,
8900 .unused,
8901 .unused,
8902 .unused,
8903 },
8904 .dst_temps = .{.{ .rc = .sse }},
8905 .each = .{ .once = &.{
8906 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8907 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
8908 .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ },
8909 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ },
8910 .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ },
8911 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },
8912 } },
8913 }, .{
8914 .required_features = .{ .sse4_2, null, null, null },
8915 .src_constraints = .{
8916 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
8917 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
8918 },
8919 .patterns = &.{
8920 .{ .src = .{ .to_mut_sse, .mem } },
8921 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
8922 .{ .src = .{ .to_mut_sse, .to_sse } },
8923 },
8924 .extra_temps = .{
8925 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8926 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
8927 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
8928 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
8929 .unused,
8930 .unused,
8931 .unused,
8932 .unused,
8933 .unused,
8934 },
8935 .dst_temps = .{.{ .ref = .src0 }},
8936 .each = .{ .once = &.{
8937 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8938 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
8939 .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
8940 .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ },
8941 .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },
8942 .{ ._, .p_q, .cmpgt, .tmp2x, .tmp3x, ._, ._ },
8943 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp2x, ._ },
8944 } },
8945 }, .{
8946 .required_features = .{ .avx2, null, null, null },
8947 .src_constraints = .{
8948 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
8949 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
8950 },
8951 .patterns = &.{
8952 .{ .src = .{ .to_sse, .mem } },
8953 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
8954 .{ .src = .{ .to_sse, .to_sse } },
8955 },
8956 .extra_temps = .{
8957 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8958 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
8959 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
8960 .unused,
8961 .unused,
8962 .unused,
8963 .unused,
8964 .unused,
8965 .unused,
8966 },
8967 .dst_temps = .{.{ .rc = .sse }},
8968 .each = .{ .once = &.{
8969 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8970 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },
8971 .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ },
8972 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ },
8973 .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ },
8974 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },
8975 } },
8976 }, .{
8977 .required_features = .{ .avx2, null, null, null },
8978 .src_constraints = .{
8979 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
8980 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
8981 },
8982 .patterns = &.{
8983 .{ .src = .{ .to_mem, .to_mem } },
8984 },
8985 .extra_temps = .{
8986 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8987 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
8988 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
8989 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
8990 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
8991 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
8992 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
8993 .unused,
8994 .unused,
8995 },
8996 .dst_temps = .{.mem},
8997 .clobbers = .{ .eflags = true },
8998 .each = .{ .once = &.{
8999 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9000 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },
9001 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9002 .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
9003 .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
9004 .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ },
9005 .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ },
9006 .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ },
9007 .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y },
9008 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
9009 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
9010 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9011 } },
9012 }, .{
9013 .required_features = .{ .avx, null, null, null },
9014 .src_constraints = .{
9015 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
9016 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
9017 },
9018 .patterns = &.{
9019 .{ .src = .{ .to_mem, .to_mem } },
9020 },
9021 .extra_temps = .{
9022 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9023 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
9024 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9025 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9026 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9027 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9028 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9029 .unused,
9030 .unused,
9031 },
9032 .dst_temps = .{.mem},
9033 .clobbers = .{ .eflags = true },
9034 .each = .{ .once = &.{
9035 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9036 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
9037 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9038 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9039 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9040 .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ },
9041 .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ },
9042 .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ },
9043 .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x },
9044 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
9045 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9046 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9047 } },
9048 }, .{
9049 .required_features = .{ .sse4_2, null, null, null },
9050 .src_constraints = .{
9051 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
9052 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
9053 },
9054 .patterns = &.{
9055 .{ .src = .{ .to_mem, .to_mem } },
9056 },
9057 .extra_temps = .{
9058 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9059 .{ .type = .u64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
9060 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9061 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9062 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9063 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
9064 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
9065 .unused,
9066 .unused,
9067 },
9068 .dst_temps = .{.mem},
9069 .clobbers = .{ .eflags = true },
9070 .each = .{ .once = &.{
9071 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9072 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
9073 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9074 .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ },
9075 .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ },
9076 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9077 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9078 .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ },
9079 .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ },
9080 .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ },
9081 .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ },
9082 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
9083 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9084 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9085 } },
9086 }, .{
9087 .required_features = .{ .@"64bit", .cmov, null, null },
9088 .src_constraints = .{
9089 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
9090 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
9091 },
9092 .patterns = &.{
9093 .{ .src = .{ .to_mem, .to_mem } },
9094 },
9095 .extra_temps = .{
9096 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9097 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9098 .unused,
9099 .unused,
9100 .unused,
9101 .unused,
9102 .unused,
9103 .unused,
9104 .unused,
9105 },
9106 .dst_temps = .{.mem},
9107 .clobbers = .{ .eflags = true },
9108 .each = .{ .once = &.{
9109 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9110 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
9111 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9112 .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9113 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
9114 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9115 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9116 } },
9117 }, .{
9118 .required_features = .{ .@"64bit", null, null, null },
9119 .src_constraints = .{
9120 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
9121 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
9122 },
9123 .patterns = &.{
9124 .{ .src = .{ .to_mem, .to_mem } },
9125 },
9126 .extra_temps = .{
9127 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9128 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9129 .unused,
9130 .unused,
9131 .unused,
9132 .unused,
9133 .unused,
9134 .unused,
9135 .unused,
9136 },
9137 .dst_temps = .{.mem},
9138 .clobbers = .{ .eflags = true },
9139 .each = .{ .once = &.{
9140 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9141 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
9142 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9143 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
9144 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9145 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
9146 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9147 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9148 } },
9149 }, .{
9150 .required_features = .{ .@"64bit", .cmov, null, null },
9151 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },
9152 .patterns = &.{
9153 .{ .src = .{ .to_mem, .to_mem } },
9154 },
9155 .extra_temps = .{
9156 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9157 .{ .type = .isize, .kind = .{ .reg = .rsi } },
9158 .{ .type = .u64, .kind = .{ .reg = .rdi } },
9159 .{ .type = .u64, .kind = .{ .reg = .rcx } },
9160 .unused,
9161 .unused,
9162 .unused,
9163 .unused,
9164 .unused,
9165 },
9166 .dst_temps = .{.mem},
9167 .clobbers = .{ .eflags = true },
9168 .each = .{ .once = &.{
9169 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9170 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },
9171 .{ ._, ._c, .cl, ._, ._, ._, ._ },
9172 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
9173 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9174 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
9175 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
9176 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
9177 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
9178 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9179 .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
9180 .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
9181 .{ ._, ._ge, .cmov, .tmp1p, .tmp2p, ._, ._ },
9182 .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
9183 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
9184 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
9185 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9186 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9187 } },
9188 }, .{
9189 .required_features = .{ .@"64bit", null, null, null },
9190 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },
9191 .patterns = &.{
9192 .{ .src = .{ .to_mem, .to_mem } },
9193 },
9194 .extra_temps = .{
9195 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9196 .{ .type = .isize, .kind = .{ .reg = .rsi } },
9197 .{ .type = .u64, .kind = .{ .reg = .rdi } },
9198 .{ .type = .u64, .kind = .{ .reg = .rcx } },
9199 .unused,
9200 .unused,
9201 .unused,
9202 .unused,
9203 .unused,
9204 },
9205 .dst_temps = .{.mem},
9206 .clobbers = .{ .eflags = true },
9207 .each = .{ .once = &.{
9208 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9209 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },
9210 .{ ._, ._c, .cl, ._, ._, ._, ._ },
9211 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
9212 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9213 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
9214 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
9215 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
9216 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
9217 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9218 .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
9219 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
9220 .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
9221 .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
9222 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
9223 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
9224 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9225 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9226 } },
9227 }, .{
9228 .required_features = .{ .@"64bit", .cmov, null, null },
9229 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },
9230 .patterns = &.{
9231 .{ .src = .{ .to_mem, .to_mem } },
9232 },
9233 .extra_temps = .{
9234 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9235 .{ .type = .isize, .kind = .{ .reg = .rsi } },
9236 .{ .type = .u64, .kind = .{ .reg = .rdi } },
9237 .{ .type = .u64, .kind = .{ .reg = .rcx } },
9238 .unused,
9239 .unused,
9240 .unused,
67669241 .unused,
67679242 .unused,
9243 },
9244 .dst_temps = .{.mem},
9245 .clobbers = .{ .eflags = true },
9246 .each = .{ .once = &.{
9247 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9248 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
9249 .{ ._, ._c, .cl, ._, ._, ._, ._ },
9250 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
9251 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9252 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
9253 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
9254 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
9255 .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ },
9256 .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
9257 .{ ._, ._ae, .cmov, .tmp1p, .tmp2p, ._, ._ },
9258 .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
9259 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
9260 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
9261 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
9262 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
9263 } },
9264 }, .{
9265 .required_features = .{ .@"64bit", null, null, null },
9266 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },
9267 .patterns = &.{
9268 .{ .src = .{ .to_mem, .to_mem } },
9269 },
9270 .extra_temps = .{
9271 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9272 .{ .type = .isize, .kind = .{ .reg = .rsi } },
9273 .{ .type = .u64, .kind = .{ .reg = .rdi } },
9274 .{ .type = .u64, .kind = .{ .reg = .rcx } },
67689275 .unused,
67699276 .unused,
67709277 .unused,
......@@ -6775,92 +9282,155 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
67759282 .clobbers = .{ .eflags = true },
67769283 .each = .{ .once = &.{
67779284 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6778 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6779 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
9285 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
9286 .{ ._, ._c, .cl, ._, ._, ._, ._ },
9287 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
9288 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
9289 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
9290 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
9291 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
9292 .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ },
67809293 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
6781 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6782 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
6783 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
6784 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9294 .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
9295 .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
9296 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
9297 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
9298 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
9299 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
67859300 } },
67869301 }, .{
6787 .required_features = .{ .avx, null, null, null },
9302 .required_features = .{ .f16c, null, null, null },
67889303 .src_constraints = .{
6789 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6790 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
9304 .{ .scalar_float = .{ .of = .word, .is = .word } },
9305 .{ .scalar_float = .{ .of = .word, .is = .word } },
67919306 },
67929307 .patterns = &.{
6793 .{ .src = .{ .to_sse, .mem } },
6794 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
67959308 .{ .src = .{ .to_sse, .to_sse } },
67969309 },
6797 .dst_temps = .{.{ .rc = .sse }},
9310 .extra_temps = .{
9311 .{ .type = .f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
9312 .{ .type = .f16, .kind = .{ .rc = .sse } },
9313 .unused,
9314 .unused,
9315 .unused,
9316 .unused,
9317 .unused,
9318 .unused,
9319 .unused,
9320 },
9321 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
67989322 .each = .{ .once = &.{
6799 .{ ._, .vp_d, .mins, .dst0x, .src0x, .src1x, ._ },
9323 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
9324 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
9325 .{ ._, .v_ss, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) },
9326 .{ ._, .v_ss, .min, .dst0x, .tmp0x, .dst0x, ._ },
9327 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x },
9328 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
68009329 } },
68019330 }, .{
6802 .required_features = .{ .sse4_1, null, null, null },
9331 .required_features = .{ .sse, null, null, null },
68039332 .src_constraints = .{
6804 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6805 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
9333 .{ .scalar_float = .{ .of = .word, .is = .word } },
9334 .{ .scalar_float = .{ .of = .word, .is = .word } },
68069335 },
68079336 .patterns = &.{
6808 .{ .src = .{ .to_mut_sse, .mem } },
6809 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6810 .{ .src = .{ .to_mut_sse, .to_sse } },
9337 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
9338 },
9339 .call_frame = .{ .alignment = .@"16" },
9340 .extra_temps = .{
9341 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
9342 .unused,
9343 .unused,
9344 .unused,
9345 .unused,
9346 .unused,
9347 .unused,
9348 .unused,
9349 .unused,
68119350 },
68129351 .dst_temps = .{.{ .ref = .src0 }},
9352 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
68139353 .each = .{ .once = &.{
6814 .{ ._, .p_d, .mins, .dst0x, .src1x, ._, ._ },
9354 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
68159355 } },
68169356 }, .{
6817 .required_features = .{ .sse2, null, null, null },
9357 .required_features = .{ .f16c, null, null, null },
68189358 .src_constraints = .{
6819 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6820 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
9359 .{ .scalar_float = .{ .of = .qword, .is = .word } },
9360 .{ .scalar_float = .{ .of = .qword, .is = .word } },
68219361 },
68229362 .patterns = &.{
6823 .{ .src = .{ .to_mut_sse, .mem } },
6824 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6825 .{ .src = .{ .to_mut_sse, .to_sse } },
9363 .{ .src = .{ .mem, .mem } },
9364 .{ .src = .{ .to_sse, .mem } },
9365 .{ .src = .{ .mem, .to_sse } },
9366 .{ .src = .{ .to_sse, .to_sse } },
68269367 },
6827 .dst_temps = .{.{ .rc = .sse }},
9368 .extra_temps = .{
9369 .{ .type = .vector_4_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
9370 .{ .type = .vector_4_f16, .kind = .{ .rc = .sse } },
9371 .unused,
9372 .unused,
9373 .unused,
9374 .unused,
9375 .unused,
9376 .unused,
9377 .unused,
9378 },
9379 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
68289380 .each = .{ .once = &.{
6829 .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ },
6830 .{ ._, .p_d, .cmpgt, .dst0x, .src0x, ._, ._ },
6831 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
6832 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
6833 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
9381 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
9382 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
9383 .{ ._, .v_ps, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) },
9384 .{ ._, .v_ps, .min, .dst0x, .tmp0x, .dst0x, ._ },
9385 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x },
9386 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
68349387 } },
68359388 }, .{
6836 .required_features = .{ .avx2, null, null, null },
9389 .required_features = .{ .f16c, null, null, null },
68379390 .src_constraints = .{
6838 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
6839 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
9391 .{ .scalar_float = .{ .of = .xword, .is = .word } },
9392 .{ .scalar_float = .{ .of = .xword, .is = .word } },
68409393 },
68419394 .patterns = &.{
9395 .{ .src = .{ .mem, .mem } },
68429396 .{ .src = .{ .to_sse, .mem } },
6843 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
9397 .{ .src = .{ .mem, .to_sse } },
68449398 .{ .src = .{ .to_sse, .to_sse } },
68459399 },
6846 .dst_temps = .{.{ .rc = .sse }},
9400 .extra_temps = .{
9401 .{ .type = .vector_8_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
9402 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
9403 .unused,
9404 .unused,
9405 .unused,
9406 .unused,
9407 .unused,
9408 .unused,
9409 .unused,
9410 },
9411 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
68479412 .each = .{ .once = &.{
6848 .{ ._, .vp_d, .mins, .dst0y, .src0y, .src1y, ._ },
9413 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
9414 .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
9415 .{ ._, .v_ps, .cmp, .tmp1y, .dst0y, .dst0y, .vp(.unord) },
9416 .{ ._, .v_ps, .min, .dst0y, .tmp0y, .dst0y, ._ },
9417 .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp0y, .tmp1y },
9418 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0y, .rm(.{}), ._ },
68499419 } },
68509420 }, .{
6851 .required_features = .{ .avx2, null, null, null },
9421 .required_features = .{ .f16c, null, null, null },
68529422 .src_constraints = .{
6853 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
6854 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
9423 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
9424 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
68559425 },
68569426 .patterns = &.{
68579427 .{ .src = .{ .to_mem, .to_mem } },
68589428 },
68599429 .extra_temps = .{
68609430 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6861 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
6862 .unused,
6863 .unused,
9431 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
9432 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
9433 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
68649434 .unused,
68659435 .unused,
68669436 .unused,
......@@ -6871,26 +9441,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
68719441 .clobbers = .{ .eflags = true },
68729442 .each = .{ .once = &.{
68739443 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6874 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6875 .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
6876 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6877 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
9444 .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9445 .{ ._, .v_ps, .cvtph2, .tmp2y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9446 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
9447 .{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
9448 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
9449 .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_size), .tmp1y, .rm(.{}), ._ },
9450 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
68789451 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
68799452 } },
68809453 }, .{
68819454 .required_features = .{ .avx, null, null, null },
68829455 .src_constraints = .{
6883 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6884 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
9456 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9457 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
68859458 },
68869459 .patterns = &.{
68879460 .{ .src = .{ .to_mem, .to_mem } },
68889461 },
9462 .call_frame = .{ .alignment = .@"16" },
68899463 .extra_temps = .{
68909464 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6891 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
6892 .unused,
6893 .unused,
9465 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9466 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9467 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
68949468 .unused,
68959469 .unused,
68969470 .unused,
......@@ -6898,29 +9472,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
68989472 .unused,
68999473 },
69009474 .dst_temps = .{.mem},
6901 .clobbers = .{ .eflags = true },
6902 .each = .{ .once = &.{
6903 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6904 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6905 .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
6906 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6907 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9475 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9476 .each = .{ .once = &.{
9477 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9478 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
9479 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
9480 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
9481 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9482 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
9483 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
69089484 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
69099485 } },
69109486 }, .{
69119487 .required_features = .{ .sse4_1, null, null, null },
69129488 .src_constraints = .{
6913 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6914 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
9489 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9490 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
69159491 },
69169492 .patterns = &.{
69179493 .{ .src = .{ .to_mem, .to_mem } },
69189494 },
9495 .call_frame = .{ .alignment = .@"16" },
69199496 .extra_temps = .{
69209497 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6921 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
6922 .unused,
6923 .unused,
9498 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9499 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9500 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
69249501 .unused,
69259502 .unused,
69269503 .unused,
......@@ -6928,91 +9505,103 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
69289505 .unused,
69299506 },
69309507 .dst_temps = .{.mem},
6931 .clobbers = .{ .eflags = true },
6932 .each = .{ .once = &.{
6933 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6934 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6935 .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6936 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6937 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9508 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9509 .each = .{ .once = &.{
9510 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9511 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
9512 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
9513 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
9514 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
9515 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9516 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
9517 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
69389518 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
69399519 } },
69409520 }, .{
69419521 .required_features = .{ .sse2, null, null, null },
69429522 .src_constraints = .{
6943 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6944 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
9523 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9524 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
69459525 },
69469526 .patterns = &.{
69479527 .{ .src = .{ .to_mem, .to_mem } },
69489528 },
9529 .call_frame = .{ .alignment = .@"16" },
69499530 .extra_temps = .{
69509531 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6951 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
6952 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
6953 .unused,
6954 .unused,
9532 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9533 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9534 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
9535 .{ .type = .f16, .kind = .{ .reg = .ax } },
69559536 .unused,
69569537 .unused,
69579538 .unused,
69589539 .unused,
69599540 },
69609541 .dst_temps = .{.mem},
6961 .clobbers = .{ .eflags = true },
6962 .each = .{ .once = &.{
6963 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6964 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6965 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6966 .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ },
6967 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },
6968 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6969 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
6970 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6971 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9542 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9543 .each = .{ .once = &.{
9544 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9545 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
9546 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
9547 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
9548 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
9549 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9550 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
9551 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
9552 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
69729553 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
69739554 } },
69749555 }, .{
6975 .required_features = .{ .cmov, null, null, null },
9556 .required_features = .{ .sse, null, null, null },
69769557 .src_constraints = .{
6977 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
6978 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
9558 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
9559 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
69799560 },
69809561 .patterns = &.{
69819562 .{ .src = .{ .to_mem, .to_mem } },
69829563 },
9564 .call_frame = .{ .alignment = .@"16" },
69839565 .extra_temps = .{
69849566 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6985 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
6986 .unused,
6987 .unused,
6988 .unused,
6989 .unused,
9567 .{ .type = .f16, .kind = .{ .reg = .eax } },
9568 .{ .type = .f32, .kind = .mem },
9569 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9570 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
9571 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
69909572 .unused,
69919573 .unused,
69929574 .unused,
69939575 },
69949576 .dst_temps = .{.mem},
6995 .clobbers = .{ .eflags = true },
9577 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
69969578 .each = .{ .once = &.{
6997 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6998 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
6999 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7000 .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7001 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
7002 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
9579 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9580 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
9581 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
9582 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
9583 .{ ._, ._, .movzx, .tmp1d, .memia(.src1w, .tmp0, .add_size), ._, ._ },
9584 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
9585 .{ ._, ._ss, .mov, .tmp4x, .mem(.tmp2d), ._, ._ },
9586 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
9587 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
9588 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
9589 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
9590 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
70039591 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
70049592 } },
70059593 }, .{
9594 .required_features = .{ .avx, null, null, null },
70069595 .src_constraints = .{
7007 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
7008 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
9596 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
9597 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
70099598 },
70109599 .patterns = &.{
7011 .{ .src = .{ .to_mem, .to_mem } },
9600 .{ .src = .{ .to_sse, .to_sse } },
70129601 },
70139602 .extra_temps = .{
7014 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7015 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
9603 .{ .type = .f32, .kind = .{ .rc = .sse } },
9604 .unused,
70169605 .unused,
70179606 .unused,
70189607 .unused,
......@@ -7021,63 +9610,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
70219610 .unused,
70229611 .unused,
70239612 },
7024 .dst_temps = .{.mem},
7025 .clobbers = .{ .eflags = true },
9613 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
70269614 .each = .{ .once = &.{
7027 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7028 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
7029 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7030 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7031 .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7032 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
7033 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
7034 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9615 .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
9616 .{ ._, .v_ss, .min, .dst0x, .src1x, .src0x, ._ },
9617 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
70359618 } },
70369619 }, .{
7037 .required_features = .{ .avx, null, null, null },
9620 .required_features = .{ .sse4_1, null, null, null },
70389621 .src_constraints = .{
7039 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7040 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
9622 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
9623 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
70419624 },
70429625 .patterns = &.{
7043 .{ .src = .{ .to_sse, .mem } },
7044 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7045 .{ .src = .{ .to_sse, .to_sse } },
9626 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
70469627 },
70479628 .dst_temps = .{.{ .rc = .sse }},
70489629 .each = .{ .once = &.{
7049 .{ ._, .vp_d, .minu, .dst0x, .src0x, .src1x, ._ },
9630 .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ },
9631 .{ ._, ._ss, .min, .dst0x, .src0x, ._, ._ },
9632 .{ ._, ._ss, .cmp, .src0x, .src0x, .vp(.unord), ._ },
9633 .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ },
70509634 } },
70519635 }, .{
7052 .required_features = .{ .sse4_1, null, null, null },
9636 .required_features = .{ .sse, null, null, null },
70539637 .src_constraints = .{
7054 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7055 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
9638 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
9639 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
70569640 },
70579641 .patterns = &.{
7058 .{ .src = .{ .to_mut_sse, .mem } },
7059 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
70609642 .{ .src = .{ .to_mut_sse, .to_sse } },
70619643 },
9644 .extra_temps = .{
9645 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
9646 .unused,
9647 .unused,
9648 .unused,
9649 .unused,
9650 .unused,
9651 .unused,
9652 .unused,
9653 .unused,
9654 },
70629655 .dst_temps = .{.{ .ref = .src0 }},
70639656 .each = .{ .once = &.{
7064 .{ ._, .p_d, .minu, .dst0x, .src1x, ._, ._ },
9657 .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ },
9658 .{ ._, ._ss, .min, .tmp0x, .src0x, ._, ._ },
9659 .{ ._, ._ss, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
9660 .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ },
9661 .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ },
9662 .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
70659663 } },
70669664 }, .{
7067 .required_features = .{ .sse2, null, null, null },
9665 .required_features = .{ .avx, null, null, null },
70689666 .src_constraints = .{
7069 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7070 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
9667 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
9668 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
70719669 },
70729670 .patterns = &.{
7073 .{ .src = .{ .to_mut_sse, .mem } },
7074 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7075 .{ .src = .{ .to_mut_sse, .to_sse } },
9671 .{ .src = .{ .to_sse, .to_sse } },
70769672 },
70779673 .extra_temps = .{
7078 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
7079 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
7080 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
9674 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
9675 .unused,
9676 .unused,
70819677 .unused,
70829678 .unused,
70839679 .unused,
......@@ -7085,45 +9681,44 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
70859681 .unused,
70869682 .unused,
70879683 },
7088 .dst_temps = .{.{ .rc = .sse }},
9684 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
70899685 .each = .{ .once = &.{
7090 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7091 .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ },
7092 .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
7093 .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ },
7094 .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ },
7095 .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ },
7096 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
7097 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
7098 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
9686 .{ ._, .v_ps, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
9687 .{ ._, .v_ps, .min, .dst0x, .src1x, .src0x, ._ },
9688 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
70999689 } },
71009690 }, .{
7101 .required_features = .{ .avx2, null, null, null },
9691 .required_features = .{ .sse4_1, null, null, null },
71029692 .src_constraints = .{
7103 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
7104 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
9693 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
9694 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
71059695 },
71069696 .patterns = &.{
7107 .{ .src = .{ .to_sse, .mem } },
7108 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7109 .{ .src = .{ .to_sse, .to_sse } },
9697 .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } },
9698 .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } },
9699 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
71109700 },
71119701 .dst_temps = .{.{ .rc = .sse }},
71129702 .each = .{ .once = &.{
7113 .{ ._, .vp_d, .minu, .dst0y, .src0y, .src1y, ._ },
9703 .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ },
9704 .{ ._, ._ps, .min, .dst0x, .src0x, ._, ._ },
9705 .{ ._, ._ps, .cmp, .src0x, .src0x, .vp(.unord), ._ },
9706 .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ },
71149707 } },
71159708 }, .{
7116 .required_features = .{ .avx2, null, null, null },
9709 .required_features = .{ .sse, null, null, null },
71179710 .src_constraints = .{
7118 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
7119 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
9711 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
9712 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
71209713 },
71219714 .patterns = &.{
7122 .{ .src = .{ .to_mem, .to_mem } },
9715 .{ .src = .{ .to_mut_sse, .mem } },
9716 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
9717 .{ .src = .{ .to_mut_sse, .to_sse } },
71239718 },
71249719 .extra_temps = .{
7125 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7126 .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
9720 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
9721 .unused,
71279722 .unused,
71289723 .unused,
71299724 .unused,
......@@ -7132,28 +9727,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
71329727 .unused,
71339728 .unused,
71349729 },
7135 .dst_temps = .{.mem},
7136 .clobbers = .{ .eflags = true },
9730 .dst_temps = .{.{ .ref = .src0 }},
71379731 .each = .{ .once = &.{
7138 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7139 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7140 .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
7141 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
7142 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7143 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9732 .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ },
9733 .{ ._, ._ps, .min, .tmp0x, .src0x, ._, ._ },
9734 .{ ._, ._ps, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
9735 .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ },
9736 .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ },
9737 .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
71449738 } },
71459739 }, .{
71469740 .required_features = .{ .avx, null, null, null },
71479741 .src_constraints = .{
7148 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7149 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
9742 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
9743 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
71509744 },
71519745 .patterns = &.{
7152 .{ .src = .{ .to_mem, .to_mem } },
9746 .{ .src = .{ .to_sse, .to_sse } },
71539747 },
71549748 .extra_temps = .{
7155 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7156 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
9749 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
9750 .unused,
71579751 .unused,
71589752 .unused,
71599753 .unused,
......@@ -7162,30 +9756,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
71629756 .unused,
71639757 .unused,
71649758 },
7165 .dst_temps = .{.mem},
7166 .clobbers = .{ .eflags = true },
9759 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
71679760 .each = .{ .once = &.{
7168 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7169 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7170 .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
7171 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7172 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7173 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9761 .{ ._, .v_ps, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) },
9762 .{ ._, .v_ps, .min, .dst0y, .src1y, .src0y, ._ },
9763 .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .src1y, .tmp0y },
71749764 } },
71759765 }, .{
7176 .required_features = .{ .sse4_1, null, null, null },
9766 .required_features = .{ .avx, null, null, null },
71779767 .src_constraints = .{
7178 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7179 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
9768 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
9769 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
71809770 },
71819771 .patterns = &.{
71829772 .{ .src = .{ .to_mem, .to_mem } },
71839773 },
71849774 .extra_temps = .{
71859775 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7186 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7187 .unused,
7188 .unused,
9776 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
9777 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
9778 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
71899779 .unused,
71909780 .unused,
71919781 .unused,
......@@ -7195,67 +9785,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
71959785 .dst_temps = .{.mem},
71969786 .clobbers = .{ .eflags = true },
71979787 .each = .{ .once = &.{
7198 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7199 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7200 .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7201 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7202 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9788 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9789 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
9790 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
9791 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
9792 .{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
9793 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
9794 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
9795 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
72039796 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
72049797 } },
72059798 }, .{
7206 .required_features = .{ .sse2, null, null, null },
9799 .required_features = .{ .sse4_1, null, null, null },
72079800 .src_constraints = .{
7208 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7209 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
9801 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
9802 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
72109803 },
72119804 .patterns = &.{
72129805 .{ .src = .{ .to_mem, .to_mem } },
72139806 },
72149807 .extra_temps = .{
72159808 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7216 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
7217 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7218 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7219 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7220 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7221 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
9809 .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
9810 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
9811 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
9812 .unused,
9813 .unused,
9814 .unused,
72229815 .unused,
72239816 .unused,
72249817 },
72259818 .dst_temps = .{.mem},
72269819 .clobbers = .{ .eflags = true },
72279820 .each = .{ .once = &.{
7228 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7229 .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
7230 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7231 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7232 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7233 .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
7234 .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ },
7235 .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ },
7236 .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ },
7237 .{ ._, .p_d, .cmpgt, .tmp5x, .tmp6x, ._, ._ },
7238 .{ ._, .p_, .@"and", .tmp4x, .tmp5x, ._, ._ },
7239 .{ ._, .p_, .andn, .tmp5x, .tmp3x, ._, ._ },
7240 .{ ._, .p_, .@"or", .tmp4x, .tmp5x, ._, ._ },
7241 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp4x, ._, ._ },
7242 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9821 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9822 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9823 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9824 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
9825 .{ ._, ._ps, .min, .tmp3x, .tmp1x, ._, ._ },
9826 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
9827 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
9828 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
9829 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
72439830 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
72449831 } },
72459832 }, .{
7246 .required_features = .{ .cmov, null, null, null },
9833 .required_features = .{ .sse, null, null, null },
72479834 .src_constraints = .{
7248 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
7249 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
9835 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
9836 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
72509837 },
72519838 .patterns = &.{
72529839 .{ .src = .{ .to_mem, .to_mem } },
72539840 },
72549841 .extra_temps = .{
72559842 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7256 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7257 .unused,
7258 .unused,
9843 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
9844 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
9845 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
72599846 .unused,
72609847 .unused,
72619848 .unused,
......@@ -7265,25 +9852,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
72659852 .dst_temps = .{.mem},
72669853 .clobbers = .{ .eflags = true },
72679854 .each = .{ .once = &.{
7268 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7269 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
7270 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7271 .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7272 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
7273 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
9855 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9856 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9857 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9858 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
9859 .{ ._, ._ps, .min, .tmp3x, .tmp1x, ._, ._ },
9860 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ },
9861 .{ ._, ._ps, .@"and", .tmp3x, .tmp1x, ._, ._ },
9862 .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
9863 .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },
9864 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
9865 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
72749866 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
72759867 } },
72769868 }, .{
9869 .required_features = .{ .avx, null, null, null },
72779870 .src_constraints = .{
7278 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
7279 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
9871 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9872 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
72809873 },
72819874 .patterns = &.{
7282 .{ .src = .{ .to_mem, .to_mem } },
9875 .{ .src = .{ .to_sse, .to_sse } },
72839876 },
72849877 .extra_temps = .{
7285 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7286 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9878 .{ .type = .f64, .kind = .{ .rc = .sse } },
9879 .unused,
72879880 .unused,
72889881 .unused,
72899882 .unused,
......@@ -7292,47 +9885,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
72929885 .unused,
72939886 .unused,
72949887 },
7295 .dst_temps = .{.mem},
7296 .clobbers = .{ .eflags = true },
9888 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
72979889 .each = .{ .once = &.{
7298 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7299 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
7300 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7301 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
7302 .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7303 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
7304 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
7305 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9890 .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
9891 .{ ._, .v_sd, .min, .dst0x, .src1x, .src0x, ._ },
9892 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
73069893 } },
73079894 }, .{
7308 .required_features = .{ .avx, null, null, null },
9895 .required_features = .{ .sse4_1, null, null, null },
73099896 .src_constraints = .{
7310 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
7311 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
9897 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9898 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
73129899 },
73139900 .patterns = &.{
7314 .{ .src = .{ .to_sse, .mem } },
7315 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7316 .{ .src = .{ .to_sse, .to_sse } },
9901 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
73179902 },
73189903 .dst_temps = .{.{ .rc = .sse }},
73199904 .each = .{ .once = &.{
7320 .{ ._, .vp_q, .cmpgt, .dst0x, .src0x, .src1x, ._ },
7321 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },
9905 .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ },
9906 .{ ._, ._sd, .min, .dst0x, .src0x, ._, ._ },
9907 .{ ._, ._sd, .cmp, .src0x, .src0x, .vp(.unord), ._ },
9908 .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ },
73229909 } },
73239910 }, .{
7324 .required_features = .{ .sse4_2, null, null, null },
9911 .required_features = .{ .sse2, null, null, null },
73259912 .src_constraints = .{
7326 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
7327 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
9913 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9914 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
73289915 },
73299916 .patterns = &.{
7330 .{ .src = .{ .to_mut_sse, .mem } },
7331 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
73329917 .{ .src = .{ .to_mut_sse, .to_sse } },
73339918 },
73349919 .extra_temps = .{
7335 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
9920 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
73369921 .unused,
73379922 .unused,
73389923 .unused,
......@@ -7344,72 +9929,154 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
73449929 },
73459930 .dst_temps = .{.{ .ref = .src0 }},
73469931 .each = .{ .once = &.{
7347 .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
7348 .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ },
7349 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ },
9932 .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ },
9933 .{ ._, ._sd, .min, .tmp0x, .src0x, ._, ._ },
9934 .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
9935 .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ },
9936 .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ },
9937 .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
73509938 } },
73519939 }, .{
7352 .required_features = .{ .avx2, null, null, null },
9940 .required_features = .{ .sse, null, null, null },
73539941 .src_constraints = .{
7354 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
7355 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
9942 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9943 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
9944 },
9945 .patterns = &.{
9946 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
9947 },
9948 .call_frame = .{ .alignment = .@"16" },
9949 .extra_temps = .{
9950 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } },
9951 .unused,
9952 .unused,
9953 .unused,
9954 .unused,
9955 .unused,
9956 .unused,
9957 .unused,
9958 .unused,
9959 },
9960 .dst_temps = .{.{ .ref = .src0 }},
9961 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9962 .each = .{ .once = &.{
9963 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
9964 } },
9965 }, .{
9966 .required_features = .{ .avx, null, null, null },
9967 .src_constraints = .{
9968 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
9969 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
73569970 },
73579971 .patterns = &.{
7358 .{ .src = .{ .to_sse, .mem } },
7359 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
73609972 .{ .src = .{ .to_sse, .to_sse } },
73619973 },
9974 .extra_temps = .{
9975 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
9976 .unused,
9977 .unused,
9978 .unused,
9979 .unused,
9980 .unused,
9981 .unused,
9982 .unused,
9983 .unused,
9984 },
9985 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
9986 .each = .{ .once = &.{
9987 .{ ._, .v_pd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
9988 .{ ._, .v_pd, .min, .dst0x, .src1x, .src0x, ._ },
9989 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
9990 } },
9991 }, .{
9992 .required_features = .{ .sse4_1, null, null, null },
9993 .src_constraints = .{
9994 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
9995 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
9996 },
9997 .patterns = &.{
9998 .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } },
9999 .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } },
10000 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
10001 },
736210002 .dst_temps = .{.{ .rc = .sse }},
736310003 .each = .{ .once = &.{
7364 .{ ._, .vp_q, .cmpgt, .dst0y, .src0y, .src1y, ._ },
7365 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },
10004 .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ },
10005 .{ ._, ._pd, .min, .dst0x, .src0x, ._, ._ },
10006 .{ ._, ._pd, .cmp, .src0x, .src0x, .vp(.unord), ._ },
10007 .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ },
10008 } },
10009 }, .{
10010 .required_features = .{ .sse2, null, null, null },
10011 .src_constraints = .{
10012 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
10013 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
10014 },
10015 .patterns = &.{
10016 .{ .src = .{ .to_mut_sse, .mem } },
10017 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
10018 .{ .src = .{ .to_mut_sse, .to_sse } },
10019 },
10020 .extra_temps = .{
10021 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
10022 .unused,
10023 .unused,
10024 .unused,
10025 .unused,
10026 .unused,
10027 .unused,
10028 .unused,
10029 .unused,
10030 },
10031 .dst_temps = .{.{ .ref = .src0 }},
10032 .each = .{ .once = &.{
10033 .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ },
10034 .{ ._, ._pd, .min, .tmp0x, .src0x, ._, ._ },
10035 .{ ._, ._pd, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
10036 .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ },
10037 .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ },
10038 .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
736610039 } },
736710040 }, .{
7368 .required_features = .{ .avx2, null, null, null },
10041 .required_features = .{ .avx, null, null, null },
736910042 .src_constraints = .{
7370 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
7371 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
10043 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
10044 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
737210045 },
737310046 .patterns = &.{
7374 .{ .src = .{ .to_mem, .to_mem } },
10047 .{ .src = .{ .to_sse, .to_sse } },
737510048 },
737610049 .extra_temps = .{
7377 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7378 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
7379 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
7380 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
10050 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
10051 .unused,
10052 .unused,
10053 .unused,
738110054 .unused,
738210055 .unused,
738310056 .unused,
738410057 .unused,
738510058 .unused,
738610059 },
7387 .dst_temps = .{.mem},
7388 .clobbers = .{ .eflags = true },
10060 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
738910061 .each = .{ .once = &.{
7390 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7391 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7392 .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
7393 .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp1y, .tmp2y, ._ },
7394 .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
7395 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
7396 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7397 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10062 .{ ._, .v_pd, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) },
10063 .{ ._, .v_pd, .min, .dst0y, .src1y, .src0y, ._ },
10064 .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .src1y, .tmp0y },
739810065 } },
739910066 }, .{
740010067 .required_features = .{ .avx, null, null, null },
740110068 .src_constraints = .{
7402 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
7403 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
10069 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
10070 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
740410071 },
740510072 .patterns = &.{
740610073 .{ .src = .{ .to_mem, .to_mem } },
740710074 },
740810075 .extra_temps = .{
740910076 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7410 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7411 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7412 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
10077 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
10078 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
10079 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
741310080 .unused,
741410081 .unused,
741510082 .unused,
......@@ -7419,29 +10086,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
741910086 .dst_temps = .{.mem},
742010087 .clobbers = .{ .eflags = true },
742110088 .each = .{ .once = &.{
7422 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7423 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7424 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7425 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ },
7426 .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x },
7427 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7428 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10089 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10090 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10091 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
10092 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
10093 .{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
10094 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
10095 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
10096 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
742910097 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
743010098 } },
743110099 }, .{
7432 .required_features = .{ .sse4_2, null, null, null },
10100 .required_features = .{ .sse4_1, null, null, null },
743310101 .src_constraints = .{
7434 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
7435 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
10102 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
10103 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
743610104 },
743710105 .patterns = &.{
743810106 .{ .src = .{ .to_mem, .to_mem } },
743910107 },
744010108 .extra_temps = .{
744110109 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7442 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7443 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7444 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
10110 .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
10111 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
10112 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
744510113 .unused,
744610114 .unused,
744710115 .unused,
......@@ -7451,30 +10119,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
745110119 .dst_temps = .{.mem},
745210120 .clobbers = .{ .eflags = true },
745310121 .each = .{ .once = &.{
7454 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7455 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7456 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7457 .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ },
7458 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
7459 .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ },
7460 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7461 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10122 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10123 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10124 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10125 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
10126 .{ ._, ._pd, .min, .tmp3x, .tmp1x, ._, ._ },
10127 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
10128 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
10129 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
10130 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
746210131 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
746310132 } },
746410133 }, .{
7465 .required_features = .{ .@"64bit", .cmov, null, null },
10134 .required_features = .{ .sse2, null, null, null },
746610135 .src_constraints = .{
7467 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
7468 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
10136 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
10137 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
746910138 },
747010139 .patterns = &.{
747110140 .{ .src = .{ .to_mem, .to_mem } },
747210141 },
747310142 .extra_temps = .{
747410143 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7475 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
7476 .unused,
7477 .unused,
10144 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
10145 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
10146 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
747810147 .unused,
747910148 .unused,
748010149 .unused,
......@@ -7484,28 +10153,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
748410153 .dst_temps = .{.mem},
748510154 .clobbers = .{ .eflags = true },
748610155 .each = .{ .once = &.{
7487 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7488 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7489 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7490 .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7491 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
7492 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
10156 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10157 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10158 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10159 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
10160 .{ ._, ._pd, .min, .tmp3x, .tmp1x, ._, ._ },
10161 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ },
10162 .{ ._, ._pd, .@"and", .tmp3x, .tmp1x, ._, ._ },
10163 .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
10164 .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },
10165 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10166 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
749310167 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
749410168 } },
749510169 }, .{
7496 .required_features = .{ .@"64bit", null, null, null },
10170 .required_features = .{ .sse, null, null, null },
749710171 .src_constraints = .{
7498 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
7499 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
10172 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
10173 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
750010174 },
750110175 .patterns = &.{
750210176 .{ .src = .{ .to_mem, .to_mem } },
750310177 },
10178 .call_frame = .{ .alignment = .@"16" },
750410179 .extra_temps = .{
750510180 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7506 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
7507 .unused,
7508 .unused,
10181 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
10182 .{ .type = .f64, .kind = .{ .reg = .xmm1 } },
10183 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } },
750910184 .unused,
751010185 .unused,
751110186 .unused,
......@@ -7513,32 +10188,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
751310188 .unused,
751410189 },
751510190 .dst_temps = .{.mem},
7516 .clobbers = .{ .eflags = true },
7517 .each = .{ .once = &.{
7518 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7519 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7520 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7521 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7522 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7523 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
7524 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
10191 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10192 .each = .{ .once = &.{
10193 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10194 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
10195 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
10196 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
10197 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
10198 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
10199 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
10200 .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },
752510201 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
752610202 } },
752710203 }, .{
7528 .required_features = .{ .avx, null, null, null },
10204 .required_features = .{ .x87, .cmov, null, null },
752910205 .src_constraints = .{
7530 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7531 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
10206 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
10207 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
753210208 },
753310209 .patterns = &.{
7534 .{ .src = .{ .to_sse, .mem } },
7535 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7536 .{ .src = .{ .to_sse, .to_sse } },
10210 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
10211 .{ .src = .{ .mem, .to_x87 } },
10212 .{ .src = .{ .to_x87, .to_x87 } },
753710213 },
753810214 .extra_temps = .{
7539 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
7540 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7541 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
10215 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10216 .unused,
10217 .unused,
754210218 .unused,
754310219 .unused,
754410220 .unused,
......@@ -7546,62 +10222,69 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
754610222 .unused,
754710223 .unused,
754810224 },
7549 .dst_temps = .{.{ .rc = .sse }},
10225 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
10226 .clobbers = .{ .eflags = true },
755010227 .each = .{ .once = &.{
7551 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7552 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
7553 .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ },
7554 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ },
7555 .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ },
7556 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },
10228 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
10229 .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ },
10230 .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ },
10231 .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ },
10232 .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ },
10233 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
755710234 } },
755810235 }, .{
7559 .required_features = .{ .sse4_2, null, null, null },
10236 .required_features = .{ .sahf, .x87, null, null },
756010237 .src_constraints = .{
7561 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7562 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
10238 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
10239 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
756310240 },
756410241 .patterns = &.{
7565 .{ .src = .{ .to_mut_sse, .mem } },
7566 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7567 .{ .src = .{ .to_mut_sse, .to_sse } },
10242 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
10243 .{ .src = .{ .mem, .to_x87 } },
10244 .{ .src = .{ .to_x87, .to_x87 } },
756810245 },
756910246 .extra_temps = .{
7570 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
7571 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7572 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
7573 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
10247 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10248 .{ .type = .u8, .kind = .{ .reg = .ah } },
10249 .unused,
10250 .unused,
757410251 .unused,
757510252 .unused,
757610253 .unused,
757710254 .unused,
757810255 .unused,
757910256 },
7580 .dst_temps = .{.{ .ref = .src0 }},
10257 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
10258 .clobbers = .{ .eflags = true },
758110259 .each = .{ .once = &.{
7582 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7583 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
7584 .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
7585 .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ },
7586 .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },
7587 .{ ._, .p_q, .cmpgt, .tmp2x, .tmp3x, ._, ._ },
7588 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp2x, ._ },
7589 } },
7590 }, .{
7591 .required_features = .{ .avx2, null, null, null },
10260 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
10261 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
10262 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
10263 .{ ._, ._, .sahf, ._, ._, ._, ._ },
10264 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
10265 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
10266 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
10267 .{ ._, ._, .sahf, ._, ._, ._, ._ },
10268 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
10269 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
10270 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
10271 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
10272 } },
10273 }, .{
10274 .required_features = .{ .@"64bit", .x87, null, null },
759210275 .src_constraints = .{
7593 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
7594 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
10276 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
10277 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
759510278 },
759610279 .patterns = &.{
7597 .{ .src = .{ .to_sse, .mem } },
7598 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7599 .{ .src = .{ .to_sse, .to_sse } },
10280 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
10281 .{ .src = .{ .mem, .to_x87 } },
10282 .{ .src = .{ .to_x87, .to_x87 } },
760010283 },
760110284 .extra_temps = .{
7602 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
7603 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7604 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
10285 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10286 .{ .type = .u8, .kind = .{ .reg = .ah } },
10287 .unused,
760510288 .unused,
760610289 .unused,
760710290 .unused,
......@@ -7609,139 +10292,150 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
760910292 .unused,
761010293 .unused,
761110294 },
7612 .dst_temps = .{.{ .rc = .sse }},
10295 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
10296 .clobbers = .{ .eflags = true },
761310297 .each = .{ .once = &.{
7614 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7615 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },
7616 .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ },
7617 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ },
7618 .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ },
7619 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },
10298 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
10299 .{ ._, .f_, .xam, ._, ._, ._, ._ },
10300 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
10301 .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ },
10302 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10303 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
10304 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
10305 .{ ._, ._, .@"test", .tmp1b, .si(0b0_0_000_001), ._, ._ },
10306 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
10307 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
10308 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
10309 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
762010310 } },
762110311 }, .{
7622 .required_features = .{ .avx2, null, null, null },
10312 .required_features = .{ .x87, null, null, null },
762310313 .src_constraints = .{
7624 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
7625 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
10314 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
10315 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
762610316 },
762710317 .patterns = &.{
7628 .{ .src = .{ .to_mem, .to_mem } },
10318 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
10319 .{ .src = .{ .mem, .to_x87 } },
10320 .{ .src = .{ .to_x87, .to_x87 } },
762910321 },
763010322 .extra_temps = .{
7631 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7632 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7633 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7634 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7635 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7636 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7637 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
10323 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10324 .{ .type = .u8, .kind = .{ .reg = .ah } },
10325 .unused,
10326 .unused,
10327 .unused,
10328 .unused,
10329 .unused,
763810330 .unused,
763910331 .unused,
764010332 },
7641 .dst_temps = .{.mem},
10333 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
764210334 .clobbers = .{ .eflags = true },
764310335 .each = .{ .once = &.{
7644 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7645 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },
7646 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7647 .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7648 .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
7649 .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ },
7650 .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ },
7651 .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ },
7652 .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y },
7653 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
7654 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7655 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7656 } },
7657 }, .{
7658 .required_features = .{ .avx, null, null, null },
10336 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
10337 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
10338 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
10339 .{ ._, ._, .sahf, ._, ._, ._, ._ },
10340 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
10341 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
10342 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
10343 .{ ._, ._, .sahf, ._, ._, ._, ._ },
10344 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
10345 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
10346 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
10347 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
10348 } },
10349 }, .{
10350 .required_features = .{ .x87, .cmov, null, null },
765910351 .src_constraints = .{
7660 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7661 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
10352 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10353 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
766210354 },
766310355 .patterns = &.{
766410356 .{ .src = .{ .to_mem, .to_mem } },
766510357 },
766610358 .extra_temps = .{
766710359 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7668 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7669 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7670 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7671 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7672 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7673 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
10360 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10361 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10362 .unused,
10363 .unused,
10364 .unused,
10365 .unused,
767410366 .unused,
767510367 .unused,
767610368 },
767710369 .dst_temps = .{.mem},
767810370 .clobbers = .{ .eflags = true },
767910371 .each = .{ .once = &.{
7680 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7681 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
768210372 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7683 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7684 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7685 .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ },
7686 .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ },
7687 .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ },
7688 .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x },
7689 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
10373 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
10374 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
10375 .{ ._, .f_, .ucomi, .tmp1t, .tmp1t, ._, ._ },
10376 .{ ._, .f_u, .cmov, .tmp1t, .tmp2t, ._, ._ },
10377 .{ ._, .f_, .ucomi, .tmp1t, .tmp2t, ._, ._ },
10378 .{ ._, .f_nb, .cmov, .tmp1t, .tmp2t, ._, ._ },
10379 .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
10380 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
769010381 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
769110382 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
769210383 } },
769310384 }, .{
7694 .required_features = .{ .sse4_2, null, null, null },
10385 .required_features = .{ .sahf, .x87, null, null },
769510386 .src_constraints = .{
7696 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7697 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
10387 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10388 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
769810389 },
769910390 .patterns = &.{
770010391 .{ .src = .{ .to_mem, .to_mem } },
770110392 },
770210393 .extra_temps = .{
770310394 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7704 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7705 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7706 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7707 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7708 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
7709 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
10395 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10396 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10397 .{ .type = .u8, .kind = .{ .reg = .ah } },
10398 .unused,
10399 .unused,
10400 .unused,
771010401 .unused,
771110402 .unused,
771210403 },
771310404 .dst_temps = .{.mem},
771410405 .clobbers = .{ .eflags = true },
771510406 .each = .{ .once = &.{
7716 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7717 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
771810407 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7719 .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ },
7720 .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ },
7721 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7722 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7723 .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ },
7724 .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ },
7725 .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ },
7726 .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ },
7727 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
10408 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
10409 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
10410 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
10411 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
10412 .{ ._, ._, .sahf, ._, ._, ._, ._ },
10413 .{ ._, ._p, .j, .@"1f", ._, ._, ._ },
10414 .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ },
10415 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
10416 .{ ._, ._, .sahf, ._, ._, ._, ._ },
10417 .{ ._, ._b, .j, .@"2f", ._, ._, ._ },
10418 .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
10419 .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ },
10420 .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
10421 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
772810422 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
772910423 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
773010424 } },
773110425 }, .{
7732 .required_features = .{ .@"64bit", .cmov, null, null },
10426 .required_features = .{ .@"64bit", .x87, null, null },
773310427 .src_constraints = .{
7734 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
7735 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
10428 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10429 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
773610430 },
773710431 .patterns = &.{
773810432 .{ .src = .{ .to_mem, .to_mem } },
773910433 },
774010434 .extra_temps = .{
774110435 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7742 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7743 .unused,
7744 .unused,
10436 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10437 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10438 .{ .type = .u8, .kind = .{ .reg = .ah } },
774510439 .unused,
774610440 .unused,
774710441 .unused,
......@@ -7752,27 +10446,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
775210446 .clobbers = .{ .eflags = true },
775310447 .each = .{ .once = &.{
775410448 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7755 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7756 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7757 .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7758 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
7759 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
10449 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
10450 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
10451 .{ ._, .f_, .xam, ._, ._, ._, ._ },
10452 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
10453 .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ },
10454 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
10455 .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ },
10456 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
10457 .{ ._, ._, .@"test", .tmp3b, .si(0b0_0_000_001), ._, ._ },
10458 .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
10459 .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
10460 .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ },
10461 .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
10462 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
10463 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
776010464 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
776110465 } },
776210466 }, .{
7763 .required_features = .{ .@"64bit", null, null, null },
10467 .required_features = .{ .x87, null, null, null },
776410468 .src_constraints = .{
7765 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
7766 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
10469 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
10470 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
776710471 },
776810472 .patterns = &.{
776910473 .{ .src = .{ .to_mem, .to_mem } },
777010474 },
777110475 .extra_temps = .{
777210476 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7773 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7774 .unused,
7775 .unused,
10477 .{ .type = .f80, .kind = .{ .reg = .st6 } },
10478 .{ .type = .f80, .kind = .{ .reg = .st7 } },
10479 .{ .type = .u8, .kind = .{ .reg = .ah } },
777610480 .unused,
777710481 .unused,
777810482 .unused,
......@@ -7783,64 +10487,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
778310487 .clobbers = .{ .eflags = true },
778410488 .each = .{ .once = &.{
778510489 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7786 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7787 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7788 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
7789 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7790 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
7791 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
10490 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
10491 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
10492 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
10493 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
10494 .{ ._, ._, .sahf, ._, ._, ._, ._ },
10495 .{ ._, ._p, .j, .@"1f", ._, ._, ._ },
10496 .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ },
10497 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
10498 .{ ._, ._, .sahf, ._, ._, ._, ._ },
10499 .{ ._, ._b, .j, .@"2f", ._, ._, ._ },
10500 .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
10501 .{ ._, .f_, .ld, .tmp2t, ._, ._, ._ },
10502 .{ .@"2:", .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
10503 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
10504 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
779210505 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
779310506 } },
779410507 }, .{
7795 .required_features = .{ .@"64bit", .cmov, null, null },
7796 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },
10508 .required_features = .{ .sse, null, null, null },
10509 .src_constraints = .{
10510 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
10511 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
10512 },
779710513 .patterns = &.{
7798 .{ .src = .{ .to_mem, .to_mem } },
10514 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
779910515 },
10516 .call_frame = .{ .alignment = .@"16" },
780010517 .extra_temps = .{
7801 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7802 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7803 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7804 .{ .type = .u64, .kind = .{ .reg = .rcx } },
10518 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
10519 .unused,
10520 .unused,
10521 .unused,
780510522 .unused,
780610523 .unused,
780710524 .unused,
780810525 .unused,
780910526 .unused,
781010527 },
7811 .dst_temps = .{.mem},
7812 .clobbers = .{ .eflags = true },
10528 .dst_temps = .{.{ .ref = .src0 }},
10529 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
781310530 .each = .{ .once = &.{
7814 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7815 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },
7816 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7817 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7818 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7819 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
7820 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
7821 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
7822 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7823 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7824 .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7825 .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7826 .{ ._, ._ge, .cmov, .tmp1p, .tmp2p, ._, ._ },
7827 .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7828 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7829 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7830 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
7831 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10531 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
783210532 } },
783310533 }, .{
7834 .required_features = .{ .@"64bit", null, null, null },
7835 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },
10534 .required_features = .{ .avx, null, null, null },
10535 .src_constraints = .{
10536 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10537 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10538 },
783610539 .patterns = &.{
783710540 .{ .src = .{ .to_mem, .to_mem } },
783810541 },
10542 .call_frame = .{ .alignment = .@"16" },
783910543 .extra_temps = .{
784010544 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7841 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7842 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7843 .{ .type = .u64, .kind = .{ .reg = .rcx } },
10545 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
10546 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
10547 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
784410548 .unused,
784510549 .unused,
784610550 .unused,
......@@ -7848,38 +10552,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
784810552 .unused,
784910553 },
785010554 .dst_temps = .{.mem},
7851 .clobbers = .{ .eflags = true },
10555 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
785210556 .each = .{ .once = &.{
7853 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7854 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },
7855 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7856 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7857 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7858 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
7859 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
7860 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
7861 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7862 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7863 .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7864 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7865 .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7866 .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7867 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7868 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7869 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
10557 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10558 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10559 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10560 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
10561 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10562 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
787010563 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
787110564 } },
787210565 }, .{
7873 .required_features = .{ .@"64bit", .cmov, null, null },
7874 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },
10566 .required_features = .{ .sse2, null, null, null },
10567 .src_constraints = .{
10568 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10569 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10570 },
787510571 .patterns = &.{
787610572 .{ .src = .{ .to_mem, .to_mem } },
787710573 },
10574 .call_frame = .{ .alignment = .@"16" },
787810575 .extra_temps = .{
787910576 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7880 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7881 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7882 .{ .type = .u64, .kind = .{ .reg = .rcx } },
10577 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
10578 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
10579 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
788310580 .unused,
788410581 .unused,
788510582 .unused,
......@@ -7887,36 +10584,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
788710584 .unused,
788810585 },
788910586 .dst_temps = .{.mem},
7890 .clobbers = .{ .eflags = true },
10587 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
789110588 .each = .{ .once = &.{
7892 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7893 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7894 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7895 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7896 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7897 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
7898 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
7899 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
7900 .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ },
7901 .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
7902 .{ ._, ._ae, .cmov, .tmp1p, .tmp2p, ._, ._ },
7903 .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
7904 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7905 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7906 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
7907 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
10589 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10590 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10591 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10592 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
10593 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10594 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
10595 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
790810596 } },
790910597 }, .{
7910 .required_features = .{ .@"64bit", null, null, null },
7911 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },
10598 .required_features = .{ .sse, null, null, null },
10599 .src_constraints = .{
10600 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10601 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10602 },
791210603 .patterns = &.{
791310604 .{ .src = .{ .to_mem, .to_mem } },
791410605 },
10606 .call_frame = .{ .alignment = .@"16" },
791510607 .extra_temps = .{
791610608 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7917 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7918 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7919 .{ .type = .u64, .kind = .{ .reg = .rcx } },
10609 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
10610 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
10611 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
792010612 .unused,
792110613 .unused,
792210614 .unused,
......@@ -7924,24 +10616,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
792410616 .unused,
792510617 },
792610618 .dst_temps = .{.mem},
7927 .clobbers = .{ .eflags = true },
7928 .each = .{ .once = &.{
7929 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7930 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7931 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7932 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7933 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7934 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
7935 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
7936 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
7937 .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ },
7938 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
7939 .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
7940 .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
7941 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7942 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7943 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
7944 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
10619 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10620 .each = .{ .once = &.{
10621 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10622 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10623 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10624 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
10625 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10626 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
10627 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
794510628 } },
794610629 } }) catch |err| switch (err) {
794710630 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
......@@ -8142,7 +10825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
814210825 },
814310826 .extra_temps = .{
814410827 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8145 .{ .kind = .{ .rc = .sse } },
10828 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
814610829 .unused,
814710830 .unused,
814810831 .unused,
......@@ -8169,7 +10852,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
816910852 },
817010853 .extra_temps = .{
817110854 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8172 .{ .kind = .{ .rc = .sse } },
10855 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
817310856 .unused,
817410857 .unused,
817510858 .unused,
......@@ -8196,7 +10879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
819610879 },
819710880 .extra_temps = .{
819810881 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8199 .{ .kind = .{ .rc = .sse } },
10882 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
820010883 .unused,
820110884 .unused,
820210885 .unused,
......@@ -8223,7 +10906,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
822310906 },
822410907 .extra_temps = .{
822510908 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8226 .{ .kind = .{ .rc = .sse } },
10909 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
822710910 .unused,
822810911 .unused,
822910912 .unused,
......@@ -8250,7 +10933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
825010933 },
825110934 .extra_temps = .{
825210935 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8253 .{ .kind = .{ .rc = .sse } },
10936 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
825410937 .unused,
825510938 .unused,
825610939 .unused,
......@@ -8591,7 +11274,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
859111274 },
859211275 .dst_temps = .{.{ .rc = .sse }},
859311276 .each = .{ .once = &.{
8594 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
11277 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) },
859511278 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
859611279 } },
859711280 }, .{
......@@ -8693,7 +11376,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
869311376 .clobbers = .{ .eflags = true },
869411377 .each = .{ .once = &.{
869511378 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
8696 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
11379 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) },
869711380 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
869811381 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
869911382 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
......@@ -8722,7 +11405,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
872211405 .clobbers = .{ .eflags = true },
872311406 .each = .{ .once = &.{
872411407 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8725 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
11408 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) },
872611409 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
872711410 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
872811411 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
......@@ -9406,7 +12089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
940612089 },
940712090 .dst_temps = .{.{ .rc = .sse }},
940812091 .each = .{ .once = &.{
9409 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
12092 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) },
941012093 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
941112094 } },
941212095 }, .{
......@@ -9493,12 +12176,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
949312176 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
949412177 },
949512178
9496 .block => if (use_old) try cg.airBlock(inst) else {
12179 .block => {
949712180 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
949812181 const extra = cg.air.extraData(Air.Block, ty_pl.payload);
9499 try cg.asmPseudo(.pseudo_dbg_enter_block_none);
12182 if (cg.debug_output != .none) try cg.asmPseudo(.pseudo_dbg_enter_block_none);
950012183 try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));
9501 try cg.asmPseudo(.pseudo_dbg_leave_block_none);
12184 if (cg.debug_output != .none) try cg.asmPseudo(.pseudo_dbg_leave_block_none);
950212185 },
950312186 .loop => if (use_old) try cg.airLoop(inst) else {
950412187 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
......@@ -13852,7 +16535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1385216535 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
1385316536 .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
1385416537 .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
13855 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16538 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1385616539 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
1385716540 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
1385816541 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -13884,7 +16567,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1388416567 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
1388516568 .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
1388616569 .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
13887 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16570 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1388816571 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1388916572 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1389016573 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -13916,7 +16599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1391616599 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
1391716600 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
1391816601 .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
13919 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16602 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1392016603 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
1392116604 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
1392216605 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -13949,7 +16632,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1394916632 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
1395016633 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
1395116634 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13952 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16635 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1395316636 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
1395416637 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
1395516638 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -13988,7 +16671,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1398816671 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
1398916672 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
1399016673 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
13991 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16674 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1399216675 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
1399316676 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
1399416677 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14021,7 +16704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1402116704 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1402216705 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
1402316706 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14024 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16707 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1402516708 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1402616709 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1402716710 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14054,7 +16737,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1405416737 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1405516738 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
1405616739 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
14057 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16740 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1405816741 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1405916742 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1406016743 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14087,7 +16770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1408716770 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1408816771 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
1408916772 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
14090 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16773 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1409116774 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1409216775 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1409316776 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14121,7 +16804,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1412116804 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1412216805 .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
1412316806 .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
14124 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16807 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1412516808 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1412616809 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1412716810 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14161,7 +16844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1416116844 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
1416216845 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1416316846 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
14164 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16847 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1416516848 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1416616849 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1416716850 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14195,7 +16878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1419516878 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1419616879 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
1419716880 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14198 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16881 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1419916882 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1420016883 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1420116884 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14228,7 +16911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1422816911 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1422916912 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
1423016913 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
14231 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16914 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1423216915 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1423316916 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1423416917 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14262,7 +16945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1426216945 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1426316946 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
1426416947 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
14265 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16948 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1426616949 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1426716950 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1426816951 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14296,7 +16979,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1429616979 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1429716980 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
1429816981 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
14299 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
16982 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1430016983 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1430116984 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1430216985 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14337,7 +17020,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1433717020 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
1433817021 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1433917022 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
14340 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
17023 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1434117024 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1434217025 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1434317026 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14369,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1436917052 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
1437017053 .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
1437117054 .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14372 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
17055 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1437317056 .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
1437417057 .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
1437517058 .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
......@@ -14397,7 +17080,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1439717080 .{ .src = .{ .to_sse, .to_sse } },
1439817081 },
1439917082 .extra_temps = .{
14400 .{ .kind = .{ .rc = .sse } },
17083 .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
1440117084 .unused,
1440217085 .unused,
1440317086 .unused,
......@@ -14413,12 +17096,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1441317096 .info = .{ .kind = .all, .scalar = .dword },
1441417097 } }},
1441517098 .each = .{ .once = &.{
14416 .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ },
14417 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ },
14418 .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {
17099 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
17100 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
17101 .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
1441917102 else => unreachable,
14420 .e => 0b00000,
14421 .ne => 0b00100,
17103 .e => .eq,
17104 .ne => .neq,
1442217105 }) },
1442317106 } },
1442417107 }, .{
......@@ -14452,10 +17135,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1445217135 .each = .{ .once = &.{
1445317136 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
1445417137 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
14455 .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {
17138 .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
1445617139 else => unreachable,
14457 .e => 0b00000,
14458 .ne => 0b00100,
17140 .e => .eq,
17141 .ne => .neq,
1445917142 }) },
1446017143 } },
1446117144 }, .{
......@@ -14489,10 +17172,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1448917172 .each = .{ .once = &.{
1449017173 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
1449117174 .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
14492 .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .ui(switch (cc) {
17175 .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .vp(switch (cc) {
1449317176 else => unreachable,
14494 .e => 0b00000,
14495 .ne => 0b00100,
17177 .e => .eq,
17178 .ne => .neq,
1449617179 }) },
1449717180 } },
1449817181 }, .{
......@@ -14512,10 +17195,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1451217195 .info = .{ .kind = .all, .scalar = .dword },
1451317196 } }},
1451417197 .each = .{ .once = &.{
14515 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
17198 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
1451617199 else => unreachable,
14517 .e => 0b00000,
14518 .ne => 0b00100,
17200 .e => .eq,
17201 .ne => .neq,
1451917202 }) },
1452017203 } },
1452117204 }, .{
......@@ -14534,10 +17217,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1453417217 .info = .{ .kind = .all, .scalar = .dword },
1453517218 } }},
1453617219 .each = .{ .once = &.{
14537 .{ ._, ._ss, .cmp, .dst0x, .src1x, .ui(switch (cc) {
17220 .{ ._, ._ss, .cmp, .dst0x, .src1x, .vp(switch (cc) {
1453817221 else => unreachable,
14539 .e => 0b00000,
14540 .ne => 0b00100,
17222 .e => .eq,
17223 .ne => .neq,
1454117224 }), ._ },
1454217225 } },
1454317226 }, .{
......@@ -14557,10 +17240,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1455717240 .info = .{ .kind = .all, .scalar = .dword },
1455817241 } }},
1455917242 .each = .{ .once = &.{
14560 .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
17243 .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
1456117244 else => unreachable,
14562 .e => 0b00000,
14563 .ne => 0b00100,
17245 .e => .eq,
17246 .ne => .neq,
1456417247 }) },
1456517248 } },
1456617249 }, .{
......@@ -14579,10 +17262,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1457917262 .info = .{ .kind = .all, .scalar = .dword },
1458017263 } }},
1458117264 .each = .{ .once = &.{
14582 .{ ._, ._ps, .cmp, .dst0x, .src1x, .ui(switch (cc) {
17265 .{ ._, ._ps, .cmp, .dst0x, .src1x, .vp(switch (cc) {
1458317266 else => unreachable,
14584 .e => 0b00000,
14585 .ne => 0b00100,
17267 .e => .eq,
17268 .ne => .neq,
1458617269 }), ._ },
1458717270 } },
1458817271 }, .{
......@@ -14602,10 +17285,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1460217285 .info = .{ .kind = .all, .scalar = .dword },
1460317286 } }},
1460417287 .each = .{ .once = &.{
14605 .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {
17288 .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
1460617289 else => unreachable,
14607 .e => 0b00000,
14608 .ne => 0b00100,
17290 .e => .eq,
17291 .ne => .neq,
1460917292 }) },
1461017293 } },
1461117294 }, .{
......@@ -14625,10 +17308,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1462517308 .info = .{ .kind = .all, .scalar = .qword },
1462617309 } }},
1462717310 .each = .{ .once = &.{
14628 .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
17311 .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
1462917312 else => unreachable,
14630 .e => 0b00000,
14631 .ne => 0b00100,
17313 .e => .eq,
17314 .ne => .neq,
1463217315 }) },
1463317316 } },
1463417317 }, .{
......@@ -14647,10 +17330,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1464717330 .info = .{ .kind = .all, .scalar = .qword },
1464817331 } }},
1464917332 .each = .{ .once = &.{
14650 .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) {
17333 .{ ._, ._sd, .cmp, .dst0x, .src1x, .vp(switch (cc) {
1465117334 else => unreachable,
14652 .e => 0b00000,
14653 .ne => 0b00100,
17335 .e => .eq,
17336 .ne => .neq,
1465417337 }), ._ },
1465517338 } },
1465617339 }, .{
......@@ -14670,10 +17353,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1467017353 .info = .{ .kind = .all, .scalar = .qword },
1467117354 } }},
1467217355 .each = .{ .once = &.{
14673 .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
17356 .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
1467417357 else => unreachable,
14675 .e => 0b00000,
14676 .ne => 0b00100,
17358 .e => .eq,
17359 .ne => .neq,
1467717360 }) },
1467817361 } },
1467917362 }, .{
......@@ -14692,10 +17375,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1469217375 .info = .{ .kind = .all, .scalar = .qword },
1469317376 } }},
1469417377 .each = .{ .once = &.{
14695 .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) {
17378 .{ ._, ._pd, .cmp, .dst0x, .src1x, .vp(switch (cc) {
1469617379 else => unreachable,
14697 .e => 0b00000,
14698 .ne => 0b00100,
17380 .e => .eq,
17381 .ne => .neq,
1469917382 }), ._ },
1470017383 } },
1470117384 }, .{
......@@ -14715,10 +17398,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1471517398 .info = .{ .kind = .all, .scalar = .qword },
1471617399 } }},
1471717400 .each = .{ .once = &.{
14718 .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {
17401 .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
1471917402 else => unreachable,
14720 .e => 0b00000,
14721 .ne => 0b00100,
17403 .e => .eq,
17404 .ne => .neq,
1472217405 }) },
1472317406 } },
1472417407 }, .{
......@@ -14748,10 +17431,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1474817431 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1474917432 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1475017433 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
14751 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) {
17434 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
1475217435 else => unreachable,
14753 .e => 0b00000,
14754 .ne => 0b00100,
17436 .e => .eq,
17437 .ne => .neq,
1475517438 }) },
1475617439 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
1475717440 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
......@@ -14786,10 +17469,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1478617469 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1478717470 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1478817471 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
14789 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) {
17472 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
1479017473 else => unreachable,
14791 .e => 0b00000,
14792 .ne => 0b00100,
17474 .e => .eq,
17475 .ne => .neq,
1479317476 }) },
1479417477 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
1479517478 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
......@@ -14834,7 +17517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1483417517 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1483517518 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1483617519 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14837 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
17520 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1483817521 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1483917522 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1484017523 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -14879,7 +17562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1487917562 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1488017563 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1488117564 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14882 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
17565 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1488317566 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1488417567 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1488517568 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -14925,7 +17608,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1492517608 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1492617609 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1492717610 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14928 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
17611 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1492917612 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1493017613 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1493117614 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -14971,7 +17654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1497117654 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1497217655 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1497317656 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14974 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
17657 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1497517658 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1497617659 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1497717660 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -15002,7 +17685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1500217685 .{ .type = .i32, .kind = .{ .reg = .eax } },
1500317686 .{ .type = .u8, .kind = .{ .reg = .cl } },
1500417687 .{ .type = .u32, .kind = .{ .reg = .edx } },
15005 .{ .type = .vector_8_f16, .kind = .mem },
17688 .{ .type = .f32, .kind = .mem },
1500617689 .unused,
1500717690 },
1500817691 .dst_temps = .{.{ .rc = .general_purpose }},
......@@ -15012,14 +17695,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1501217695 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
1501317696 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
1501417697 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15015 .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ },
17698 .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
1501617699 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
1501717700 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15018 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ },
17701 .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
1501917702 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1502017703 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1502117704 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
15022 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
17705 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1502317706 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1502417707 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1502517708 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -15050,7 +17733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1505017733 .{ .type = .i32, .kind = .{ .reg = .eax } },
1505117734 .{ .type = .u8, .kind = .{ .reg = .cl } },
1505217735 .{ .type = .u32, .kind = .{ .reg = .edx } },
15053 .{ .type = .vector_8_f16, .kind = .mem },
17736 .{ .type = .f32, .kind = .mem },
1505417737 .unused,
1505517738 },
1505617739 .dst_temps = .{.{ .rc = .general_purpose }},
......@@ -15060,14 +17743,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1506017743 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
1506117744 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
1506217745 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15063 .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ },
17746 .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
1506417747 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
1506517748 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15066 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ },
17749 .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
1506717750 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1506817751 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1506917752 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
15070 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
17753 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1507117754 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1507217755 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1507317756 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -15111,7 +17794,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1511117794 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1511217795 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1511317796 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15114 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17797 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1511517798 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1511617799 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1511717800 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15166,7 +17849,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1516617849 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1516717850 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1516817851 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15169 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17852 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1517017853 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1517117854 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1517217855 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15222,7 +17905,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1522217905 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1522317906 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1522417907 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15225 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17908 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1522617909 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1522717910 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1522817911 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15278,7 +17961,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1527817961 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1527917962 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1528017963 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15281 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17964 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1528217965 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1528317966 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1528417967 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15320,7 +18003,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1532018003 .{ .type = .i32, .kind = .{ .reg = .eax } },
1532118004 .{ .type = .u8, .kind = .{ .reg = .cl } },
1532218005 .{ .type = .u64, .kind = .{ .reg = .rdx } },
15323 .{ .type = .vector_8_f16, .kind = .mem },
18006 .{ .type = .f32, .kind = .mem },
1532418007 },
1532518008 .dst_temps = .{.mem},
1532618009 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
......@@ -15329,14 +18012,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1532918012 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
1533018013 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
1533118014 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15332 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ },
18015 .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
1533318016 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
1533418017 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15335 .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ },
18018 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
1533618019 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1533718020 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1533818021 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15339 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
18022 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1534018023 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1534118024 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1534218025 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15378,7 +18061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1537818061 .{ .type = .i32, .kind = .{ .reg = .eax } },
1537918062 .{ .type = .u8, .kind = .{ .reg = .cl } },
1538018063 .{ .type = .u64, .kind = .{ .reg = .rdx } },
15381 .{ .type = .vector_8_f16, .kind = .mem },
18064 .{ .type = .f32, .kind = .mem },
1538218065 },
1538318066 .dst_temps = .{.mem},
1538418067 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
......@@ -15387,14 +18070,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1538718070 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
1538818071 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
1538918072 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15390 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ },
18073 .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
1539118074 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
1539218075 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15393 .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ },
18076 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
1539418077 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1539518078 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1539618079 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15397 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
18080 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1539818081 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1539918082 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1540018083 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15439,10 +18122,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1543918122 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1544018123 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1544118124 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15442 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
18125 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1544318126 else => unreachable,
15444 .e => 0b00000,
15445 .ne => 0b00100,
18127 .e => .eq,
18128 .ne => .neq,
1544618129 }) },
1544718130 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
1544818131 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
......@@ -15476,10 +18159,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1547618159 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1547718160 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1547818161 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15479 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
18162 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1548018163 else => unreachable,
15481 .e => 0b00000,
15482 .ne => 0b00100,
18164 .e => .eq,
18165 .ne => .neq,
1548318166 }) },
1548418167 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
1548518168 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
......@@ -15514,15 +18197,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1551418197 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1551518198 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1551618199 .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
15517 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
18200 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) {
1551818201 else => unreachable,
15519 .e => 0b00000,
15520 .ne => 0b00100,
18202 .e => .eq,
18203 .ne => .neq,
1552118204 }), ._ },
15522 .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) {
18205 .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .vp(switch (cc) {
1552318206 else => unreachable,
15524 .e => 0b00000,
15525 .ne => 0b00100,
18207 .e => .eq,
18208 .ne => .neq,
1552618209 }), ._ },
1552718210 .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
1552818211 .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
......@@ -15558,17 +18241,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1555818241 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1555918242 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1556018243 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15561 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
18244 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) {
1556218245 else => unreachable,
15563 .e => 0b00000,
15564 .ne => 0b00100,
18246 .e => .eq,
18247 .ne => .neq,
1556518248 }), ._ },
1556618249 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
1556718250 .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
15568 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) {
18251 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .vp(switch (cc) {
1556918252 else => unreachable,
15570 .e => 0b00000,
15571 .ne => 0b00100,
18253 .e => .eq,
18254 .ne => .neq,
1557218255 }), ._ },
1557318256 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
1557418257 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
......@@ -15605,10 +18288,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1560518288 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1560618289 .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
1560718290 .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },
15608 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .ui(switch (cc) {
18291 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .vp(switch (cc) {
1560918292 else => unreachable,
15610 .e => 0b00000,
15611 .ne => 0b00100,
18293 .e => .eq,
18294 .ne => .neq,
1561218295 }), ._ },
1561318296 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
1561418297 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
......@@ -15616,10 +18299,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1561618299 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
1561718300 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
1561818301 .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15619 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
18302 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) {
1562018303 else => unreachable,
15621 .e => 0b00000,
15622 .ne => 0b00100,
18304 .e => .eq,
18305 .ne => .neq,
1562318306 }), ._ },
1562418307 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
1562518308 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
......@@ -15653,15 +18336,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1565318336 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1565418337 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
1565518338 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
15656 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
18339 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1565718340 else => unreachable,
15658 .e => 0b00000,
15659 .ne => 0b00100,
18341 .e => .eq,
18342 .ne => .neq,
1566018343 }) },
15661 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) {
18344 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
1566218345 else => unreachable,
15663 .e => 0b00000,
15664 .ne => 0b00100,
18346 .e => .eq,
18347 .ne => .neq,
1566518348 }) },
1566618349 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
1566718350 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
......@@ -15669,7 +18352,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1566918352 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
1567018353 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
1567118354 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
15672 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18355 .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
1567318356 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1567418357 } },
1567518358 }, .{
......@@ -15699,15 +18382,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1569918382 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1570018383 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
1570118384 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
15702 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
18385 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1570318386 else => unreachable,
15704 .e => 0b00000,
15705 .ne => 0b00100,
18387 .e => .eq,
18388 .ne => .neq,
1570618389 }) },
15707 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) {
18390 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
1570818391 else => unreachable,
15709 .e => 0b00000,
15710 .ne => 0b00100,
18392 .e => .eq,
18393 .ne => .neq,
1571118394 }) },
1571218395 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
1571318396 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
......@@ -15715,7 +18398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1571518398 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
1571618399 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
1571718400 .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
15718 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18401 .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
1571918402 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1572018403 } },
1572118404 }, .{
......@@ -15745,10 +18428,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1574518428 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
1574618429 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1574718430 .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15748 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
18431 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1574918432 else => unreachable,
15750 .e => 0b00000,
15751 .ne => 0b00100,
18433 .e => .eq,
18434 .ne => .neq,
1575218435 }) },
1575318436 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
1575418437 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
......@@ -15795,10 +18478,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1579518478 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
1579618479 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1579718480 .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15798 .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
18481 .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) {
1579918482 else => unreachable,
15800 .e => 0b00000,
15801 .ne => 0b00100,
18483 .e => .eq,
18484 .ne => .neq,
1580218485 }), ._ },
1580318486 .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
1580418487 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
......@@ -15850,7 +18533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1585018533 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
1585118534 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
1585218535 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
15853 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
18536 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1585418537 .{ ._, switch (cc) {
1585518538 else => unreachable,
1585618539 .e => ._np,
......@@ -15910,7 +18593,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1591018593 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
1591118594 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
1591218595 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
15913 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
18596 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1591418597 .{ ._, switch (cc) {
1591518598 else => unreachable,
1591618599 .e => ._np,
......@@ -15971,7 +18654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1597118654 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
1597218655 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
1597318656 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
15974 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
18657 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1597518658 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
1597618659 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
1597718660 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
......@@ -16021,7 +18704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1602118704 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
1602218705 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
1602318706 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
16024 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
18707 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1602518708 .{ ._, switch (cc) {
1602618709 else => unreachable,
1602718710 .e => ._np,
......@@ -16081,7 +18764,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1608118764 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
1608218765 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
1608318766 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
16084 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
18767 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1608518768 .{ ._, switch (cc) {
1608618769 else => unreachable,
1608718770 .e => ._np,
......@@ -16142,7 +18825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1614218825 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
1614318826 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
1614418827 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
16145 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
18828 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1614618829 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
1614718830 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
1614818831 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
......@@ -16197,7 +18880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1619718880 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1619818881 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1619918882 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16200 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
18883 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1620118884 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1620218885 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1620318886 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16242,7 +18925,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1624218925 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1624318926 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1624418927 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16245 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
18928 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1624618929 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1624718930 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1624818931 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16287,7 +18970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1628718970 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1628818971 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1628918972 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16290 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
18973 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1629118974 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1629218975 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1629318976 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16332,7 +19015,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1633219015 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1633319016 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1633419017 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16335 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
19018 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1633619019 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1633719020 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1633819021 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16377,7 +19060,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1637719060 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1637819061 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1637919062 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16380 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
19063 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1638119064 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1638219065 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1638319066 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16422,7 +19105,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1642219105 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1642319106 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1642419107 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16425 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
19108 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1642619109 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1642719110 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1642819111 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16466,7 +19149,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1646619149 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1646719150 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1646819151 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16469 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
19152 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1647019153 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1647119154 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1647219155 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16521,7 +19204,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1652119204 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1652219205 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1652319206 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16524 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
19207 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1652519208 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1652619209 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1652719210 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16576,7 +19259,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1657619259 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1657719260 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1657819261 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16579 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
19262 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1658019263 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1658119264 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1658219265 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16631,7 +19314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1663119314 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1663219315 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1663319316 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16634 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
19317 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1663519318 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1663619319 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1663719320 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16686,7 +19369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1668619369 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1668719370 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1668819371 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16689 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
19372 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1669019373 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1669119374 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1669219375 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16741,7 +19424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1674119424 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1674219425 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1674319426 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16744 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
19427 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1674519428 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1674619429 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1674719430 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -18419,7 +21102,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1841921102 .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
1842021103 .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
1842121104 .{ ._, ._c, .set, .tmp1b, ._, ._, ._ },
18422 .{ ._, .fromCondition(switch (cc) {
21105 .{ ._, .fromCond(switch (cc) {
1842321106 else => unreachable,
1842421107 .l, .ge, .b, .ae => cc,
1842521108 .le, .g, .be, .a => cc.commute(),
......@@ -18979,8 +21662,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1897921662 .{ .src = .{ .to_sse, .to_sse } },
1898021663 },
1898121664 .extra_temps = .{
18982 .{ .kind = .{ .rc = .sse } },
18983 .{ .kind = .{ .rc = .sse } },
21665 .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
21666 .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
1898421667 .unused,
1898521668 .unused,
1898621669 .unused,
......@@ -18996,9 +21679,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1899621679 } }},
1899721680 .clobbers = .{ .eflags = true },
1899821681 .each = .{ .once = &.{
18999 .{ ._, .vp_, .unpcklwd, .tmp0x, .src0x, .src1x, ._ },
19000 .{ ._, .v_ps, .cvtph2, .tmp0x, .tmp0x, ._, ._ },
19001 .{ ._, .v_, .movshdup, .tmp1x, .tmp0x, ._, ._ },
21682 .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
21683 .{ ._, .v_ps, .cvtph2, .tmp1x, .src1q, ._, ._ },
1900221684 .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1x, ._, ._ },
1900321685 } },
1900421686 }, .{
......@@ -19197,35 +21879,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1919721879 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
1919821880 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1919921881 } },
19200 }, .{
19201 .required_features = .{ .x87, .cmov, null, null },
19202 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
19203 .patterns = &.{
19204 .{ .src = .{ .mem, .mem } },
19205 },
19206 .extra_temps = .{
19207 .{ .type = .f80, .kind = .{ .reg = .st6 } },
19208 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19209 .unused,
19210 .unused,
19211 .unused,
19212 .unused,
19213 .unused,
19214 .unused,
19215 .unused,
19216 },
19217 .dst_temps = .{.{ .cc = switch (cc) {
19218 else => unreachable,
19219 .e => .z_and_np,
19220 .ne => .nz_or_p,
19221 } }},
19222 .clobbers = .{ .eflags = true },
19223 .each = .{ .once = &.{
19224 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
19225 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19226 .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ },
19227 .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
19228 } },
1922921882 }, .{
1923021883 .required_features = .{ .x87, .cmov, null, null },
1923121884 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
......@@ -19479,46 +22132,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1947922132 .switch_dispatch => try cg.airSwitchDispatch(inst),
1948022133 .@"try", .try_cold => try cg.airTry(inst),
1948122134 .try_ptr, .try_ptr_cold => try cg.airTryPtr(inst),
19482 .dbg_stmt => if (use_old) try cg.airDbgStmt(inst) else {
22135 .dbg_stmt => if (cg.debug_output != .none) {
1948322136 const dbg_stmt = air_datas[@intFromEnum(inst)].dbg_stmt;
1948422137 _ = try cg.addInst(.{
1948522138 .tag = .pseudo,
19486 .ops = .pseudo_dbg_line_line_column,
22139 .ops = .pseudo_dbg_line_stmt_line_column,
1948722140 .data = .{ .line_column = .{
1948822141 .line = dbg_stmt.line,
1948922142 .column = dbg_stmt.column,
1949022143 } },
1949122144 });
1949222145 },
19493 .dbg_empty_stmt => if (use_old) try cg.airDbgEmptyStmt() else {
22146 .dbg_empty_stmt => if (cg.debug_output != .none) {
1949422147 if (cg.mir_instructions.len > 0) {
1949522148 const prev_mir_op = &cg.mir_instructions.items(.ops)[cg.mir_instructions.len - 1];
19496 if (prev_mir_op.* == .pseudo_dbg_line_stmt_line_column)
19497 prev_mir_op.* = .pseudo_dbg_line_line_column;
22149 if (prev_mir_op.* == .pseudo_dbg_line_line_column)
22150 prev_mir_op.* = .pseudo_dbg_line_stmt_line_column;
1949822151 }
1949922152 try cg.asmOpOnly(.{ ._, .nop });
1950022153 },
19501 .dbg_inline_block => if (use_old) try cg.airDbgInlineBlock(inst) else {
22154 .dbg_inline_block => {
1950222155 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
1950322156 const extra = cg.air.extraData(Air.DbgInlineBlock, ty_pl.payload);
1950422157 const old_inline_func = cg.inline_func;
1950522158 defer cg.inline_func = old_inline_func;
1950622159 cg.inline_func = extra.data.func;
19507 _ = try cg.addInst(.{
22160 if (cg.debug_output != .none) _ = try cg.addInst(.{
1950822161 .tag = .pseudo,
1950922162 .ops = .pseudo_dbg_enter_inline_func,
1951022163 .data = .{ .func = extra.data.func },
1951122164 });
1951222165 try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));
19513 _ = try cg.addInst(.{
22166 if (cg.debug_output != .none) _ = try cg.addInst(.{
1951422167 .tag = .pseudo,
1951522168 .ops = .pseudo_dbg_leave_inline_func,
1951622169 .data = .{ .func = old_inline_func },
1951722170 });
1951822171 },
19519 .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline => if (use_old) try cg.airDbgVar(inst) else {
22172 .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline => if (use_old) try cg.airDbgVar(inst) else if (cg.debug_output != .none) {
1952022173 const pl_op = air_datas[@intFromEnum(inst)].pl_op;
1952122174 var ops = try cg.tempsFromOperands(inst, .{pl_op.operand});
22175 var mcv = ops[0].tracking(cg).short;
22176 switch (mcv) {
22177 else => {},
22178 .eflags => |cc| switch (cc) {
22179 else => {},
22180 // These values would self destruct. Maybe we make them use their
22181 // turing complete dwarf expression interpreters for once?
22182 .z_and_np, .nz_or_p => {
22183 try cg.spillEflagsIfOccupied();
22184 mcv = ops[0].tracking(cg).short;
22185 },
22186 },
22187 }
1952222188 try cg.genLocalDebugInfo(inst, ops[0].tracking(cg).short);
1952322189 try ops[0].die(cg);
1952422190 },
......@@ -20398,19 +23064,21 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok
2039823064 };
2039923065
2040023066 if (reg_ok) need_mem: {
20401 if (std.math.isPowerOfTwo(abi_size) and abi_size <= @as(u32, switch (ty.zigTypeTag(zcu)) {
23067 if (std.math.isPowerOfTwo(abi_size) and abi_size <= @as(u32, max_abi_size: switch (ty.zigTypeTag(zcu)) {
2040223068 .float => switch (ty.floatBits(self.target.*)) {
2040323069 16, 32, 64, 128 => 16,
2040423070 80 => break :need_mem,
2040523071 else => unreachable,
2040623072 },
20407 .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) {
20408 .float => switch (ty.childType(zcu).floatBits(self.target.*)) {
23073 .vector => {
23074 const elem_ty = ty.childType(zcu);
23075 break :max_abi_size if (elem_ty.toIntern() == .bool_type)
23076 8
23077 else if (self.floatBits(elem_ty)) |float_bits| switch (float_bits) {
2040923078 16, 32, 64, 128 => self.vectorSize(.float),
2041023079 80 => break :need_mem,
2041123080 else => unreachable,
20412 },
20413 else => self.vectorSize(.int),
23081 } else self.vectorSize(.int);
2041423082 },
2041523083 else => 8,
2041623084 })) {
......@@ -20427,17 +23095,18 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok
2042723095fn regClassForType(self: *CodeGen, ty: Type) Register.Class {
2042823096 const pt = self.pt;
2042923097 const zcu = pt.zcu;
20430 return switch (ty.zigTypeTag(zcu)) {
20431 .float => switch (ty.floatBits(self.target.*)) {
20432 80 => .x87,
20433 else => .sse,
20434 },
20435 .vector => switch (ty.childType(zcu).toIntern()) {
20436 .bool_type => .general_purpose,
20437 else => .sse,
20438 },
20439 else => .general_purpose,
23098 if (self.floatBits(ty)) |float_bits| return switch (float_bits) {
23099 80 => .x87,
23100 else => .sse,
2044023101 };
23102 if (!ty.isVector(zcu)) return .general_purpose;
23103 const elem_ty = ty.childType(zcu);
23104 return if (elem_ty.toIntern() == .bool_type)
23105 .general_purpose
23106 else if (self.floatBits(elem_ty) == 80)
23107 .x87
23108 else
23109 .sse;
2044123110}
2044223111
2044323112fn regSetForRegClass(rc: Register.Class) RegisterManager.RegisterBitSet {
......@@ -20725,7 +23394,7 @@ fn airFptrunc(self: *CodeGen, inst: Air.Inst.Index) !void {
2072523394 .{ .v_, .cvtps2ph },
2072623395 dst_reg,
2072723396 mat_src_reg.to128(),
20728 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
23397 bits.RoundMode.imm(.{}),
2072923398 );
2073023399 },
2073123400 else => unreachable,
......@@ -24896,26 +27565,7 @@ fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
2489627565 return self.floatSign(inst, tag, un_op, ty);
2489727566}
2489827567
24899const RoundMode = packed struct(u5) {
24900 mode: enum(u4) {
24901 /// Round to nearest (even)
24902 nearest = 0b0_00,
24903 /// Round down (toward -∞)
24904 down = 0b0_01,
24905 /// Round up (toward +∞)
24906 up = 0b0_10,
24907 /// Round toward zero (truncate)
24908 zero = 0b0_11,
24909 /// Use current rounding mode of MXCSR.RC
24910 mxcsr = 0b1_00,
24911 },
24912 precision: enum(u1) {
24913 normal = 0b0,
24914 inexact = 0b1,
24915 } = .normal,
24916};
24917
24918fn airRound(self: *CodeGen, inst: Air.Inst.Index, mode: RoundMode) !void {
27568fn airRound(self: *CodeGen, inst: Air.Inst.Index, mode: bits.RoundMode) !void {
2491927569 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2492027570 const ty = self.typeOf(un_op);
2492127571
......@@ -24972,7 +27622,7 @@ fn getRoundTag(self: *CodeGen, ty: Type) ?Mir.Inst.FixedTag {
2497227622 } else null;
2497327623}
2497427624
24975fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode) !MCValue {
27625fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: bits.RoundMode) !MCValue {
2497627626 const pt = self.pt;
2497727627 const zcu = pt.zcu;
2497827628 if (self.getRoundTag(ty)) |_| return .none;
......@@ -24997,7 +27647,7 @@ fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode)
2499727647 } }, &.{ty}, &.{src_mcv}, .{});
2499827648}
2499927649
25000fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: RoundMode) !void {
27650fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: bits.RoundMode) !void {
2500127651 const pt = self.pt;
2500227652 const mir_tag = self.getRoundTag(ty) orelse {
2500327653 const result = try self.genRoundLibcall(ty, src_mcv, mode);
......@@ -25011,7 +27661,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
2501127661 dst_alias,
2501227662 dst_alias,
2501327663 try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }),
25014 .u(@as(u5, @bitCast(mode))),
27664 mode.imm(),
2501527665 ) else try self.asmRegisterRegisterRegisterImmediate(
2501627666 mir_tag,
2501727667 dst_alias,
......@@ -25020,13 +27670,13 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
2502027670 src_mcv.getReg().?
2502127671 else
2502227672 try self.copyToTmpRegister(ty, src_mcv), abi_size),
25023 .u(@as(u5, @bitCast(mode))),
27673 mode.imm(),
2502427674 ),
2502527675 else => if (src_mcv.isBase()) try self.asmRegisterMemoryImmediate(
2502627676 mir_tag,
2502727677 dst_alias,
2502827678 try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }),
25029 .u(@as(u5, @bitCast(mode))),
27679 mode.imm(),
2503027680 ) else try self.asmRegisterRegisterImmediate(
2503127681 mir_tag,
2503227682 dst_alias,
......@@ -25034,7 +27684,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
2503427684 src_mcv.getReg().?
2503527685 else
2503627686 try self.copyToTmpRegister(ty, src_mcv), abi_size),
25037 .u(@as(u5, @bitCast(mode))),
27687 mode.imm(),
2503827688 ),
2503927689 }
2504027690}
......@@ -25294,7 +27944,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
2529427944 .{ .v_, .cvtps2ph },
2529527945 dst_reg,
2529627946 dst_reg,
25297 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
27947 bits.RoundMode.imm(.{}),
2529827948 );
2529927949 break :result dst_mcv;
2530027950 },
......@@ -25324,7 +27974,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
2532427974 .{ .v_, .cvtps2ph },
2532527975 dst_reg,
2532627976 dst_reg,
25327 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
27977 bits.RoundMode.imm(.{}),
2532827978 );
2532927979 break :result dst_mcv;
2533027980 },
......@@ -25349,7 +27999,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
2534927999 .{ .v_, .cvtps2ph },
2535028000 dst_reg,
2535128001 wide_reg,
25352 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
28002 bits.RoundMode.imm(.{}),
2535328003 );
2535428004 break :result dst_mcv;
2535528005 },
......@@ -27613,7 +30263,7 @@ fn genBinOp(
2761330263 .{ .v_, .cvtps2ph },
2761430264 dst_reg,
2761530265 dst_reg,
27616 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
30266 bits.RoundMode.imm(.{}),
2761730267 );
2761830268 break :adjusted .{ .register = dst_reg };
2761930269 },
......@@ -28086,14 +30736,14 @@ fn genBinOp(
2808630736 dst_reg,
2808730737 dst_reg,
2808830738 dst_reg,
28089 .u(@as(u5, @bitCast(RoundMode{
30739 bits.RoundMode.imm(.{
2809030740 .mode = switch (air_tag) {
2809130741 .div_trunc => .zero,
2809230742 .div_floor => .down,
2809330743 else => unreachable,
2809430744 },
2809530745 .precision = .inexact,
28096 }))),
30746 }),
2809730747 ),
2809830748 else => {},
2809930749 }
......@@ -28101,7 +30751,7 @@ fn genBinOp(
2810130751 .{ .v_, .cvtps2ph },
2810230752 dst_reg,
2810330753 dst_reg,
28104 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
30754 bits.RoundMode.imm(.{}),
2810530755 );
2810630756 return dst_mcv;
2810730757 },
......@@ -28529,7 +31179,7 @@ fn genBinOp(
2852931179 .{ .v_, .cvtps2ph },
2853031180 dst_reg,
2853131181 dst_reg,
28532 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
31182 bits.RoundMode.imm(.{}),
2853331183 );
2853431184 return dst_mcv;
2853531185 },
......@@ -28581,7 +31231,7 @@ fn genBinOp(
2858131231 .{ .v_, .cvtps2ph },
2858231232 dst_reg,
2858331233 dst_reg,
28584 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
31234 bits.RoundMode.imm(.{}),
2858531235 );
2858631236 return dst_mcv;
2858731237 },
......@@ -28624,7 +31274,7 @@ fn genBinOp(
2862431274 .{ .v_, .cvtps2ph },
2862531275 dst_reg,
2862631276 dst_reg,
28627 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
31277 bits.RoundMode.imm(.{}),
2862831278 );
2862931279 return dst_mcv;
2863031280 },
......@@ -28667,7 +31317,7 @@ fn genBinOp(
2866731317 .{ .v_, .cvtps2ph },
2866831318 dst_reg,
2866931319 dst_reg.to256(),
28670 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
31320 bits.RoundMode.imm(.{}),
2867131321 );
2867231322 return dst_mcv;
2867331323 },
......@@ -28932,7 +31582,7 @@ fn genBinOp(
2893231582 mask_reg,
2893331583 rhs_copy_reg,
2893431584 rhs_copy_reg,
28935 .u(3), // unord
31585 bits.VexFloatPredicate.imm(.unord),
2893631586 );
2893731587 try self.asmRegisterRegisterRegisterRegister(
2893831588 @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) {
......@@ -28999,7 +31649,7 @@ fn genBinOp(
2899931649 }),
2900031650 mask_reg,
2900131651 mask_reg,
29002 .u(if (has_blend) 3 else 7), // unord, ord
31652 bits.SseFloatPredicate.imm(if (has_blend) .unord else .ord),
2900331653 );
2900431654 if (has_blend) try self.asmRegisterRegisterRegister(
2900531655 @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) {
......@@ -29836,24 +32486,10 @@ fn airArg(self: *CodeGen, inst: Air.Inst.Index) !void {
2983632486 return self.finishAir(inst, result, .{ .none, .none, .none });
2983732487}
2983832488
29839fn airDbgArg(self: *CodeGen, inst: Air.Inst.Index) !void {
29840 // skip zero-bit arguments as they don't have a corresponding arg instruction
29841 var arg_index = self.arg_index;
29842 while (self.args[arg_index] == .none) arg_index += 1;
29843 self.arg_index = arg_index + 1;
29844
29845 if (self.debug_output != .none) {
29846 const name = self.air.instructions.items(.data)[@intFromEnum(inst)].arg.name;
29847 if (name != .none) try self.genLocalDebugInfo(inst, self.getResolvedInstValue(inst).short);
29848 if (self.liveness.isUnused(inst)) try self.processDeath(inst);
29849 }
29850 for (self.args[self.arg_index..]) |arg| {
29851 if (arg != .none) break;
29852 } else try self.airDbgVarArgs();
29853}
29854
2985532489fn airDbgVarArgs(self: *CodeGen) !void {
29856 if (self.pt.zcu.typeToFunc(self.fn_type).?.is_var_args) try self.asmPseudo(.pseudo_dbg_var_args_none);
32490 if (self.debug_output == .none) return;
32491 if (!self.pt.zcu.typeToFunc(self.fn_type).?.is_var_args) return;
32492 try self.asmPseudo(.pseudo_dbg_var_args_none);
2985732493}
2985832494
2985932495fn genLocalDebugInfo(
......@@ -30909,44 +33545,6 @@ fn genTry(
3090933545 return result;
3091033546}
3091133547
30912fn airDbgStmt(self: *CodeGen, inst: Air.Inst.Index) !void {
30913 const dbg_stmt = self.air.instructions.items(.data)[@intFromEnum(inst)].dbg_stmt;
30914 _ = try self.addInst(.{
30915 .tag = .pseudo,
30916 .ops = .pseudo_dbg_line_stmt_line_column,
30917 .data = .{ .line_column = .{
30918 .line = dbg_stmt.line,
30919 .column = dbg_stmt.column,
30920 } },
30921 });
30922}
30923
30924fn airDbgEmptyStmt(self: *CodeGen) !void {
30925 if (self.mir_instructions.len > 0 and
30926 self.mir_instructions.items(.ops)[self.mir_instructions.len - 1] == .pseudo_dbg_line_stmt_line_column)
30927 self.mir_instructions.items(.ops)[self.mir_instructions.len - 1] = .pseudo_dbg_line_line_column;
30928 try self.asmOpOnly(.{ ._, .nop });
30929}
30930
30931fn airDbgInlineBlock(self: *CodeGen, inst: Air.Inst.Index) !void {
30932 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
30933 const extra = self.air.extraData(Air.DbgInlineBlock, ty_pl.payload);
30934 const old_inline_func = self.inline_func;
30935 defer self.inline_func = old_inline_func;
30936 self.inline_func = extra.data.func;
30937 _ = try self.addInst(.{
30938 .tag = .pseudo,
30939 .ops = .pseudo_dbg_enter_inline_func,
30940 .data = .{ .func = extra.data.func },
30941 });
30942 try self.lowerBlock(inst, @ptrCast(self.air.extra[extra.end..][0..extra.data.body_len]));
30943 _ = try self.addInst(.{
30944 .tag = .pseudo,
30945 .ops = .pseudo_dbg_leave_inline_func,
30946 .data = .{ .func = old_inline_func },
30947 });
30948}
30949
3095033548fn airDbgVar(self: *CodeGen, inst: Air.Inst.Index) !void {
3095133549 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
3095233550 try self.genLocalDebugInfo(inst, try self.resolveInst(pl_op.operand));
......@@ -31392,14 +33990,6 @@ fn airLoop(self: *CodeGen, inst: Air.Inst.Index) !void {
3139233990 try self.genBodyBlock(body);
3139333991}
3139433992
31395fn airBlock(self: *CodeGen, inst: Air.Inst.Index) !void {
31396 const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
31397 const extra = self.air.extraData(Air.Block, ty_pl.payload);
31398 try self.asmPseudo(.pseudo_dbg_enter_block_none);
31399 try self.lowerBlock(inst, @ptrCast(self.air.extra[extra.end..][0..extra.data.body_len]));
31400 try self.asmPseudo(.pseudo_dbg_leave_block_none);
31401}
31402
3140333993fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index) !void {
3140433994 // A block is a setup to be able to jump to the end.
3140533995 const inst_tracking_i = self.inst_tracking.count();
......@@ -32653,10 +35243,21 @@ const MoveStrategy = union(enum) {
3265335243 else => dst_reg,
3265435244 .lea => if (dst_reg.bitSize() >= 32) dst_reg else dst_reg.to32(),
3265535245 }, src_mem),
32656 .x87_load_store => {
35246 .x87_load_store => if (dst_reg != .st0 and self.register_manager.isKnownRegFree(.st7)) {
35247 try self.asmMemory(.{ .f_, .ld }, src_mem);
35248 switch (dst_reg) {
35249 .st1, .st2, .st3, .st4, .st5, .st6 => try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)),
35250 .st7 => try self.asmOpOnly(.{ .f_cstp, .in }),
35251 else => unreachable,
35252 }
35253 } else {
35254 try self.asmRegister(.{ .f_p, .st }, dst_reg);
3265735255 try self.asmMemory(.{ .f_, .ld }, src_mem);
32658 assert(dst_reg != .st7);
32659 try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1));
35256 switch (dst_reg) {
35257 .st0 => {},
35258 .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, dst_reg),
35259 else => unreachable,
35260 }
3266035261 },
3266135262 .insert_extract => |ie| if (ie.insert[0] != .p_w or self.hasFeature(.sse2))
3266235263 try self.asmRegisterMemoryImmediate(ie.insert, dst_reg, src_mem, .u(0))
......@@ -32688,9 +35289,22 @@ const MoveStrategy = union(enum) {
3268835289 pub fn write(strat: MoveStrategy, self: *CodeGen, dst_mem: Memory, src_reg: Register) !void {
3268935290 switch (strat) {
3269035291 .move => |tag| try self.asmMemoryRegister(tag, dst_mem, src_reg),
32691 .x87_load_store => {
35292 .x87_load_store => if (self.register_manager.isKnownRegFree(.st7)) {
3269235293 try self.asmRegister(.{ .f_, .ld }, src_reg);
3269335294 try self.asmMemory(.{ .f_p, .st }, dst_mem);
35295 } else {
35296 switch (src_reg) {
35297 .st0 => {},
35298 .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, src_reg),
35299 else => unreachable,
35300 }
35301 try self.asmMemory(.{ .f_p, .st }, dst_mem);
35302 try self.asmMemory(.{ .f_, .ld }, dst_mem);
35303 switch (src_reg) {
35304 .st0 => {},
35305 .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, src_reg),
35306 else => unreachable,
35307 }
3269435308 },
3269535309 .insert_extract, .vex_insert_extract => |ie| if (ie.extract[0] != .p_w or self.hasFeature(.sse4_1))
3269635310 try self.asmMemoryRegisterImmediate(ie.extract, dst_mem, src_reg, .u(0))
......@@ -33247,10 +35861,25 @@ fn genSetReg(
3324735861 .general_purpose, .segment => unreachable,
3324835862 .x87 => switch (src_reg) {
3324935863 .st0 => try self.asmRegister(.{ .f_, .st }, dst_reg),
33250 .st1, .st2, .st3, .st4, .st5, .st6 => {
33251 try self.asmRegister(.{ .f_, .ld }, src_reg);
33252 assert(dst_reg != .st7);
33253 try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1));
35864 .st1, .st2, .st3, .st4, .st5, .st6 => switch (dst_reg) {
35865 .st0 => {
35866 try self.asmRegister(.{ .f_p, .st }, .st0);
35867 try self.asmRegister(.{ .f_, .ld }, @enumFromInt(@intFromEnum(src_reg) - 1));
35868 },
35869 .st2, .st3, .st4, .st5, .st6 => if (self.register_manager.isKnownRegFree(.st7)) {
35870 try self.asmRegister(.{ .f_, .ld }, src_reg);
35871 try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1));
35872 } else {
35873 try self.asmRegister(.{ .f_, .xch }, src_reg);
35874 try self.asmRegister(.{ .f_, .xch }, dst_reg);
35875 try self.asmRegister(.{ .f_, .xch }, src_reg);
35876 },
35877 .st7 => {
35878 if (!self.register_manager.isKnownRegFree(.st7)) try self.asmRegister(.{ .f_, .free }, dst_reg);
35879 try self.asmRegister(.{ .f_, .ld }, src_reg);
35880 try self.asmOpOnly(.{ .f_cstp, .in });
35881 },
35882 else => unreachable,
3325435883 },
3325535884 else => unreachable,
3325635885 },
......@@ -33276,10 +35905,14 @@ fn genSetReg(
3327635905 .base = .{ .frame = frame_index },
3327735906 .mod = .{ .rm = .{ .size = .fromSize(abi_size) } },
3327835907 }, registerAlias(src_reg, abi_size));
35908 switch (frame_size) {
35909 else => {},
35910 8 => try self.asmRegisterRegister(.{ ._ps, .xor }, dst_reg.to128(), dst_reg.to128()),
35911 }
3327935912 try self.asmRegisterMemory(switch (frame_size) {
3328035913 4 => .{ ._ss, .mov },
3328135914 8 => .{ ._ps, .movl },
33282 16 => .{ ._ps, .mov },
35915 16 => .{ ._ps, .mova },
3328335916 else => unreachable,
3328435917 }, dst_reg.to128(), .{
3328535918 .base = .{ .frame = frame_index },
......@@ -33292,7 +35925,26 @@ fn genSetReg(
3329235925 .{ .register = try self.copyToTmpRegister(ty, src_mcv) },
3329335926 opts,
3329435927 ),
33295 .x87, .mmx, .ip, .cr, .dr => unreachable,
35928 .x87 => {
35929 const frame_index = try self.allocFrameIndex(.init(.{
35930 .size = 16,
35931 .alignment = .@"16",
35932 }));
35933 try MoveStrategy.write(.x87_load_store, self, .{
35934 .base = .{ .frame = frame_index },
35935 .mod = .{ .rm = .{ .size = .tbyte } },
35936 }, src_reg);
35937 try self.asmRegisterMemory(if (self.hasFeature(.avx))
35938 .{ .v_dqa, .mov }
35939 else if (self.hasFeature(.sse2))
35940 .{ ._dqa, .mov }
35941 else
35942 .{ ._ps, .mova }, dst_reg.to128(), .{
35943 .base = .{ .frame = frame_index },
35944 .mod = .{ .rm = .{ .size = .xword } },
35945 });
35946 },
35947 .mmx, .ip, .cr, .dr => unreachable,
3329635948 .sse => try self.asmRegisterRegister(
3329735949 @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) {
3329835950 else => switch (abi_size) {
......@@ -37793,7 +40445,7 @@ fn resolveCallingConventionValues(
3779340445 else if (ret_gpr.len >= 2 and ret_ty.isSliceAtRuntime(zcu))
3779440446 break :return_value .init(.{ .register_pair = ret_gpr[0..2].* }),
3779540447 .segment, .mmx, .ip, .cr, .dr => unreachable,
37796 .x87 => break :return_value .init(.{ .register = .st0 }),
40448 .x87 => if (ret_size <= 16) break :return_value .init(.{ .register = .st0 }),
3779740449 .sse => if (ret_size <= self.vectorSize(.float)) break :return_value .init(.{
3779840450 .register = registerAlias(abi.getCAbiSseReturnRegs(cc)[0], @max(ret_size, 16)),
3779940451 }),
......@@ -37828,7 +40480,7 @@ fn resolveCallingConventionValues(
3782840480 continue;
3782940481 },
3783040482 .segment, .mmx, .ip, .cr, .dr => unreachable,
37831 .x87 => if (param_x87.len >= 1) {
40483 .x87 => if (param_x87.len >= 1 and param_size <= 16) {
3783240484 arg.* = .{ .register = param_x87[0] };
3783340485 param_x87 = param_x87[1..];
3783440486 continue;
......@@ -37939,10 +40591,12 @@ fn registerAlias(reg: Register, size_bytes: u32) Register {
3793940591
3794040592fn memSize(self: *CodeGen, ty: Type) Memory.Size {
3794140593 const zcu = self.pt.zcu;
37942 return switch (ty.zigTypeTag(zcu)) {
37943 .float => .fromBitSize(ty.floatBits(self.target.*)),
37944 else => .fromSize(@intCast(ty.abiSize(zcu))),
37945 };
40594 return if (self.floatBits(ty)) |float_bits|
40595 .fromBitSize(float_bits)
40596 else if (ty.isVector(zcu) and ty.vectorLen(zcu) == 1 and self.floatBits(ty.childType(zcu)) == 80)
40597 .tbyte
40598 else
40599 .fromSize(@intCast(ty.abiSize(zcu)));
3794640600}
3794740601
3794840602fn splitType(self: *CodeGen, comptime parts_len: usize, ty: Type) ![parts_len]Type {
......@@ -39918,46 +42572,46 @@ const Select = struct {
3991842572 inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg),
3991942573 }
3992042574 }
39921 };
3992242575
39923 fn pass(spec: TempSpec) u2 {
39924 return switch (spec.kind) {
39925 .unused => 0,
39926 .reg => 1,
39927 else => 2,
39928 };
39929 }
42576 fn pass(kind: Kind) u2 {
42577 return switch (kind) {
42578 .unused => 0,
42579 .reg => 1,
42580 else => 2,
42581 };
42582 }
42583 };
3993042584
39931 fn create(spec: TempSpec, s: *Select) !Temp {
42585 fn create(spec: TempSpec, s: *Select) !struct { Temp, bool } {
3993242586 const cg = s.cg;
3993342587 return switch (spec.kind) {
3993442588 .unused => unreachable,
39935 .any => try cg.tempAlloc(spec.type),
39936 .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }),
39937 .ref => |ref| ref.deref(s),
39938 .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }),
39939 .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)),
42589 .any => .{ try cg.tempAlloc(spec.type), true },
42590 .cc => |cc| .{ try cg.tempInit(spec.type, .{ .eflags = cc }), true },
42591 .ref => |ref| .{ ref.deref(s), false },
42592 .reg => |reg| .{ try cg.tempInit(spec.type, .{ .register = reg }), true },
42593 .rc => |rc| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), true },
3994042594 .mut_rc => |ref_rc| {
3994142595 const temp = ref_rc.ref.deref(s);
3994242596 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
39943 .register => |reg| if (reg.class() == ref_rc.rc) return temp,
39944 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp,
42597 .register => |reg| if (reg.class() == ref_rc.rc) return .{ temp, false },
42598 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return .{ temp, false },
3994542599 else => {},
3994642600 };
39947 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc));
42601 return .{ try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc)), true };
3994842602 },
39949 .ref_mask => |ref_mask| ref_mask.ref.deref(s),
39950 .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)),
42603 .ref_mask => |ref_mask| .{ ref_mask.ref.deref(s), false },
42604 .rc_mask => |rc_mask| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), true },
3995142605 .mut_rc_mask => |ref_rc_mask| {
3995242606 const temp = ref_rc_mask.ref.deref(s);
3995342607 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
39954 .register => |reg| if (reg.class() == ref_rc_mask.rc) return temp,
39955 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return temp,
42608 .register => |reg| if (reg.class() == ref_rc_mask.rc) return .{ temp, false },
42609 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return .{ temp, false },
3995642610 else => {},
3995742611 };
39958 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc));
42612 return .{ try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc)), true };
3995942613 },
39960 .mem => try cg.tempAllocMem(spec.type),
42614 .mem => .{ try cg.tempAllocMem(spec.type), true },
3996142615 .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| {
3996242616 const pt = cg.pt;
3996342617 const zcu = pt.zcu;
......@@ -40022,13 +42676,16 @@ const Select = struct {
4002242676 })).toIntern(),
4002342677 .storage = .{ .repeated_elem = res_scalar_val.toIntern() },
4002442678 } })) else res_scalar_val;
40025 return try cg.tempMemFromValue(res_val);
42679 return .{ try cg.tempMemFromValue(res_val), true };
4002642680 },
40027 .symbol => |symbol| if (cg.bin_file.cast(.elf)) |elf_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
40028 .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib),
40029 } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
40030 .sym_index = try macho_file.getGlobalSymbol(symbol.name, symbol.lib),
40031 } }) else cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}),
42681 .symbol => |symbol| .{ try cg.tempInit(spec.type, .{ .lea_symbol = .{
42682 .sym_index = if (cg.bin_file.cast(.elf)) |elf_file|
42683 try elf_file.getGlobalSymbol(symbol.name, symbol.lib)
42684 else if (cg.bin_file.cast(.macho)) |macho_file|
42685 try macho_file.getGlobalSymbol(symbol.name, symbol.lib)
42686 else
42687 return cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}),
42688 } }), true },
4003242689 };
4003342690 }
4003442691 };
......@@ -40042,7 +42699,7 @@ const Select = struct {
4004242699 Select.Operand,
4004342700 Select.Operand,
4004442701 };
40045 const Label = enum { @"0:", @"1:", @"_" };
42702 const Label = enum { @"0:", @"1:", @"2:", @"_" };
4004642703 const Operand = struct {
4004742704 tag: Tag,
4004842705 base: Ref.Sized = .none,
......@@ -40272,6 +42929,8 @@ const Select = struct {
4027242929 const @"0f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp0, .size = .none } };
4027342930 const @"1b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp1, .size = .none } };
4027442931 const @"1f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp1, .size = .none } };
42932 const @"2b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp2, .size = .none } };
42933 const @"2f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp2, .size = .none } };
4027542934
4027642935 const tmp0b: Select.Operand = .{ .tag = .ref, .base = .tmp0b };
4027742936 const tmp0w: Select.Operand = .{ .tag = .ref, .base = .tmp0w };
......@@ -40390,14 +43049,24 @@ const Select = struct {
4039043049 fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand {
4039143050 return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm };
4039243051 }
40393 fn ui(imm: i32) Select.Operand {
40394 return .{ .tag = .uimm, .imm = imm };
43052 fn ui(imm: u32) Select.Operand {
43053 return .{ .tag = .uimm, .imm = @bitCast(imm) };
4039543054 }
4039643055 fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand {
4039743056 return .{ .tag = .uimm, .base = base, .adjust = adjust };
4039843057 }
40399 fn uia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand {
40400 return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = imm };
43058 fn uia(imm: u32, base: Ref.Sized, adjust: Adjust) Select.Operand {
43059 return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = @bitCast(imm) };
43060 }
43061
43062 fn rm(mode: bits.RoundMode) Select.Operand {
43063 return .{ .tag = .uimm, .imm = @intCast(mode.imm().unsigned) };
43064 }
43065 fn sp(pred: bits.SseFloatPredicate) Select.Operand {
43066 return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) };
43067 }
43068 fn vp(pred: bits.VexFloatPredicate) Select.Operand {
43069 return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) };
4040143070 }
4040243071
4040343072 fn lea(size: Memory.Size, base: Ref) Select.Operand {
......@@ -40705,6 +43374,7 @@ fn select(
4070543374 .ccc => cg.target.cCallingConvention().?,
4070643375 .zigcc => .auto,
4070743376 };
43377 assert(case.clobbers.eflags);
4070843378 const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: {
4070943379 const param_gpr = abi.getCAbiIntParamRegs(.auto);
4071043380 break :err_ret_trace_reg param_gpr[param_gpr.len - 1];
......@@ -40722,8 +43392,14 @@ fn select(
4072243392
4072343393 @memcpy(src_slots[0..src_temps.len], src_temps);
4072443394 std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]);
40725 for (1..3) |pass| for (tmp_slots, case.extra_temps) |*slot, spec| if (pass == spec.pass()) {
40726 slot.* = try spec.create(&s);
43395 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| {
43396 if (dst_kind.pass() != 1) continue;
43397 dst_temp.*, _ = try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s);
43398 }
43399 var tmp_owned: [tmp_slots.len]bool = @splat(false);
43400 for (1..3) |pass| for (tmp_slots, &tmp_owned, case.extra_temps) |*slot, *owned, spec| {
43401 if (spec.kind.pass() != pass) continue;
43402 slot.*, owned.* = try spec.create(&s);
4072743403 };
4072843404
4072943405 while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| {
......@@ -40734,8 +43410,10 @@ fn select(
4073443410
4073543411 if (case.clobbers.eflags) try cg.spillEflagsIfOccupied();
4073643412
40737 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind|
40738 dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s));
43413 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| {
43414 if (dst_kind.pass() != 2) continue;
43415 dst_temp.*, _ = try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s);
43416 }
4073943417 @memcpy(dst_slots[0..dst_temps.len], dst_temps);
4074043418
4074143419 switch (case.each) {
......@@ -40765,7 +43443,7 @@ fn select(
4076543443 }
4076643444 }
4076743445 for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s);
40768 for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg);
43446 for (tmp_owned, tmp_slots) |owned, temp| if (owned) try temp.die(cg);
4076943447 return;
4077043448 }
4077143449 }
src/arch/x86_64/Mir.zig+1-1
......@@ -467,7 +467,7 @@ pub const Inst = struct {
467467 /// Mask ___ Quadword
468468 k_q,
469469
470 pub fn fromCondition(cc: bits.Condition) Fixes {
470 pub fn fromCond(cc: bits.Condition) Fixes {
471471 return switch (cc) {
472472 inline else => |cc_tag| @field(Fixes, "_" ++ @tagName(cc_tag)),
473473 .z_and_np, .nz_or_p => unreachable,
src/arch/x86_64/bits.zig+166
......@@ -177,6 +177,172 @@ pub const Condition = enum(u5) {
177177 }
178178};
179179
180/// The immediate operand of vcvtps2ph.
181pub const RoundMode = packed struct(u5) {
182 mode: enum(u4) {
183 /// Round to nearest (even)
184 nearest = 0b0_00,
185 /// Round down (toward -∞)
186 down = 0b0_01,
187 /// Round up (toward +∞)
188 up = 0b0_10,
189 /// Round toward zero (truncate)
190 zero = 0b0_11,
191 /// Use current rounding mode of MXCSR.RC
192 mxcsr = 0b1_00,
193 } = .mxcsr,
194 precision: enum(u1) {
195 normal = 0b0,
196 inexact = 0b1,
197 } = .normal,
198
199 pub fn imm(mode: RoundMode) Immediate {
200 return .u(@as(@typeInfo(RoundMode).@"struct".backing_integer.?, @bitCast(mode)));
201 }
202};
203
204/// The immediate operand of cmppd, cmpps, cmpsd, and cmpss.
205pub const SseFloatPredicate = enum(u3) {
206 /// Equal (ordered, non-signaling)
207 eq,
208 /// Less-than (ordered, signaling)
209 lt,
210 /// Less-than-or-equal (ordered, signaling)
211 le,
212 /// Unordered (non-signaling)
213 unord,
214 /// Not-equal (unordered, non-signaling)
215 neq,
216 /// Not-less-than (unordered, signaling)
217 nlt,
218 /// Not-less-than-or-equal (unordered, signaling)
219 nle,
220 /// Ordered (non-signaling)
221 ord,
222
223 /// Equal (ordered, non-signaling)
224 pub const eq_oq: SseFloatPredicate = .eq;
225 /// Less-than (ordered, signaling)
226 pub const lt_os: SseFloatPredicate = .lt;
227 /// Less-than-or-equal (ordered, signaling)
228 pub const le_os: SseFloatPredicate = .le;
229 /// Unordered (non-signaling)
230 pub const unord_q: SseFloatPredicate = .unord;
231 /// Not-equal (unordered, non-signaling)
232 pub const neq_uq: SseFloatPredicate = .neq;
233 /// Not-less-than (unordered, signaling)
234 pub const nlt_us: SseFloatPredicate = .nlt;
235 /// Not-less-than-or-equal (unordered, signaling)
236 pub const nle_us: SseFloatPredicate = .nle;
237 /// Ordered (non-signaling)
238 pub const ord_q: SseFloatPredicate = .ord;
239
240 pub fn imm(pred: SseFloatPredicate) Immediate {
241 return .u(@intFromEnum(pred));
242 }
243};
244
245/// The immediate operand of vcmppd, vcmpps, vcmpsd, and vcmpss.
246pub const VexFloatPredicate = enum(u5) {
247 /// Equal (ordered, non-signaling)
248 eq_oq,
249 /// Less-than (ordered, signaling)
250 lt_os,
251 /// Less-than-or-equal (ordered, signaling)
252 le_os,
253 /// Unordered (non-signaling)
254 unord_q,
255 /// Not-equal (unordered, non-signaling)
256 neq_uq,
257 /// Not-less-than (unordered, signaling)
258 nlt_us,
259 /// Not-less-than-or-equal (unordered, signaling)
260 nle_us,
261 /// Ordered (non-signaling)
262 ord_q,
263 /// Equal (unordered, non-signaling)
264 eq_uq,
265 /// Not-greater-than-or-equal (unordered, signaling)
266 nge_us,
267 /// Not-greater-than (unordered, signaling)
268 ngt_us,
269 /// False (ordered, non-signaling)
270 false_oq,
271 /// Not-equal (ordered, non-signaling)
272 neq_oq,
273 /// Greater-than-or-equal (ordered, signaling)
274 ge_os,
275 /// Greater-than (ordered, signaling)
276 gt_os,
277 /// True (unordered, non-signaling)
278 true_uq,
279 /// Equal (unordered, non-signaling)
280 eq_os,
281 /// Less-than (ordered, non-signaling)
282 lt_oq,
283 /// Less-than-or-equal (ordered, non-signaling)
284 le_oq,
285 /// Unordered (signaling)
286 unord_s,
287 /// Not-equal (unordered, signaling)
288 neq_us,
289 /// Not-less-than (unordered, non-signaling)
290 nlt_uq,
291 /// Not-less-than-or-equal (unordered, non-signaling)
292 nle_uq,
293 /// Ordered (signaling)
294 ord_s,
295 /// Equal (unordered, signaling)
296 eq_us,
297 /// Not-greater-than-or-equal (unordered, non-signaling)
298 nge_uq,
299 /// Not-greater-than (unordered, non-signaling)
300 ngt_uq,
301 /// False (ordered, signaling)
302 false_os,
303 /// Not-equal (ordered, signaling)
304 neq_os,
305 /// Greater-than-or-equal (ordered, non-signaling)
306 ge_oq,
307 /// Greater-than (ordered, non-signaling)
308 gt_oq,
309 /// True (unordered, signaling)
310 true_us,
311
312 /// Equal (ordered, non-signaling)
313 pub const eq: VexFloatPredicate = .eq_oq;
314 /// Less-than (ordered, signaling)
315 pub const lt: VexFloatPredicate = .lt_os;
316 /// Less-than-or-equal (ordered, signaling)
317 pub const le: VexFloatPredicate = .le_os;
318 /// Unordered (non-signaling)
319 pub const unord: VexFloatPredicate = .unord_q;
320 /// Not-equal (unordered, non-signaling)
321 pub const neq: VexFloatPredicate = .neq_uq;
322 /// Not-less-than (unordered, signaling)
323 pub const nlt: VexFloatPredicate = .nlt_us;
324 /// Not-less-than-or-equal (unordered, signaling)
325 pub const nle: VexFloatPredicate = .nle_us;
326 /// Ordered (non-signaling)
327 pub const ord: VexFloatPredicate = .ord_q;
328 /// Not-greater-than-or-equal (unordered, signaling)
329 pub const nge: VexFloatPredicate = .nge_us;
330 /// Not-greater-than (unordered, signaling)
331 pub const ngt: VexFloatPredicate = .ngt_us;
332 /// False (ordered, non-signaling)
333 pub const @"false": VexFloatPredicate = .false_oq;
334 /// Greater-than-or-equal (ordered, signaling)
335 pub const ge: VexFloatPredicate = .ge_os;
336 /// Greater-than (ordered, signaling)
337 pub const gt: VexFloatPredicate = .gt_os;
338 /// True (unordered, non-signaling)
339 pub const @"true": VexFloatPredicate = .true_uq;
340
341 pub fn imm(pred: VexFloatPredicate) Immediate {
342 return .u(@intFromEnum(pred));
343 }
344};
345
180346pub const Register = enum(u8) {
181347 // zig fmt: off
182348 rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi,
test/behavior/maximum_minimum.zig+1-1
......@@ -121,8 +121,8 @@ test "@min/max for floats" {
121121 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
122122 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
123123 if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArm()) return error.SkipZigTest;
124 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
125124 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
125 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
126126
127127 const S = struct {
128128 fn doTheTest(comptime T: type) !void {
test/behavior/x86_64/build.zig+6
......@@ -35,6 +35,12 @@ pub fn build(b: *std.Build) void {
3535 .sse2,
3636 }),
3737 },
38 .{
39 .cpu_arch = .x86_64,
40 .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64 },
41 .cpu_features_add = std.Target.x86.featureSet(&.{.sahf}),
42 .cpu_features_sub = std.Target.x86.featureSet(&.{.cmov}),
43 },
3844 //.{
3945 // .cpu_arch = .x86_64,
4046 // .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64 },
test/behavior/x86_64/math.zig+2189-68
......@@ -73,14 +73,20 @@ inline fn boolOr(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
7373}
7474
7575// noinline for a more helpful stack trace
76noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected)) !void {
76noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected), comptime strict: bool) !void {
7777 const info = @typeInfo(@TypeOf(expected));
78 const unexpected = switch (switch (info) {
78 const unexpected = unexpected: switch (switch (info) {
7979 else => info,
8080 .vector => |vector| @typeInfo(vector.child),
8181 }) {
8282 else => expected != actual,
83 .float => boolOr(boolAnd(expected != actual, boolOr(expected == expected, actual == actual)), sign(expected) != sign(actual)),
83 .float => {
84 const unequal = boolAnd(expected != actual, boolOr(expected == expected, actual == actual));
85 break :unexpected switch (strict) {
86 false => unequal,
87 true => boolOr(unequal, sign(expected) != sign(actual)),
88 };
89 },
8490 };
8591 if (switch (info) {
8692 else => unexpected,
......@@ -88,43 +94,43 @@ noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected)) !void {
8894 }) return error.Unexpected;
8995}
9096test checkExpected {
91 if (checkExpected(nan(f16), nan(f16)) == error.Unexpected) return error.Unexpected;
92 if (checkExpected(nan(f16), -nan(f16)) != error.Unexpected) return error.Unexpected;
93 if (checkExpected(@as(f16, 0.0), @as(f16, 0.0)) == error.Unexpected) return error.Unexpected;
94 if (checkExpected(@as(f16, -0.0), @as(f16, -0.0)) == error.Unexpected) return error.Unexpected;
95 if (checkExpected(@as(f16, -0.0), @as(f16, 0.0)) != error.Unexpected) return error.Unexpected;
96 if (checkExpected(@as(f16, 0.0), @as(f16, -0.0)) != error.Unexpected) return error.Unexpected;
97
98 if (checkExpected(nan(f32), nan(f32)) == error.Unexpected) return error.Unexpected;
99 if (checkExpected(nan(f32), -nan(f32)) != error.Unexpected) return error.Unexpected;
100 if (checkExpected(@as(f32, 0.0), @as(f32, 0.0)) == error.Unexpected) return error.Unexpected;
101 if (checkExpected(@as(f32, -0.0), @as(f32, -0.0)) == error.Unexpected) return error.Unexpected;
102 if (checkExpected(@as(f32, -0.0), @as(f32, 0.0)) != error.Unexpected) return error.Unexpected;
103 if (checkExpected(@as(f32, 0.0), @as(f32, -0.0)) != error.Unexpected) return error.Unexpected;
104
105 if (checkExpected(nan(f64), nan(f64)) == error.Unexpected) return error.Unexpected;
106 if (checkExpected(nan(f64), -nan(f64)) != error.Unexpected) return error.Unexpected;
107 if (checkExpected(@as(f64, 0.0), @as(f64, 0.0)) == error.Unexpected) return error.Unexpected;
108 if (checkExpected(@as(f64, -0.0), @as(f64, -0.0)) == error.Unexpected) return error.Unexpected;
109 if (checkExpected(@as(f64, -0.0), @as(f64, 0.0)) != error.Unexpected) return error.Unexpected;
110 if (checkExpected(@as(f64, 0.0), @as(f64, -0.0)) != error.Unexpected) return error.Unexpected;
111
112 if (checkExpected(nan(f80), nan(f80)) == error.Unexpected) return error.Unexpected;
113 if (checkExpected(nan(f80), -nan(f80)) != error.Unexpected) return error.Unexpected;
114 if (checkExpected(@as(f80, 0.0), @as(f80, 0.0)) == error.Unexpected) return error.Unexpected;
115 if (checkExpected(@as(f80, -0.0), @as(f80, -0.0)) == error.Unexpected) return error.Unexpected;
116 if (checkExpected(@as(f80, -0.0), @as(f80, 0.0)) != error.Unexpected) return error.Unexpected;
117 if (checkExpected(@as(f80, 0.0), @as(f80, -0.0)) != error.Unexpected) return error.Unexpected;
118
119 if (checkExpected(nan(f128), nan(f128)) == error.Unexpected) return error.Unexpected;
120 if (checkExpected(nan(f128), -nan(f128)) != error.Unexpected) return error.Unexpected;
121 if (checkExpected(@as(f128, 0.0), @as(f128, 0.0)) == error.Unexpected) return error.Unexpected;
122 if (checkExpected(@as(f128, -0.0), @as(f128, -0.0)) == error.Unexpected) return error.Unexpected;
123 if (checkExpected(@as(f128, -0.0), @as(f128, 0.0)) != error.Unexpected) return error.Unexpected;
124 if (checkExpected(@as(f128, 0.0), @as(f128, -0.0)) != error.Unexpected) return error.Unexpected;
97 if (checkExpected(nan(f16), nan(f16), true) == error.Unexpected) return error.Unexpected;
98 if (checkExpected(nan(f16), -nan(f16), true) != error.Unexpected) return error.Unexpected;
99 if (checkExpected(@as(f16, 0.0), @as(f16, 0.0), true) == error.Unexpected) return error.Unexpected;
100 if (checkExpected(@as(f16, -0.0), @as(f16, -0.0), true) == error.Unexpected) return error.Unexpected;
101 if (checkExpected(@as(f16, -0.0), @as(f16, 0.0), true) != error.Unexpected) return error.Unexpected;
102 if (checkExpected(@as(f16, 0.0), @as(f16, -0.0), true) != error.Unexpected) return error.Unexpected;
103
104 if (checkExpected(nan(f32), nan(f32), true) == error.Unexpected) return error.Unexpected;
105 if (checkExpected(nan(f32), -nan(f32), true) != error.Unexpected) return error.Unexpected;
106 if (checkExpected(@as(f32, 0.0), @as(f32, 0.0), true) == error.Unexpected) return error.Unexpected;
107 if (checkExpected(@as(f32, -0.0), @as(f32, -0.0), true) == error.Unexpected) return error.Unexpected;
108 if (checkExpected(@as(f32, -0.0), @as(f32, 0.0), true) != error.Unexpected) return error.Unexpected;
109 if (checkExpected(@as(f32, 0.0), @as(f32, -0.0), true) != error.Unexpected) return error.Unexpected;
110
111 if (checkExpected(nan(f64), nan(f64), true) == error.Unexpected) return error.Unexpected;
112 if (checkExpected(nan(f64), -nan(f64), true) != error.Unexpected) return error.Unexpected;
113 if (checkExpected(@as(f64, 0.0), @as(f64, 0.0), true) == error.Unexpected) return error.Unexpected;
114 if (checkExpected(@as(f64, -0.0), @as(f64, -0.0), true) == error.Unexpected) return error.Unexpected;
115 if (checkExpected(@as(f64, -0.0), @as(f64, 0.0), true) != error.Unexpected) return error.Unexpected;
116 if (checkExpected(@as(f64, 0.0), @as(f64, -0.0), true) != error.Unexpected) return error.Unexpected;
117
118 if (checkExpected(nan(f80), nan(f80), true) == error.Unexpected) return error.Unexpected;
119 if (checkExpected(nan(f80), -nan(f80), true) != error.Unexpected) return error.Unexpected;
120 if (checkExpected(@as(f80, 0.0), @as(f80, 0.0), true) == error.Unexpected) return error.Unexpected;
121 if (checkExpected(@as(f80, -0.0), @as(f80, -0.0), true) == error.Unexpected) return error.Unexpected;
122 if (checkExpected(@as(f80, -0.0), @as(f80, 0.0), true) != error.Unexpected) return error.Unexpected;
123 if (checkExpected(@as(f80, 0.0), @as(f80, -0.0), true) != error.Unexpected) return error.Unexpected;
124
125 if (checkExpected(nan(f128), nan(f128), true) == error.Unexpected) return error.Unexpected;
126 if (checkExpected(nan(f128), -nan(f128), true) != error.Unexpected) return error.Unexpected;
127 if (checkExpected(@as(f128, 0.0), @as(f128, 0.0), true) == error.Unexpected) return error.Unexpected;
128 if (checkExpected(@as(f128, -0.0), @as(f128, -0.0), true) == error.Unexpected) return error.Unexpected;
129 if (checkExpected(@as(f128, -0.0), @as(f128, 0.0), true) != error.Unexpected) return error.Unexpected;
130 if (checkExpected(@as(f128, 0.0), @as(f128, -0.0), true) != error.Unexpected) return error.Unexpected;
125131}
126132
127fn Unary(comptime op: anytype) type {
133fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) type {
128134 return struct {
129135 // noinline so that `mem_arg` is on the stack
130136 noinline fn testArgKinds(
......@@ -151,9 +157,9 @@ fn Unary(comptime op: anytype) type {
151157 const expected = comptime op(Type, imm_arg);
152158 var reg_arg = mem_arg;
153159 _ = .{&reg_arg};
154 try checkExpected(expected, op(Type, reg_arg));
155 try checkExpected(expected, op(Type, mem_arg));
156 try checkExpected(expected, op(Type, imm_arg));
160 try checkExpected(expected, op(Type, reg_arg), opts.strict);
161 try checkExpected(expected, op(Type, mem_arg), opts.strict);
162 try checkExpected(expected, op(Type, imm_arg), opts.strict);
157163 }
158164 // noinline for a more helpful stack trace
159165 noinline fn testArgs(comptime Type: type, comptime imm_arg: Type) !void {
......@@ -1325,7 +1331,7 @@ fn Unary(comptime op: anytype) type {
13251331 };
13261332}
13271333
1328fn Binary(comptime op: anytype) type {
1334fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) type {
13291335 return struct {
13301336 // noinline so that `mem_lhs` and `mem_rhs` are on the stack
13311337 noinline fn testArgKinds(
......@@ -1355,14 +1361,14 @@ fn Binary(comptime op: anytype) type {
13551361 var reg_lhs = mem_lhs;
13561362 var reg_rhs = mem_rhs;
13571363 _ = .{ &reg_lhs, &reg_rhs };
1358 try checkExpected(expected, op(Type, reg_lhs, reg_rhs));
1359 try checkExpected(expected, op(Type, reg_lhs, mem_rhs));
1360 try checkExpected(expected, op(Type, reg_lhs, imm_rhs));
1361 try checkExpected(expected, op(Type, mem_lhs, reg_rhs));
1362 try checkExpected(expected, op(Type, mem_lhs, mem_rhs));
1363 try checkExpected(expected, op(Type, mem_lhs, imm_rhs));
1364 try checkExpected(expected, op(Type, imm_lhs, reg_rhs));
1365 try checkExpected(expected, op(Type, imm_lhs, mem_rhs));
1364 try checkExpected(expected, op(Type, reg_lhs, reg_rhs), opts.strict);
1365 try checkExpected(expected, op(Type, reg_lhs, mem_rhs), opts.strict);
1366 try checkExpected(expected, op(Type, reg_lhs, imm_rhs), opts.strict);
1367 try checkExpected(expected, op(Type, mem_lhs, reg_rhs), opts.strict);
1368 try checkExpected(expected, op(Type, mem_lhs, mem_rhs), opts.strict);
1369 try checkExpected(expected, op(Type, mem_lhs, imm_rhs), opts.strict);
1370 try checkExpected(expected, op(Type, imm_lhs, reg_rhs), opts.strict);
1371 try checkExpected(expected, op(Type, imm_lhs, mem_rhs), opts.strict);
13661372 }
13671373 // noinline for a more helpful stack trace
13681374 noinline fn testArgs(comptime Type: type, comptime imm_lhs: Type, comptime imm_rhs: Type) !void {
......@@ -1442,6 +1448,1719 @@ fn Binary(comptime op: anytype) type {
14421448 0x8b4bb7c2969e3b121cc1082c442f8b4330f0a50058438fed56447175bb10178607ecfe425cb54dacc25ef26810f3e04681de1844f1aa8d029aca75d658634806,
14431449 );
14441450 }
1451 fn testFloatTypes() !void {
1452 @setEvalBranchQuota(21_700);
1453
1454 try testArgs(f16, -nan(f16), -nan(f16));
1455 try testArgs(f16, -nan(f16), -inf(f16));
1456 try testArgs(f16, -nan(f16), -fmax(f16));
1457 try testArgs(f16, -nan(f16), -10.0);
1458 try testArgs(f16, -nan(f16), -1.0);
1459 try testArgs(f16, -nan(f16), -0.1);
1460 try testArgs(f16, -nan(f16), -fmin(f16));
1461 try testArgs(f16, -nan(f16), -tmin(f16));
1462 try testArgs(f16, -nan(f16), -0.0);
1463 try testArgs(f16, -nan(f16), 0.0);
1464 try testArgs(f16, -nan(f16), tmin(f16));
1465 try testArgs(f16, -nan(f16), fmin(f16));
1466 try testArgs(f16, -nan(f16), 0.1);
1467 try testArgs(f16, -nan(f16), 1.0);
1468 try testArgs(f16, -nan(f16), 10.0);
1469 try testArgs(f16, -nan(f16), fmax(f16));
1470 try testArgs(f16, -nan(f16), inf(f16));
1471 try testArgs(f16, -nan(f16), nan(f16));
1472
1473 try testArgs(f16, -inf(f16), -nan(f16));
1474 try testArgs(f16, -inf(f16), -inf(f16));
1475 try testArgs(f16, -inf(f16), -fmax(f16));
1476 try testArgs(f16, -inf(f16), -10.0);
1477 try testArgs(f16, -inf(f16), -1.0);
1478 try testArgs(f16, -inf(f16), -0.1);
1479 try testArgs(f16, -inf(f16), -fmin(f16));
1480 try testArgs(f16, -inf(f16), -tmin(f16));
1481 try testArgs(f16, -inf(f16), -0.0);
1482 try testArgs(f16, -inf(f16), 0.0);
1483 try testArgs(f16, -inf(f16), tmin(f16));
1484 try testArgs(f16, -inf(f16), fmin(f16));
1485 try testArgs(f16, -inf(f16), 0.1);
1486 try testArgs(f16, -inf(f16), 1.0);
1487 try testArgs(f16, -inf(f16), 10.0);
1488 try testArgs(f16, -inf(f16), fmax(f16));
1489 try testArgs(f16, -inf(f16), inf(f16));
1490 try testArgs(f16, -inf(f16), nan(f16));
1491
1492 try testArgs(f16, -fmax(f16), -nan(f16));
1493 try testArgs(f16, -fmax(f16), -inf(f16));
1494 try testArgs(f16, -fmax(f16), -fmax(f16));
1495 try testArgs(f16, -fmax(f16), -10.0);
1496 try testArgs(f16, -fmax(f16), -1.0);
1497 try testArgs(f16, -fmax(f16), -0.1);
1498 try testArgs(f16, -fmax(f16), -fmin(f16));
1499 try testArgs(f16, -fmax(f16), -tmin(f16));
1500 try testArgs(f16, -fmax(f16), -0.0);
1501 try testArgs(f16, -fmax(f16), 0.0);
1502 try testArgs(f16, -fmax(f16), tmin(f16));
1503 try testArgs(f16, -fmax(f16), fmin(f16));
1504 try testArgs(f16, -fmax(f16), 0.1);
1505 try testArgs(f16, -fmax(f16), 1.0);
1506 try testArgs(f16, -fmax(f16), 10.0);
1507 try testArgs(f16, -fmax(f16), fmax(f16));
1508 try testArgs(f16, -fmax(f16), inf(f16));
1509 try testArgs(f16, -fmax(f16), nan(f16));
1510
1511 try testArgs(f16, -10.0, -nan(f16));
1512 try testArgs(f16, -10.0, -inf(f16));
1513 try testArgs(f16, -10.0, -fmax(f16));
1514 try testArgs(f16, -10.0, -10.0);
1515 try testArgs(f16, -10.0, -1.0);
1516 try testArgs(f16, -10.0, -0.1);
1517 try testArgs(f16, -10.0, -fmin(f16));
1518 try testArgs(f16, -10.0, -tmin(f16));
1519 try testArgs(f16, -10.0, -0.0);
1520 try testArgs(f16, -10.0, 0.0);
1521 try testArgs(f16, -10.0, tmin(f16));
1522 try testArgs(f16, -10.0, fmin(f16));
1523 try testArgs(f16, -10.0, 0.1);
1524 try testArgs(f16, -10.0, 1.0);
1525 try testArgs(f16, -10.0, 10.0);
1526 try testArgs(f16, -10.0, fmax(f16));
1527 try testArgs(f16, -10.0, inf(f16));
1528 try testArgs(f16, -10.0, nan(f16));
1529
1530 try testArgs(f16, -1.0, -nan(f16));
1531 try testArgs(f16, -1.0, -inf(f16));
1532 try testArgs(f16, -1.0, -fmax(f16));
1533 try testArgs(f16, -1.0, -10.0);
1534 try testArgs(f16, -1.0, -1.0);
1535 try testArgs(f16, -1.0, -0.1);
1536 try testArgs(f16, -1.0, -fmin(f16));
1537 try testArgs(f16, -1.0, -tmin(f16));
1538 try testArgs(f16, -1.0, -0.0);
1539 try testArgs(f16, -1.0, 0.0);
1540 try testArgs(f16, -1.0, tmin(f16));
1541 try testArgs(f16, -1.0, fmin(f16));
1542 try testArgs(f16, -1.0, 0.1);
1543 try testArgs(f16, -1.0, 1.0);
1544 try testArgs(f16, -1.0, 10.0);
1545 try testArgs(f16, -1.0, fmax(f16));
1546 try testArgs(f16, -1.0, inf(f16));
1547 try testArgs(f16, -1.0, nan(f16));
1548
1549 try testArgs(f16, -0.1, -nan(f16));
1550 try testArgs(f16, -0.1, -inf(f16));
1551 try testArgs(f16, -0.1, -fmax(f16));
1552 try testArgs(f16, -0.1, -10.0);
1553 try testArgs(f16, -0.1, -1.0);
1554 try testArgs(f16, -0.1, -0.1);
1555 try testArgs(f16, -0.1, -fmin(f16));
1556 try testArgs(f16, -0.1, -tmin(f16));
1557 try testArgs(f16, -0.1, -0.0);
1558 try testArgs(f16, -0.1, 0.0);
1559 try testArgs(f16, -0.1, tmin(f16));
1560 try testArgs(f16, -0.1, fmin(f16));
1561 try testArgs(f16, -0.1, 0.1);
1562 try testArgs(f16, -0.1, 1.0);
1563 try testArgs(f16, -0.1, 10.0);
1564 try testArgs(f16, -0.1, fmax(f16));
1565 try testArgs(f16, -0.1, inf(f16));
1566 try testArgs(f16, -0.1, nan(f16));
1567
1568 try testArgs(f16, -fmin(f16), -nan(f16));
1569 try testArgs(f16, -fmin(f16), -inf(f16));
1570 try testArgs(f16, -fmin(f16), -fmax(f16));
1571 try testArgs(f16, -fmin(f16), -10.0);
1572 try testArgs(f16, -fmin(f16), -1.0);
1573 try testArgs(f16, -fmin(f16), -0.1);
1574 try testArgs(f16, -fmin(f16), -fmin(f16));
1575 try testArgs(f16, -fmin(f16), -tmin(f16));
1576 try testArgs(f16, -fmin(f16), -0.0);
1577 try testArgs(f16, -fmin(f16), 0.0);
1578 try testArgs(f16, -fmin(f16), tmin(f16));
1579 try testArgs(f16, -fmin(f16), fmin(f16));
1580 try testArgs(f16, -fmin(f16), 0.1);
1581 try testArgs(f16, -fmin(f16), 1.0);
1582 try testArgs(f16, -fmin(f16), 10.0);
1583 try testArgs(f16, -fmin(f16), fmax(f16));
1584 try testArgs(f16, -fmin(f16), inf(f16));
1585 try testArgs(f16, -fmin(f16), nan(f16));
1586
1587 try testArgs(f16, -tmin(f16), -nan(f16));
1588 try testArgs(f16, -tmin(f16), -inf(f16));
1589 try testArgs(f16, -tmin(f16), -fmax(f16));
1590 try testArgs(f16, -tmin(f16), -10.0);
1591 try testArgs(f16, -tmin(f16), -1.0);
1592 try testArgs(f16, -tmin(f16), -0.1);
1593 try testArgs(f16, -tmin(f16), -fmin(f16));
1594 try testArgs(f16, -tmin(f16), -tmin(f16));
1595 try testArgs(f16, -tmin(f16), -0.0);
1596 try testArgs(f16, -tmin(f16), 0.0);
1597 try testArgs(f16, -tmin(f16), tmin(f16));
1598 try testArgs(f16, -tmin(f16), fmin(f16));
1599 try testArgs(f16, -tmin(f16), 0.1);
1600 try testArgs(f16, -tmin(f16), 1.0);
1601 try testArgs(f16, -tmin(f16), 10.0);
1602 try testArgs(f16, -tmin(f16), fmax(f16));
1603 try testArgs(f16, -tmin(f16), inf(f16));
1604 try testArgs(f16, -tmin(f16), nan(f16));
1605
1606 try testArgs(f16, -0.0, -nan(f16));
1607 try testArgs(f16, -0.0, -inf(f16));
1608 try testArgs(f16, -0.0, -fmax(f16));
1609 try testArgs(f16, -0.0, -10.0);
1610 try testArgs(f16, -0.0, -1.0);
1611 try testArgs(f16, -0.0, -0.1);
1612 try testArgs(f16, -0.0, -fmin(f16));
1613 try testArgs(f16, -0.0, -tmin(f16));
1614 try testArgs(f16, -0.0, -0.0);
1615 try testArgs(f16, -0.0, 0.0);
1616 try testArgs(f16, -0.0, tmin(f16));
1617 try testArgs(f16, -0.0, fmin(f16));
1618 try testArgs(f16, -0.0, 0.1);
1619 try testArgs(f16, -0.0, 1.0);
1620 try testArgs(f16, -0.0, 10.0);
1621 try testArgs(f16, -0.0, fmax(f16));
1622 try testArgs(f16, -0.0, inf(f16));
1623 try testArgs(f16, -0.0, nan(f16));
1624
1625 try testArgs(f16, 0.0, -nan(f16));
1626 try testArgs(f16, 0.0, -inf(f16));
1627 try testArgs(f16, 0.0, -fmax(f16));
1628 try testArgs(f16, 0.0, -10.0);
1629 try testArgs(f16, 0.0, -1.0);
1630 try testArgs(f16, 0.0, -0.1);
1631 try testArgs(f16, 0.0, -fmin(f16));
1632 try testArgs(f16, 0.0, -tmin(f16));
1633 try testArgs(f16, 0.0, -0.0);
1634 try testArgs(f16, 0.0, 0.0);
1635 try testArgs(f16, 0.0, tmin(f16));
1636 try testArgs(f16, 0.0, fmin(f16));
1637 try testArgs(f16, 0.0, 0.1);
1638 try testArgs(f16, 0.0, 1.0);
1639 try testArgs(f16, 0.0, 10.0);
1640 try testArgs(f16, 0.0, fmax(f16));
1641 try testArgs(f16, 0.0, inf(f16));
1642 try testArgs(f16, 0.0, nan(f16));
1643
1644 try testArgs(f16, tmin(f16), -nan(f16));
1645 try testArgs(f16, tmin(f16), -inf(f16));
1646 try testArgs(f16, tmin(f16), -fmax(f16));
1647 try testArgs(f16, tmin(f16), -10.0);
1648 try testArgs(f16, tmin(f16), -1.0);
1649 try testArgs(f16, tmin(f16), -0.1);
1650 try testArgs(f16, tmin(f16), -fmin(f16));
1651 try testArgs(f16, tmin(f16), -tmin(f16));
1652 try testArgs(f16, tmin(f16), -0.0);
1653 try testArgs(f16, tmin(f16), 0.0);
1654 try testArgs(f16, tmin(f16), tmin(f16));
1655 try testArgs(f16, tmin(f16), fmin(f16));
1656 try testArgs(f16, tmin(f16), 0.1);
1657 try testArgs(f16, tmin(f16), 1.0);
1658 try testArgs(f16, tmin(f16), 10.0);
1659 try testArgs(f16, tmin(f16), fmax(f16));
1660 try testArgs(f16, tmin(f16), inf(f16));
1661 try testArgs(f16, tmin(f16), nan(f16));
1662
1663 try testArgs(f16, fmin(f16), -nan(f16));
1664 try testArgs(f16, fmin(f16), -inf(f16));
1665 try testArgs(f16, fmin(f16), -fmax(f16));
1666 try testArgs(f16, fmin(f16), -10.0);
1667 try testArgs(f16, fmin(f16), -1.0);
1668 try testArgs(f16, fmin(f16), -0.1);
1669 try testArgs(f16, fmin(f16), -fmin(f16));
1670 try testArgs(f16, fmin(f16), -tmin(f16));
1671 try testArgs(f16, fmin(f16), -0.0);
1672 try testArgs(f16, fmin(f16), 0.0);
1673 try testArgs(f16, fmin(f16), tmin(f16));
1674 try testArgs(f16, fmin(f16), fmin(f16));
1675 try testArgs(f16, fmin(f16), 0.1);
1676 try testArgs(f16, fmin(f16), 1.0);
1677 try testArgs(f16, fmin(f16), 10.0);
1678 try testArgs(f16, fmin(f16), fmax(f16));
1679 try testArgs(f16, fmin(f16), inf(f16));
1680 try testArgs(f16, fmin(f16), nan(f16));
1681
1682 try testArgs(f16, 0.1, -nan(f16));
1683 try testArgs(f16, 0.1, -inf(f16));
1684 try testArgs(f16, 0.1, -fmax(f16));
1685 try testArgs(f16, 0.1, -10.0);
1686 try testArgs(f16, 0.1, -1.0);
1687 try testArgs(f16, 0.1, -0.1);
1688 try testArgs(f16, 0.1, -fmin(f16));
1689 try testArgs(f16, 0.1, -tmin(f16));
1690 try testArgs(f16, 0.1, -0.0);
1691 try testArgs(f16, 0.1, 0.0);
1692 try testArgs(f16, 0.1, tmin(f16));
1693 try testArgs(f16, 0.1, fmin(f16));
1694 try testArgs(f16, 0.1, 0.1);
1695 try testArgs(f16, 0.1, 1.0);
1696 try testArgs(f16, 0.1, 10.0);
1697 try testArgs(f16, 0.1, fmax(f16));
1698 try testArgs(f16, 0.1, inf(f16));
1699 try testArgs(f16, 0.1, nan(f16));
1700
1701 try testArgs(f16, 1.0, -nan(f16));
1702 try testArgs(f16, 1.0, -inf(f16));
1703 try testArgs(f16, 1.0, -fmax(f16));
1704 try testArgs(f16, 1.0, -10.0);
1705 try testArgs(f16, 1.0, -1.0);
1706 try testArgs(f16, 1.0, -0.1);
1707 try testArgs(f16, 1.0, -fmin(f16));
1708 try testArgs(f16, 1.0, -tmin(f16));
1709 try testArgs(f16, 1.0, -0.0);
1710 try testArgs(f16, 1.0, 0.0);
1711 try testArgs(f16, 1.0, tmin(f16));
1712 try testArgs(f16, 1.0, fmin(f16));
1713 try testArgs(f16, 1.0, 0.1);
1714 try testArgs(f16, 1.0, 1.0);
1715 try testArgs(f16, 1.0, 10.0);
1716 try testArgs(f16, 1.0, fmax(f16));
1717 try testArgs(f16, 1.0, inf(f16));
1718 try testArgs(f16, 1.0, nan(f16));
1719
1720 try testArgs(f16, 10.0, -nan(f16));
1721 try testArgs(f16, 10.0, -inf(f16));
1722 try testArgs(f16, 10.0, -fmax(f16));
1723 try testArgs(f16, 10.0, -10.0);
1724 try testArgs(f16, 10.0, -1.0);
1725 try testArgs(f16, 10.0, -0.1);
1726 try testArgs(f16, 10.0, -fmin(f16));
1727 try testArgs(f16, 10.0, -tmin(f16));
1728 try testArgs(f16, 10.0, -0.0);
1729 try testArgs(f16, 10.0, 0.0);
1730 try testArgs(f16, 10.0, tmin(f16));
1731 try testArgs(f16, 10.0, fmin(f16));
1732 try testArgs(f16, 10.0, 0.1);
1733 try testArgs(f16, 10.0, 1.0);
1734 try testArgs(f16, 10.0, 10.0);
1735 try testArgs(f16, 10.0, fmax(f16));
1736 try testArgs(f16, 10.0, inf(f16));
1737 try testArgs(f16, 10.0, nan(f16));
1738
1739 try testArgs(f16, fmax(f16), -nan(f16));
1740 try testArgs(f16, fmax(f16), -inf(f16));
1741 try testArgs(f16, fmax(f16), -fmax(f16));
1742 try testArgs(f16, fmax(f16), -10.0);
1743 try testArgs(f16, fmax(f16), -1.0);
1744 try testArgs(f16, fmax(f16), -0.1);
1745 try testArgs(f16, fmax(f16), -fmin(f16));
1746 try testArgs(f16, fmax(f16), -tmin(f16));
1747 try testArgs(f16, fmax(f16), -0.0);
1748 try testArgs(f16, fmax(f16), 0.0);
1749 try testArgs(f16, fmax(f16), tmin(f16));
1750 try testArgs(f16, fmax(f16), fmin(f16));
1751 try testArgs(f16, fmax(f16), 0.1);
1752 try testArgs(f16, fmax(f16), 1.0);
1753 try testArgs(f16, fmax(f16), 10.0);
1754 try testArgs(f16, fmax(f16), fmax(f16));
1755 try testArgs(f16, fmax(f16), inf(f16));
1756 try testArgs(f16, fmax(f16), nan(f16));
1757
1758 try testArgs(f16, inf(f16), -nan(f16));
1759 try testArgs(f16, inf(f16), -inf(f16));
1760 try testArgs(f16, inf(f16), -fmax(f16));
1761 try testArgs(f16, inf(f16), -10.0);
1762 try testArgs(f16, inf(f16), -1.0);
1763 try testArgs(f16, inf(f16), -0.1);
1764 try testArgs(f16, inf(f16), -fmin(f16));
1765 try testArgs(f16, inf(f16), -tmin(f16));
1766 try testArgs(f16, inf(f16), -0.0);
1767 try testArgs(f16, inf(f16), 0.0);
1768 try testArgs(f16, inf(f16), tmin(f16));
1769 try testArgs(f16, inf(f16), fmin(f16));
1770 try testArgs(f16, inf(f16), 0.1);
1771 try testArgs(f16, inf(f16), 1.0);
1772 try testArgs(f16, inf(f16), 10.0);
1773 try testArgs(f16, inf(f16), fmax(f16));
1774 try testArgs(f16, inf(f16), inf(f16));
1775 try testArgs(f16, inf(f16), nan(f16));
1776
1777 try testArgs(f16, nan(f16), -nan(f16));
1778 try testArgs(f16, nan(f16), -inf(f16));
1779 try testArgs(f16, nan(f16), -fmax(f16));
1780 try testArgs(f16, nan(f16), -10.0);
1781 try testArgs(f16, nan(f16), -1.0);
1782 try testArgs(f16, nan(f16), -0.1);
1783 try testArgs(f16, nan(f16), -fmin(f16));
1784 try testArgs(f16, nan(f16), -tmin(f16));
1785 try testArgs(f16, nan(f16), -0.0);
1786 try testArgs(f16, nan(f16), 0.0);
1787 try testArgs(f16, nan(f16), tmin(f16));
1788 try testArgs(f16, nan(f16), fmin(f16));
1789 try testArgs(f16, nan(f16), 0.1);
1790 try testArgs(f16, nan(f16), 1.0);
1791 try testArgs(f16, nan(f16), 10.0);
1792 try testArgs(f16, nan(f16), fmax(f16));
1793 try testArgs(f16, nan(f16), inf(f16));
1794 try testArgs(f16, nan(f16), nan(f16));
1795
1796 try testArgs(f32, -nan(f32), -nan(f32));
1797 try testArgs(f32, -nan(f32), -inf(f32));
1798 try testArgs(f32, -nan(f32), -fmax(f32));
1799 try testArgs(f32, -nan(f32), -10.0);
1800 try testArgs(f32, -nan(f32), -1.0);
1801 try testArgs(f32, -nan(f32), -0.1);
1802 try testArgs(f32, -nan(f32), -fmin(f32));
1803 try testArgs(f32, -nan(f32), -tmin(f32));
1804 try testArgs(f32, -nan(f32), -0.0);
1805 try testArgs(f32, -nan(f32), 0.0);
1806 try testArgs(f32, -nan(f32), tmin(f32));
1807 try testArgs(f32, -nan(f32), fmin(f32));
1808 try testArgs(f32, -nan(f32), 0.1);
1809 try testArgs(f32, -nan(f32), 1.0);
1810 try testArgs(f32, -nan(f32), 10.0);
1811 try testArgs(f32, -nan(f32), fmax(f32));
1812 try testArgs(f32, -nan(f32), inf(f32));
1813 try testArgs(f32, -nan(f32), nan(f32));
1814
1815 try testArgs(f32, -inf(f32), -nan(f32));
1816 try testArgs(f32, -inf(f32), -inf(f32));
1817 try testArgs(f32, -inf(f32), -fmax(f32));
1818 try testArgs(f32, -inf(f32), -10.0);
1819 try testArgs(f32, -inf(f32), -1.0);
1820 try testArgs(f32, -inf(f32), -0.1);
1821 try testArgs(f32, -inf(f32), -fmin(f32));
1822 try testArgs(f32, -inf(f32), -tmin(f32));
1823 try testArgs(f32, -inf(f32), -0.0);
1824 try testArgs(f32, -inf(f32), 0.0);
1825 try testArgs(f32, -inf(f32), tmin(f32));
1826 try testArgs(f32, -inf(f32), fmin(f32));
1827 try testArgs(f32, -inf(f32), 0.1);
1828 try testArgs(f32, -inf(f32), 1.0);
1829 try testArgs(f32, -inf(f32), 10.0);
1830 try testArgs(f32, -inf(f32), fmax(f32));
1831 try testArgs(f32, -inf(f32), inf(f32));
1832 try testArgs(f32, -inf(f32), nan(f32));
1833
1834 try testArgs(f32, -fmax(f32), -nan(f32));
1835 try testArgs(f32, -fmax(f32), -inf(f32));
1836 try testArgs(f32, -fmax(f32), -fmax(f32));
1837 try testArgs(f32, -fmax(f32), -10.0);
1838 try testArgs(f32, -fmax(f32), -1.0);
1839 try testArgs(f32, -fmax(f32), -0.1);
1840 try testArgs(f32, -fmax(f32), -fmin(f32));
1841 try testArgs(f32, -fmax(f32), -tmin(f32));
1842 try testArgs(f32, -fmax(f32), -0.0);
1843 try testArgs(f32, -fmax(f32), 0.0);
1844 try testArgs(f32, -fmax(f32), tmin(f32));
1845 try testArgs(f32, -fmax(f32), fmin(f32));
1846 try testArgs(f32, -fmax(f32), 0.1);
1847 try testArgs(f32, -fmax(f32), 1.0);
1848 try testArgs(f32, -fmax(f32), 10.0);
1849 try testArgs(f32, -fmax(f32), fmax(f32));
1850 try testArgs(f32, -fmax(f32), inf(f32));
1851 try testArgs(f32, -fmax(f32), nan(f32));
1852
1853 try testArgs(f32, -10.0, -nan(f32));
1854 try testArgs(f32, -10.0, -inf(f32));
1855 try testArgs(f32, -10.0, -fmax(f32));
1856 try testArgs(f32, -10.0, -10.0);
1857 try testArgs(f32, -10.0, -1.0);
1858 try testArgs(f32, -10.0, -0.1);
1859 try testArgs(f32, -10.0, -fmin(f32));
1860 try testArgs(f32, -10.0, -tmin(f32));
1861 try testArgs(f32, -10.0, -0.0);
1862 try testArgs(f32, -10.0, 0.0);
1863 try testArgs(f32, -10.0, tmin(f32));
1864 try testArgs(f32, -10.0, fmin(f32));
1865 try testArgs(f32, -10.0, 0.1);
1866 try testArgs(f32, -10.0, 1.0);
1867 try testArgs(f32, -10.0, 10.0);
1868 try testArgs(f32, -10.0, fmax(f32));
1869 try testArgs(f32, -10.0, inf(f32));
1870 try testArgs(f32, -10.0, nan(f32));
1871
1872 try testArgs(f32, -1.0, -nan(f32));
1873 try testArgs(f32, -1.0, -inf(f32));
1874 try testArgs(f32, -1.0, -fmax(f32));
1875 try testArgs(f32, -1.0, -10.0);
1876 try testArgs(f32, -1.0, -1.0);
1877 try testArgs(f32, -1.0, -0.1);
1878 try testArgs(f32, -1.0, -fmin(f32));
1879 try testArgs(f32, -1.0, -tmin(f32));
1880 try testArgs(f32, -1.0, -0.0);
1881 try testArgs(f32, -1.0, 0.0);
1882 try testArgs(f32, -1.0, tmin(f32));
1883 try testArgs(f32, -1.0, fmin(f32));
1884 try testArgs(f32, -1.0, 0.1);
1885 try testArgs(f32, -1.0, 1.0);
1886 try testArgs(f32, -1.0, 10.0);
1887 try testArgs(f32, -1.0, fmax(f32));
1888 try testArgs(f32, -1.0, inf(f32));
1889 try testArgs(f32, -1.0, nan(f32));
1890
1891 try testArgs(f32, -0.1, -nan(f32));
1892 try testArgs(f32, -0.1, -inf(f32));
1893 try testArgs(f32, -0.1, -fmax(f32));
1894 try testArgs(f32, -0.1, -10.0);
1895 try testArgs(f32, -0.1, -1.0);
1896 try testArgs(f32, -0.1, -0.1);
1897 try testArgs(f32, -0.1, -fmin(f32));
1898 try testArgs(f32, -0.1, -tmin(f32));
1899 try testArgs(f32, -0.1, -0.0);
1900 try testArgs(f32, -0.1, 0.0);
1901 try testArgs(f32, -0.1, tmin(f32));
1902 try testArgs(f32, -0.1, fmin(f32));
1903 try testArgs(f32, -0.1, 0.1);
1904 try testArgs(f32, -0.1, 1.0);
1905 try testArgs(f32, -0.1, 10.0);
1906 try testArgs(f32, -0.1, fmax(f32));
1907 try testArgs(f32, -0.1, inf(f32));
1908 try testArgs(f32, -0.1, nan(f32));
1909
1910 try testArgs(f32, -fmin(f32), -nan(f32));
1911 try testArgs(f32, -fmin(f32), -inf(f32));
1912 try testArgs(f32, -fmin(f32), -fmax(f32));
1913 try testArgs(f32, -fmin(f32), -10.0);
1914 try testArgs(f32, -fmin(f32), -1.0);
1915 try testArgs(f32, -fmin(f32), -0.1);
1916 try testArgs(f32, -fmin(f32), -fmin(f32));
1917 try testArgs(f32, -fmin(f32), -tmin(f32));
1918 try testArgs(f32, -fmin(f32), -0.0);
1919 try testArgs(f32, -fmin(f32), 0.0);
1920 try testArgs(f32, -fmin(f32), tmin(f32));
1921 try testArgs(f32, -fmin(f32), fmin(f32));
1922 try testArgs(f32, -fmin(f32), 0.1);
1923 try testArgs(f32, -fmin(f32), 1.0);
1924 try testArgs(f32, -fmin(f32), 10.0);
1925 try testArgs(f32, -fmin(f32), fmax(f32));
1926 try testArgs(f32, -fmin(f32), inf(f32));
1927 try testArgs(f32, -fmin(f32), nan(f32));
1928
1929 try testArgs(f32, -tmin(f32), -nan(f32));
1930 try testArgs(f32, -tmin(f32), -inf(f32));
1931 try testArgs(f32, -tmin(f32), -fmax(f32));
1932 try testArgs(f32, -tmin(f32), -10.0);
1933 try testArgs(f32, -tmin(f32), -1.0);
1934 try testArgs(f32, -tmin(f32), -0.1);
1935 try testArgs(f32, -tmin(f32), -fmin(f32));
1936 try testArgs(f32, -tmin(f32), -tmin(f32));
1937 try testArgs(f32, -tmin(f32), -0.0);
1938 try testArgs(f32, -tmin(f32), 0.0);
1939 try testArgs(f32, -tmin(f32), tmin(f32));
1940 try testArgs(f32, -tmin(f32), fmin(f32));
1941 try testArgs(f32, -tmin(f32), 0.1);
1942 try testArgs(f32, -tmin(f32), 1.0);
1943 try testArgs(f32, -tmin(f32), 10.0);
1944 try testArgs(f32, -tmin(f32), fmax(f32));
1945 try testArgs(f32, -tmin(f32), inf(f32));
1946 try testArgs(f32, -tmin(f32), nan(f32));
1947
1948 try testArgs(f32, -0.0, -nan(f32));
1949 try testArgs(f32, -0.0, -inf(f32));
1950 try testArgs(f32, -0.0, -fmax(f32));
1951 try testArgs(f32, -0.0, -10.0);
1952 try testArgs(f32, -0.0, -1.0);
1953 try testArgs(f32, -0.0, -0.1);
1954 try testArgs(f32, -0.0, -fmin(f32));
1955 try testArgs(f32, -0.0, -tmin(f32));
1956 try testArgs(f32, -0.0, -0.0);
1957 try testArgs(f32, -0.0, 0.0);
1958 try testArgs(f32, -0.0, tmin(f32));
1959 try testArgs(f32, -0.0, fmin(f32));
1960 try testArgs(f32, -0.0, 0.1);
1961 try testArgs(f32, -0.0, 1.0);
1962 try testArgs(f32, -0.0, 10.0);
1963 try testArgs(f32, -0.0, fmax(f32));
1964 try testArgs(f32, -0.0, inf(f32));
1965 try testArgs(f32, -0.0, nan(f32));
1966
1967 try testArgs(f32, 0.0, -nan(f32));
1968 try testArgs(f32, 0.0, -inf(f32));
1969 try testArgs(f32, 0.0, -fmax(f32));
1970 try testArgs(f32, 0.0, -10.0);
1971 try testArgs(f32, 0.0, -1.0);
1972 try testArgs(f32, 0.0, -0.1);
1973 try testArgs(f32, 0.0, -fmin(f32));
1974 try testArgs(f32, 0.0, -tmin(f32));
1975 try testArgs(f32, 0.0, -0.0);
1976 try testArgs(f32, 0.0, 0.0);
1977 try testArgs(f32, 0.0, tmin(f32));
1978 try testArgs(f32, 0.0, fmin(f32));
1979 try testArgs(f32, 0.0, 0.1);
1980 try testArgs(f32, 0.0, 1.0);
1981 try testArgs(f32, 0.0, 10.0);
1982 try testArgs(f32, 0.0, fmax(f32));
1983 try testArgs(f32, 0.0, inf(f32));
1984 try testArgs(f32, 0.0, nan(f32));
1985
1986 try testArgs(f32, tmin(f32), -nan(f32));
1987 try testArgs(f32, tmin(f32), -inf(f32));
1988 try testArgs(f32, tmin(f32), -fmax(f32));
1989 try testArgs(f32, tmin(f32), -10.0);
1990 try testArgs(f32, tmin(f32), -1.0);
1991 try testArgs(f32, tmin(f32), -0.1);
1992 try testArgs(f32, tmin(f32), -fmin(f32));
1993 try testArgs(f32, tmin(f32), -tmin(f32));
1994 try testArgs(f32, tmin(f32), -0.0);
1995 try testArgs(f32, tmin(f32), 0.0);
1996 try testArgs(f32, tmin(f32), tmin(f32));
1997 try testArgs(f32, tmin(f32), fmin(f32));
1998 try testArgs(f32, tmin(f32), 0.1);
1999 try testArgs(f32, tmin(f32), 1.0);
2000 try testArgs(f32, tmin(f32), 10.0);
2001 try testArgs(f32, tmin(f32), fmax(f32));
2002 try testArgs(f32, tmin(f32), inf(f32));
2003 try testArgs(f32, tmin(f32), nan(f32));
2004
2005 try testArgs(f32, fmin(f32), -nan(f32));
2006 try testArgs(f32, fmin(f32), -inf(f32));
2007 try testArgs(f32, fmin(f32), -fmax(f32));
2008 try testArgs(f32, fmin(f32), -10.0);
2009 try testArgs(f32, fmin(f32), -1.0);
2010 try testArgs(f32, fmin(f32), -0.1);
2011 try testArgs(f32, fmin(f32), -fmin(f32));
2012 try testArgs(f32, fmin(f32), -tmin(f32));
2013 try testArgs(f32, fmin(f32), -0.0);
2014 try testArgs(f32, fmin(f32), 0.0);
2015 try testArgs(f32, fmin(f32), tmin(f32));
2016 try testArgs(f32, fmin(f32), fmin(f32));
2017 try testArgs(f32, fmin(f32), 0.1);
2018 try testArgs(f32, fmin(f32), 1.0);
2019 try testArgs(f32, fmin(f32), 10.0);
2020 try testArgs(f32, fmin(f32), fmax(f32));
2021 try testArgs(f32, fmin(f32), inf(f32));
2022 try testArgs(f32, fmin(f32), nan(f32));
2023
2024 try testArgs(f32, 0.1, -nan(f32));
2025 try testArgs(f32, 0.1, -inf(f32));
2026 try testArgs(f32, 0.1, -fmax(f32));
2027 try testArgs(f32, 0.1, -10.0);
2028 try testArgs(f32, 0.1, -1.0);
2029 try testArgs(f32, 0.1, -0.1);
2030 try testArgs(f32, 0.1, -fmin(f32));
2031 try testArgs(f32, 0.1, -tmin(f32));
2032 try testArgs(f32, 0.1, -0.0);
2033 try testArgs(f32, 0.1, 0.0);
2034 try testArgs(f32, 0.1, tmin(f32));
2035 try testArgs(f32, 0.1, fmin(f32));
2036 try testArgs(f32, 0.1, 0.1);
2037 try testArgs(f32, 0.1, 1.0);
2038 try testArgs(f32, 0.1, 10.0);
2039 try testArgs(f32, 0.1, fmax(f32));
2040 try testArgs(f32, 0.1, inf(f32));
2041 try testArgs(f32, 0.1, nan(f32));
2042
2043 try testArgs(f32, 1.0, -nan(f32));
2044 try testArgs(f32, 1.0, -inf(f32));
2045 try testArgs(f32, 1.0, -fmax(f32));
2046 try testArgs(f32, 1.0, -10.0);
2047 try testArgs(f32, 1.0, -1.0);
2048 try testArgs(f32, 1.0, -0.1);
2049 try testArgs(f32, 1.0, -fmin(f32));
2050 try testArgs(f32, 1.0, -tmin(f32));
2051 try testArgs(f32, 1.0, -0.0);
2052 try testArgs(f32, 1.0, 0.0);
2053 try testArgs(f32, 1.0, tmin(f32));
2054 try testArgs(f32, 1.0, fmin(f32));
2055 try testArgs(f32, 1.0, 0.1);
2056 try testArgs(f32, 1.0, 1.0);
2057 try testArgs(f32, 1.0, 10.0);
2058 try testArgs(f32, 1.0, fmax(f32));
2059 try testArgs(f32, 1.0, inf(f32));
2060 try testArgs(f32, 1.0, nan(f32));
2061
2062 try testArgs(f32, 10.0, -nan(f32));
2063 try testArgs(f32, 10.0, -inf(f32));
2064 try testArgs(f32, 10.0, -fmax(f32));
2065 try testArgs(f32, 10.0, -10.0);
2066 try testArgs(f32, 10.0, -1.0);
2067 try testArgs(f32, 10.0, -0.1);
2068 try testArgs(f32, 10.0, -fmin(f32));
2069 try testArgs(f32, 10.0, -tmin(f32));
2070 try testArgs(f32, 10.0, -0.0);
2071 try testArgs(f32, 10.0, 0.0);
2072 try testArgs(f32, 10.0, tmin(f32));
2073 try testArgs(f32, 10.0, fmin(f32));
2074 try testArgs(f32, 10.0, 0.1);
2075 try testArgs(f32, 10.0, 1.0);
2076 try testArgs(f32, 10.0, 10.0);
2077 try testArgs(f32, 10.0, fmax(f32));
2078 try testArgs(f32, 10.0, inf(f32));
2079 try testArgs(f32, 10.0, nan(f32));
2080
2081 try testArgs(f32, fmax(f32), -nan(f32));
2082 try testArgs(f32, fmax(f32), -inf(f32));
2083 try testArgs(f32, fmax(f32), -fmax(f32));
2084 try testArgs(f32, fmax(f32), -10.0);
2085 try testArgs(f32, fmax(f32), -1.0);
2086 try testArgs(f32, fmax(f32), -0.1);
2087 try testArgs(f32, fmax(f32), -fmin(f32));
2088 try testArgs(f32, fmax(f32), -tmin(f32));
2089 try testArgs(f32, fmax(f32), -0.0);
2090 try testArgs(f32, fmax(f32), 0.0);
2091 try testArgs(f32, fmax(f32), tmin(f32));
2092 try testArgs(f32, fmax(f32), fmin(f32));
2093 try testArgs(f32, fmax(f32), 0.1);
2094 try testArgs(f32, fmax(f32), 1.0);
2095 try testArgs(f32, fmax(f32), 10.0);
2096 try testArgs(f32, fmax(f32), fmax(f32));
2097 try testArgs(f32, fmax(f32), inf(f32));
2098 try testArgs(f32, fmax(f32), nan(f32));
2099
2100 try testArgs(f32, inf(f32), -nan(f32));
2101 try testArgs(f32, inf(f32), -inf(f32));
2102 try testArgs(f32, inf(f32), -fmax(f32));
2103 try testArgs(f32, inf(f32), -10.0);
2104 try testArgs(f32, inf(f32), -1.0);
2105 try testArgs(f32, inf(f32), -0.1);
2106 try testArgs(f32, inf(f32), -fmin(f32));
2107 try testArgs(f32, inf(f32), -tmin(f32));
2108 try testArgs(f32, inf(f32), -0.0);
2109 try testArgs(f32, inf(f32), 0.0);
2110 try testArgs(f32, inf(f32), tmin(f32));
2111 try testArgs(f32, inf(f32), fmin(f32));
2112 try testArgs(f32, inf(f32), 0.1);
2113 try testArgs(f32, inf(f32), 1.0);
2114 try testArgs(f32, inf(f32), 10.0);
2115 try testArgs(f32, inf(f32), fmax(f32));
2116 try testArgs(f32, inf(f32), inf(f32));
2117 try testArgs(f32, inf(f32), nan(f32));
2118
2119 try testArgs(f32, nan(f32), -nan(f32));
2120 try testArgs(f32, nan(f32), -inf(f32));
2121 try testArgs(f32, nan(f32), -fmax(f32));
2122 try testArgs(f32, nan(f32), -10.0);
2123 try testArgs(f32, nan(f32), -1.0);
2124 try testArgs(f32, nan(f32), -0.1);
2125 try testArgs(f32, nan(f32), -fmin(f32));
2126 try testArgs(f32, nan(f32), -tmin(f32));
2127 try testArgs(f32, nan(f32), -0.0);
2128 try testArgs(f32, nan(f32), 0.0);
2129 try testArgs(f32, nan(f32), tmin(f32));
2130 try testArgs(f32, nan(f32), fmin(f32));
2131 try testArgs(f32, nan(f32), 0.1);
2132 try testArgs(f32, nan(f32), 1.0);
2133 try testArgs(f32, nan(f32), 10.0);
2134 try testArgs(f32, nan(f32), fmax(f32));
2135 try testArgs(f32, nan(f32), inf(f32));
2136 try testArgs(f32, nan(f32), nan(f32));
2137
2138 try testArgs(f64, -nan(f64), -nan(f64));
2139 try testArgs(f64, -nan(f64), -inf(f64));
2140 try testArgs(f64, -nan(f64), -fmax(f64));
2141 try testArgs(f64, -nan(f64), -10.0);
2142 try testArgs(f64, -nan(f64), -1.0);
2143 try testArgs(f64, -nan(f64), -0.1);
2144 try testArgs(f64, -nan(f64), -fmin(f64));
2145 try testArgs(f64, -nan(f64), -tmin(f64));
2146 try testArgs(f64, -nan(f64), -0.0);
2147 try testArgs(f64, -nan(f64), 0.0);
2148 try testArgs(f64, -nan(f64), tmin(f64));
2149 try testArgs(f64, -nan(f64), fmin(f64));
2150 try testArgs(f64, -nan(f64), 0.1);
2151 try testArgs(f64, -nan(f64), 1.0);
2152 try testArgs(f64, -nan(f64), 10.0);
2153 try testArgs(f64, -nan(f64), fmax(f64));
2154 try testArgs(f64, -nan(f64), inf(f64));
2155 try testArgs(f64, -nan(f64), nan(f64));
2156
2157 try testArgs(f64, -inf(f64), -nan(f64));
2158 try testArgs(f64, -inf(f64), -inf(f64));
2159 try testArgs(f64, -inf(f64), -fmax(f64));
2160 try testArgs(f64, -inf(f64), -10.0);
2161 try testArgs(f64, -inf(f64), -1.0);
2162 try testArgs(f64, -inf(f64), -0.1);
2163 try testArgs(f64, -inf(f64), -fmin(f64));
2164 try testArgs(f64, -inf(f64), -tmin(f64));
2165 try testArgs(f64, -inf(f64), -0.0);
2166 try testArgs(f64, -inf(f64), 0.0);
2167 try testArgs(f64, -inf(f64), tmin(f64));
2168 try testArgs(f64, -inf(f64), fmin(f64));
2169 try testArgs(f64, -inf(f64), 0.1);
2170 try testArgs(f64, -inf(f64), 1.0);
2171 try testArgs(f64, -inf(f64), 10.0);
2172 try testArgs(f64, -inf(f64), fmax(f64));
2173 try testArgs(f64, -inf(f64), inf(f64));
2174 try testArgs(f64, -inf(f64), nan(f64));
2175
2176 try testArgs(f64, -fmax(f64), -nan(f64));
2177 try testArgs(f64, -fmax(f64), -inf(f64));
2178 try testArgs(f64, -fmax(f64), -fmax(f64));
2179 try testArgs(f64, -fmax(f64), -10.0);
2180 try testArgs(f64, -fmax(f64), -1.0);
2181 try testArgs(f64, -fmax(f64), -0.1);
2182 try testArgs(f64, -fmax(f64), -fmin(f64));
2183 try testArgs(f64, -fmax(f64), -tmin(f64));
2184 try testArgs(f64, -fmax(f64), -0.0);
2185 try testArgs(f64, -fmax(f64), 0.0);
2186 try testArgs(f64, -fmax(f64), tmin(f64));
2187 try testArgs(f64, -fmax(f64), fmin(f64));
2188 try testArgs(f64, -fmax(f64), 0.1);
2189 try testArgs(f64, -fmax(f64), 1.0);
2190 try testArgs(f64, -fmax(f64), 10.0);
2191 try testArgs(f64, -fmax(f64), fmax(f64));
2192 try testArgs(f64, -fmax(f64), inf(f64));
2193 try testArgs(f64, -fmax(f64), nan(f64));
2194
2195 try testArgs(f64, -10.0, -nan(f64));
2196 try testArgs(f64, -10.0, -inf(f64));
2197 try testArgs(f64, -10.0, -fmax(f64));
2198 try testArgs(f64, -10.0, -10.0);
2199 try testArgs(f64, -10.0, -1.0);
2200 try testArgs(f64, -10.0, -0.1);
2201 try testArgs(f64, -10.0, -fmin(f64));
2202 try testArgs(f64, -10.0, -tmin(f64));
2203 try testArgs(f64, -10.0, -0.0);
2204 try testArgs(f64, -10.0, 0.0);
2205 try testArgs(f64, -10.0, tmin(f64));
2206 try testArgs(f64, -10.0, fmin(f64));
2207 try testArgs(f64, -10.0, 0.1);
2208 try testArgs(f64, -10.0, 1.0);
2209 try testArgs(f64, -10.0, 10.0);
2210 try testArgs(f64, -10.0, fmax(f64));
2211 try testArgs(f64, -10.0, inf(f64));
2212 try testArgs(f64, -10.0, nan(f64));
2213
2214 try testArgs(f64, -1.0, -nan(f64));
2215 try testArgs(f64, -1.0, -inf(f64));
2216 try testArgs(f64, -1.0, -fmax(f64));
2217 try testArgs(f64, -1.0, -10.0);
2218 try testArgs(f64, -1.0, -1.0);
2219 try testArgs(f64, -1.0, -0.1);
2220 try testArgs(f64, -1.0, -fmin(f64));
2221 try testArgs(f64, -1.0, -tmin(f64));
2222 try testArgs(f64, -1.0, -0.0);
2223 try testArgs(f64, -1.0, 0.0);
2224 try testArgs(f64, -1.0, tmin(f64));
2225 try testArgs(f64, -1.0, fmin(f64));
2226 try testArgs(f64, -1.0, 0.1);
2227 try testArgs(f64, -1.0, 1.0);
2228 try testArgs(f64, -1.0, 10.0);
2229 try testArgs(f64, -1.0, fmax(f64));
2230 try testArgs(f64, -1.0, inf(f64));
2231 try testArgs(f64, -1.0, nan(f64));
2232
2233 try testArgs(f64, -0.1, -nan(f64));
2234 try testArgs(f64, -0.1, -inf(f64));
2235 try testArgs(f64, -0.1, -fmax(f64));
2236 try testArgs(f64, -0.1, -10.0);
2237 try testArgs(f64, -0.1, -1.0);
2238 try testArgs(f64, -0.1, -0.1);
2239 try testArgs(f64, -0.1, -fmin(f64));
2240 try testArgs(f64, -0.1, -tmin(f64));
2241 try testArgs(f64, -0.1, -0.0);
2242 try testArgs(f64, -0.1, 0.0);
2243 try testArgs(f64, -0.1, tmin(f64));
2244 try testArgs(f64, -0.1, fmin(f64));
2245 try testArgs(f64, -0.1, 0.1);
2246 try testArgs(f64, -0.1, 1.0);
2247 try testArgs(f64, -0.1, 10.0);
2248 try testArgs(f64, -0.1, fmax(f64));
2249 try testArgs(f64, -0.1, inf(f64));
2250 try testArgs(f64, -0.1, nan(f64));
2251
2252 try testArgs(f64, -fmin(f64), -nan(f64));
2253 try testArgs(f64, -fmin(f64), -inf(f64));
2254 try testArgs(f64, -fmin(f64), -fmax(f64));
2255 try testArgs(f64, -fmin(f64), -10.0);
2256 try testArgs(f64, -fmin(f64), -1.0);
2257 try testArgs(f64, -fmin(f64), -0.1);
2258 try testArgs(f64, -fmin(f64), -fmin(f64));
2259 try testArgs(f64, -fmin(f64), -tmin(f64));
2260 try testArgs(f64, -fmin(f64), -0.0);
2261 try testArgs(f64, -fmin(f64), 0.0);
2262 try testArgs(f64, -fmin(f64), tmin(f64));
2263 try testArgs(f64, -fmin(f64), fmin(f64));
2264 try testArgs(f64, -fmin(f64), 0.1);
2265 try testArgs(f64, -fmin(f64), 1.0);
2266 try testArgs(f64, -fmin(f64), 10.0);
2267 try testArgs(f64, -fmin(f64), fmax(f64));
2268 try testArgs(f64, -fmin(f64), inf(f64));
2269 try testArgs(f64, -fmin(f64), nan(f64));
2270
2271 try testArgs(f64, -tmin(f64), -nan(f64));
2272 try testArgs(f64, -tmin(f64), -inf(f64));
2273 try testArgs(f64, -tmin(f64), -fmax(f64));
2274 try testArgs(f64, -tmin(f64), -10.0);
2275 try testArgs(f64, -tmin(f64), -1.0);
2276 try testArgs(f64, -tmin(f64), -0.1);
2277 try testArgs(f64, -tmin(f64), -fmin(f64));
2278 try testArgs(f64, -tmin(f64), -tmin(f64));
2279 try testArgs(f64, -tmin(f64), -0.0);
2280 try testArgs(f64, -tmin(f64), 0.0);
2281 try testArgs(f64, -tmin(f64), tmin(f64));
2282 try testArgs(f64, -tmin(f64), fmin(f64));
2283 try testArgs(f64, -tmin(f64), 0.1);
2284 try testArgs(f64, -tmin(f64), 1.0);
2285 try testArgs(f64, -tmin(f64), 10.0);
2286 try testArgs(f64, -tmin(f64), fmax(f64));
2287 try testArgs(f64, -tmin(f64), inf(f64));
2288 try testArgs(f64, -tmin(f64), nan(f64));
2289
2290 try testArgs(f64, -0.0, -nan(f64));
2291 try testArgs(f64, -0.0, -inf(f64));
2292 try testArgs(f64, -0.0, -fmax(f64));
2293 try testArgs(f64, -0.0, -10.0);
2294 try testArgs(f64, -0.0, -1.0);
2295 try testArgs(f64, -0.0, -0.1);
2296 try testArgs(f64, -0.0, -fmin(f64));
2297 try testArgs(f64, -0.0, -tmin(f64));
2298 try testArgs(f64, -0.0, -0.0);
2299 try testArgs(f64, -0.0, 0.0);
2300 try testArgs(f64, -0.0, tmin(f64));
2301 try testArgs(f64, -0.0, fmin(f64));
2302 try testArgs(f64, -0.0, 0.1);
2303 try testArgs(f64, -0.0, 1.0);
2304 try testArgs(f64, -0.0, 10.0);
2305 try testArgs(f64, -0.0, fmax(f64));
2306 try testArgs(f64, -0.0, inf(f64));
2307 try testArgs(f64, -0.0, nan(f64));
2308
2309 try testArgs(f64, 0.0, -nan(f64));
2310 try testArgs(f64, 0.0, -inf(f64));
2311 try testArgs(f64, 0.0, -fmax(f64));
2312 try testArgs(f64, 0.0, -10.0);
2313 try testArgs(f64, 0.0, -1.0);
2314 try testArgs(f64, 0.0, -0.1);
2315 try testArgs(f64, 0.0, -fmin(f64));
2316 try testArgs(f64, 0.0, -tmin(f64));
2317 try testArgs(f64, 0.0, -0.0);
2318 try testArgs(f64, 0.0, 0.0);
2319 try testArgs(f64, 0.0, tmin(f64));
2320 try testArgs(f64, 0.0, fmin(f64));
2321 try testArgs(f64, 0.0, 0.1);
2322 try testArgs(f64, 0.0, 1.0);
2323 try testArgs(f64, 0.0, 10.0);
2324 try testArgs(f64, 0.0, fmax(f64));
2325 try testArgs(f64, 0.0, inf(f64));
2326 try testArgs(f64, 0.0, nan(f64));
2327
2328 try testArgs(f64, tmin(f64), -nan(f64));
2329 try testArgs(f64, tmin(f64), -inf(f64));
2330 try testArgs(f64, tmin(f64), -fmax(f64));
2331 try testArgs(f64, tmin(f64), -10.0);
2332 try testArgs(f64, tmin(f64), -1.0);
2333 try testArgs(f64, tmin(f64), -0.1);
2334 try testArgs(f64, tmin(f64), -fmin(f64));
2335 try testArgs(f64, tmin(f64), -tmin(f64));
2336 try testArgs(f64, tmin(f64), -0.0);
2337 try testArgs(f64, tmin(f64), 0.0);
2338 try testArgs(f64, tmin(f64), tmin(f64));
2339 try testArgs(f64, tmin(f64), fmin(f64));
2340 try testArgs(f64, tmin(f64), 0.1);
2341 try testArgs(f64, tmin(f64), 1.0);
2342 try testArgs(f64, tmin(f64), 10.0);
2343 try testArgs(f64, tmin(f64), fmax(f64));
2344 try testArgs(f64, tmin(f64), inf(f64));
2345 try testArgs(f64, tmin(f64), nan(f64));
2346
2347 try testArgs(f64, fmin(f64), -nan(f64));
2348 try testArgs(f64, fmin(f64), -inf(f64));
2349 try testArgs(f64, fmin(f64), -fmax(f64));
2350 try testArgs(f64, fmin(f64), -10.0);
2351 try testArgs(f64, fmin(f64), -1.0);
2352 try testArgs(f64, fmin(f64), -0.1);
2353 try testArgs(f64, fmin(f64), -fmin(f64));
2354 try testArgs(f64, fmin(f64), -tmin(f64));
2355 try testArgs(f64, fmin(f64), -0.0);
2356 try testArgs(f64, fmin(f64), 0.0);
2357 try testArgs(f64, fmin(f64), tmin(f64));
2358 try testArgs(f64, fmin(f64), fmin(f64));
2359 try testArgs(f64, fmin(f64), 0.1);
2360 try testArgs(f64, fmin(f64), 1.0);
2361 try testArgs(f64, fmin(f64), 10.0);
2362 try testArgs(f64, fmin(f64), fmax(f64));
2363 try testArgs(f64, fmin(f64), inf(f64));
2364 try testArgs(f64, fmin(f64), nan(f64));
2365
2366 try testArgs(f64, 0.1, -nan(f64));
2367 try testArgs(f64, 0.1, -inf(f64));
2368 try testArgs(f64, 0.1, -fmax(f64));
2369 try testArgs(f64, 0.1, -10.0);
2370 try testArgs(f64, 0.1, -1.0);
2371 try testArgs(f64, 0.1, -0.1);
2372 try testArgs(f64, 0.1, -fmin(f64));
2373 try testArgs(f64, 0.1, -tmin(f64));
2374 try testArgs(f64, 0.1, -0.0);
2375 try testArgs(f64, 0.1, 0.0);
2376 try testArgs(f64, 0.1, tmin(f64));
2377 try testArgs(f64, 0.1, fmin(f64));
2378 try testArgs(f64, 0.1, 0.1);
2379 try testArgs(f64, 0.1, 1.0);
2380 try testArgs(f64, 0.1, 10.0);
2381 try testArgs(f64, 0.1, fmax(f64));
2382 try testArgs(f64, 0.1, inf(f64));
2383 try testArgs(f64, 0.1, nan(f64));
2384
2385 try testArgs(f64, 1.0, -nan(f64));
2386 try testArgs(f64, 1.0, -inf(f64));
2387 try testArgs(f64, 1.0, -fmax(f64));
2388 try testArgs(f64, 1.0, -10.0);
2389 try testArgs(f64, 1.0, -1.0);
2390 try testArgs(f64, 1.0, -0.1);
2391 try testArgs(f64, 1.0, -fmin(f64));
2392 try testArgs(f64, 1.0, -tmin(f64));
2393 try testArgs(f64, 1.0, -0.0);
2394 try testArgs(f64, 1.0, 0.0);
2395 try testArgs(f64, 1.0, tmin(f64));
2396 try testArgs(f64, 1.0, fmin(f64));
2397 try testArgs(f64, 1.0, 0.1);
2398 try testArgs(f64, 1.0, 1.0);
2399 try testArgs(f64, 1.0, 10.0);
2400 try testArgs(f64, 1.0, fmax(f64));
2401 try testArgs(f64, 1.0, inf(f64));
2402 try testArgs(f64, 1.0, nan(f64));
2403
2404 try testArgs(f64, 10.0, -nan(f64));
2405 try testArgs(f64, 10.0, -inf(f64));
2406 try testArgs(f64, 10.0, -fmax(f64));
2407 try testArgs(f64, 10.0, -10.0);
2408 try testArgs(f64, 10.0, -1.0);
2409 try testArgs(f64, 10.0, -0.1);
2410 try testArgs(f64, 10.0, -fmin(f64));
2411 try testArgs(f64, 10.0, -tmin(f64));
2412 try testArgs(f64, 10.0, -0.0);
2413 try testArgs(f64, 10.0, 0.0);
2414 try testArgs(f64, 10.0, tmin(f64));
2415 try testArgs(f64, 10.0, fmin(f64));
2416 try testArgs(f64, 10.0, 0.1);
2417 try testArgs(f64, 10.0, 1.0);
2418 try testArgs(f64, 10.0, 10.0);
2419 try testArgs(f64, 10.0, fmax(f64));
2420 try testArgs(f64, 10.0, inf(f64));
2421 try testArgs(f64, 10.0, nan(f64));
2422
2423 try testArgs(f64, fmax(f64), -nan(f64));
2424 try testArgs(f64, fmax(f64), -inf(f64));
2425 try testArgs(f64, fmax(f64), -fmax(f64));
2426 try testArgs(f64, fmax(f64), -10.0);
2427 try testArgs(f64, fmax(f64), -1.0);
2428 try testArgs(f64, fmax(f64), -0.1);
2429 try testArgs(f64, fmax(f64), -fmin(f64));
2430 try testArgs(f64, fmax(f64), -tmin(f64));
2431 try testArgs(f64, fmax(f64), -0.0);
2432 try testArgs(f64, fmax(f64), 0.0);
2433 try testArgs(f64, fmax(f64), tmin(f64));
2434 try testArgs(f64, fmax(f64), fmin(f64));
2435 try testArgs(f64, fmax(f64), 0.1);
2436 try testArgs(f64, fmax(f64), 1.0);
2437 try testArgs(f64, fmax(f64), 10.0);
2438 try testArgs(f64, fmax(f64), fmax(f64));
2439 try testArgs(f64, fmax(f64), inf(f64));
2440 try testArgs(f64, fmax(f64), nan(f64));
2441
2442 try testArgs(f64, inf(f64), -nan(f64));
2443 try testArgs(f64, inf(f64), -inf(f64));
2444 try testArgs(f64, inf(f64), -fmax(f64));
2445 try testArgs(f64, inf(f64), -10.0);
2446 try testArgs(f64, inf(f64), -1.0);
2447 try testArgs(f64, inf(f64), -0.1);
2448 try testArgs(f64, inf(f64), -fmin(f64));
2449 try testArgs(f64, inf(f64), -tmin(f64));
2450 try testArgs(f64, inf(f64), -0.0);
2451 try testArgs(f64, inf(f64), 0.0);
2452 try testArgs(f64, inf(f64), tmin(f64));
2453 try testArgs(f64, inf(f64), fmin(f64));
2454 try testArgs(f64, inf(f64), 0.1);
2455 try testArgs(f64, inf(f64), 1.0);
2456 try testArgs(f64, inf(f64), 10.0);
2457 try testArgs(f64, inf(f64), fmax(f64));
2458 try testArgs(f64, inf(f64), inf(f64));
2459 try testArgs(f64, inf(f64), nan(f64));
2460
2461 try testArgs(f64, nan(f64), -nan(f64));
2462 try testArgs(f64, nan(f64), -inf(f64));
2463 try testArgs(f64, nan(f64), -fmax(f64));
2464 try testArgs(f64, nan(f64), -10.0);
2465 try testArgs(f64, nan(f64), -1.0);
2466 try testArgs(f64, nan(f64), -0.1);
2467 try testArgs(f64, nan(f64), -fmin(f64));
2468 try testArgs(f64, nan(f64), -tmin(f64));
2469 try testArgs(f64, nan(f64), -0.0);
2470 try testArgs(f64, nan(f64), 0.0);
2471 try testArgs(f64, nan(f64), tmin(f64));
2472 try testArgs(f64, nan(f64), fmin(f64));
2473 try testArgs(f64, nan(f64), 0.1);
2474 try testArgs(f64, nan(f64), 1.0);
2475 try testArgs(f64, nan(f64), 10.0);
2476 try testArgs(f64, nan(f64), fmax(f64));
2477 try testArgs(f64, nan(f64), inf(f64));
2478 try testArgs(f64, nan(f64), nan(f64));
2479
2480 try testArgs(f80, -nan(f80), -nan(f80));
2481 try testArgs(f80, -nan(f80), -inf(f80));
2482 try testArgs(f80, -nan(f80), -fmax(f80));
2483 try testArgs(f80, -nan(f80), -10.0);
2484 try testArgs(f80, -nan(f80), -1.0);
2485 try testArgs(f80, -nan(f80), -0.1);
2486 try testArgs(f80, -nan(f80), -fmin(f80));
2487 try testArgs(f80, -nan(f80), -tmin(f80));
2488 try testArgs(f80, -nan(f80), -0.0);
2489 try testArgs(f80, -nan(f80), 0.0);
2490 try testArgs(f80, -nan(f80), tmin(f80));
2491 try testArgs(f80, -nan(f80), fmin(f80));
2492 try testArgs(f80, -nan(f80), 0.1);
2493 try testArgs(f80, -nan(f80), 1.0);
2494 try testArgs(f80, -nan(f80), 10.0);
2495 try testArgs(f80, -nan(f80), fmax(f80));
2496 try testArgs(f80, -nan(f80), inf(f80));
2497 try testArgs(f80, -nan(f80), nan(f80));
2498
2499 try testArgs(f80, -inf(f80), -nan(f80));
2500 try testArgs(f80, -inf(f80), -inf(f80));
2501 try testArgs(f80, -inf(f80), -fmax(f80));
2502 try testArgs(f80, -inf(f80), -10.0);
2503 try testArgs(f80, -inf(f80), -1.0);
2504 try testArgs(f80, -inf(f80), -0.1);
2505 try testArgs(f80, -inf(f80), -fmin(f80));
2506 try testArgs(f80, -inf(f80), -tmin(f80));
2507 try testArgs(f80, -inf(f80), -0.0);
2508 try testArgs(f80, -inf(f80), 0.0);
2509 try testArgs(f80, -inf(f80), tmin(f80));
2510 try testArgs(f80, -inf(f80), fmin(f80));
2511 try testArgs(f80, -inf(f80), 0.1);
2512 try testArgs(f80, -inf(f80), 1.0);
2513 try testArgs(f80, -inf(f80), 10.0);
2514 try testArgs(f80, -inf(f80), fmax(f80));
2515 try testArgs(f80, -inf(f80), inf(f80));
2516 try testArgs(f80, -inf(f80), nan(f80));
2517
2518 try testArgs(f80, -fmax(f80), -nan(f80));
2519 try testArgs(f80, -fmax(f80), -inf(f80));
2520 try testArgs(f80, -fmax(f80), -fmax(f80));
2521 try testArgs(f80, -fmax(f80), -10.0);
2522 try testArgs(f80, -fmax(f80), -1.0);
2523 try testArgs(f80, -fmax(f80), -0.1);
2524 try testArgs(f80, -fmax(f80), -fmin(f80));
2525 try testArgs(f80, -fmax(f80), -tmin(f80));
2526 try testArgs(f80, -fmax(f80), -0.0);
2527 try testArgs(f80, -fmax(f80), 0.0);
2528 try testArgs(f80, -fmax(f80), tmin(f80));
2529 try testArgs(f80, -fmax(f80), fmin(f80));
2530 try testArgs(f80, -fmax(f80), 0.1);
2531 try testArgs(f80, -fmax(f80), 1.0);
2532 try testArgs(f80, -fmax(f80), 10.0);
2533 try testArgs(f80, -fmax(f80), fmax(f80));
2534 try testArgs(f80, -fmax(f80), inf(f80));
2535 try testArgs(f80, -fmax(f80), nan(f80));
2536
2537 try testArgs(f80, -10.0, -nan(f80));
2538 try testArgs(f80, -10.0, -inf(f80));
2539 try testArgs(f80, -10.0, -fmax(f80));
2540 try testArgs(f80, -10.0, -10.0);
2541 try testArgs(f80, -10.0, -1.0);
2542 try testArgs(f80, -10.0, -0.1);
2543 try testArgs(f80, -10.0, -fmin(f80));
2544 try testArgs(f80, -10.0, -tmin(f80));
2545 try testArgs(f80, -10.0, -0.0);
2546 try testArgs(f80, -10.0, 0.0);
2547 try testArgs(f80, -10.0, tmin(f80));
2548 try testArgs(f80, -10.0, fmin(f80));
2549 try testArgs(f80, -10.0, 0.1);
2550 try testArgs(f80, -10.0, 1.0);
2551 try testArgs(f80, -10.0, 10.0);
2552 try testArgs(f80, -10.0, fmax(f80));
2553 try testArgs(f80, -10.0, inf(f80));
2554 try testArgs(f80, -10.0, nan(f80));
2555
2556 try testArgs(f80, -1.0, -nan(f80));
2557 try testArgs(f80, -1.0, -inf(f80));
2558 try testArgs(f80, -1.0, -fmax(f80));
2559 try testArgs(f80, -1.0, -10.0);
2560 try testArgs(f80, -1.0, -1.0);
2561 try testArgs(f80, -1.0, -0.1);
2562 try testArgs(f80, -1.0, -fmin(f80));
2563 try testArgs(f80, -1.0, -tmin(f80));
2564 try testArgs(f80, -1.0, -0.0);
2565 try testArgs(f80, -1.0, 0.0);
2566 try testArgs(f80, -1.0, tmin(f80));
2567 try testArgs(f80, -1.0, fmin(f80));
2568 try testArgs(f80, -1.0, 0.1);
2569 try testArgs(f80, -1.0, 1.0);
2570 try testArgs(f80, -1.0, 10.0);
2571 try testArgs(f80, -1.0, fmax(f80));
2572 try testArgs(f80, -1.0, inf(f80));
2573 try testArgs(f80, -1.0, nan(f80));
2574
2575 try testArgs(f80, -0.1, -nan(f80));
2576 try testArgs(f80, -0.1, -inf(f80));
2577 try testArgs(f80, -0.1, -fmax(f80));
2578 try testArgs(f80, -0.1, -10.0);
2579 try testArgs(f80, -0.1, -1.0);
2580 try testArgs(f80, -0.1, -0.1);
2581 try testArgs(f80, -0.1, -fmin(f80));
2582 try testArgs(f80, -0.1, -tmin(f80));
2583 try testArgs(f80, -0.1, -0.0);
2584 try testArgs(f80, -0.1, 0.0);
2585 try testArgs(f80, -0.1, tmin(f80));
2586 try testArgs(f80, -0.1, fmin(f80));
2587 try testArgs(f80, -0.1, 0.1);
2588 try testArgs(f80, -0.1, 1.0);
2589 try testArgs(f80, -0.1, 10.0);
2590 try testArgs(f80, -0.1, fmax(f80));
2591 try testArgs(f80, -0.1, inf(f80));
2592 try testArgs(f80, -0.1, nan(f80));
2593
2594 try testArgs(f80, -fmin(f80), -nan(f80));
2595 try testArgs(f80, -fmin(f80), -inf(f80));
2596 try testArgs(f80, -fmin(f80), -fmax(f80));
2597 try testArgs(f80, -fmin(f80), -10.0);
2598 try testArgs(f80, -fmin(f80), -1.0);
2599 try testArgs(f80, -fmin(f80), -0.1);
2600 try testArgs(f80, -fmin(f80), -fmin(f80));
2601 try testArgs(f80, -fmin(f80), -tmin(f80));
2602 try testArgs(f80, -fmin(f80), -0.0);
2603 try testArgs(f80, -fmin(f80), 0.0);
2604 try testArgs(f80, -fmin(f80), tmin(f80));
2605 try testArgs(f80, -fmin(f80), fmin(f80));
2606 try testArgs(f80, -fmin(f80), 0.1);
2607 try testArgs(f80, -fmin(f80), 1.0);
2608 try testArgs(f80, -fmin(f80), 10.0);
2609 try testArgs(f80, -fmin(f80), fmax(f80));
2610 try testArgs(f80, -fmin(f80), inf(f80));
2611 try testArgs(f80, -fmin(f80), nan(f80));
2612
2613 try testArgs(f80, -tmin(f80), -nan(f80));
2614 try testArgs(f80, -tmin(f80), -inf(f80));
2615 try testArgs(f80, -tmin(f80), -fmax(f80));
2616 try testArgs(f80, -tmin(f80), -10.0);
2617 try testArgs(f80, -tmin(f80), -1.0);
2618 try testArgs(f80, -tmin(f80), -0.1);
2619 try testArgs(f80, -tmin(f80), -fmin(f80));
2620 try testArgs(f80, -tmin(f80), -tmin(f80));
2621 try testArgs(f80, -tmin(f80), -0.0);
2622 try testArgs(f80, -tmin(f80), 0.0);
2623 try testArgs(f80, -tmin(f80), tmin(f80));
2624 try testArgs(f80, -tmin(f80), fmin(f80));
2625 try testArgs(f80, -tmin(f80), 0.1);
2626 try testArgs(f80, -tmin(f80), 1.0);
2627 try testArgs(f80, -tmin(f80), 10.0);
2628 try testArgs(f80, -tmin(f80), fmax(f80));
2629 try testArgs(f80, -tmin(f80), inf(f80));
2630 try testArgs(f80, -tmin(f80), nan(f80));
2631
2632 try testArgs(f80, -0.0, -nan(f80));
2633 try testArgs(f80, -0.0, -inf(f80));
2634 try testArgs(f80, -0.0, -fmax(f80));
2635 try testArgs(f80, -0.0, -10.0);
2636 try testArgs(f80, -0.0, -1.0);
2637 try testArgs(f80, -0.0, -0.1);
2638 try testArgs(f80, -0.0, -fmin(f80));
2639 try testArgs(f80, -0.0, -tmin(f80));
2640 try testArgs(f80, -0.0, -0.0);
2641 try testArgs(f80, -0.0, 0.0);
2642 try testArgs(f80, -0.0, tmin(f80));
2643 try testArgs(f80, -0.0, fmin(f80));
2644 try testArgs(f80, -0.0, 0.1);
2645 try testArgs(f80, -0.0, 1.0);
2646 try testArgs(f80, -0.0, 10.0);
2647 try testArgs(f80, -0.0, fmax(f80));
2648 try testArgs(f80, -0.0, inf(f80));
2649 try testArgs(f80, -0.0, nan(f80));
2650
2651 try testArgs(f80, 0.0, -nan(f80));
2652 try testArgs(f80, 0.0, -inf(f80));
2653 try testArgs(f80, 0.0, -fmax(f80));
2654 try testArgs(f80, 0.0, -10.0);
2655 try testArgs(f80, 0.0, -1.0);
2656 try testArgs(f80, 0.0, -0.1);
2657 try testArgs(f80, 0.0, -fmin(f80));
2658 try testArgs(f80, 0.0, -tmin(f80));
2659 try testArgs(f80, 0.0, -0.0);
2660 try testArgs(f80, 0.0, 0.0);
2661 try testArgs(f80, 0.0, tmin(f80));
2662 try testArgs(f80, 0.0, fmin(f80));
2663 try testArgs(f80, 0.0, 0.1);
2664 try testArgs(f80, 0.0, 1.0);
2665 try testArgs(f80, 0.0, 10.0);
2666 try testArgs(f80, 0.0, fmax(f80));
2667 try testArgs(f80, 0.0, inf(f80));
2668 try testArgs(f80, 0.0, nan(f80));
2669
2670 try testArgs(f80, tmin(f80), -nan(f80));
2671 try testArgs(f80, tmin(f80), -inf(f80));
2672 try testArgs(f80, tmin(f80), -fmax(f80));
2673 try testArgs(f80, tmin(f80), -10.0);
2674 try testArgs(f80, tmin(f80), -1.0);
2675 try testArgs(f80, tmin(f80), -0.1);
2676 try testArgs(f80, tmin(f80), -fmin(f80));
2677 try testArgs(f80, tmin(f80), -tmin(f80));
2678 try testArgs(f80, tmin(f80), -0.0);
2679 try testArgs(f80, tmin(f80), 0.0);
2680 try testArgs(f80, tmin(f80), tmin(f80));
2681 try testArgs(f80, tmin(f80), fmin(f80));
2682 try testArgs(f80, tmin(f80), 0.1);
2683 try testArgs(f80, tmin(f80), 1.0);
2684 try testArgs(f80, tmin(f80), 10.0);
2685 try testArgs(f80, tmin(f80), fmax(f80));
2686 try testArgs(f80, tmin(f80), inf(f80));
2687 try testArgs(f80, tmin(f80), nan(f80));
2688
2689 try testArgs(f80, fmin(f80), -nan(f80));
2690 try testArgs(f80, fmin(f80), -inf(f80));
2691 try testArgs(f80, fmin(f80), -fmax(f80));
2692 try testArgs(f80, fmin(f80), -10.0);
2693 try testArgs(f80, fmin(f80), -1.0);
2694 try testArgs(f80, fmin(f80), -0.1);
2695 try testArgs(f80, fmin(f80), -fmin(f80));
2696 try testArgs(f80, fmin(f80), -tmin(f80));
2697 try testArgs(f80, fmin(f80), -0.0);
2698 try testArgs(f80, fmin(f80), 0.0);
2699 try testArgs(f80, fmin(f80), tmin(f80));
2700 try testArgs(f80, fmin(f80), fmin(f80));
2701 try testArgs(f80, fmin(f80), 0.1);
2702 try testArgs(f80, fmin(f80), 1.0);
2703 try testArgs(f80, fmin(f80), 10.0);
2704 try testArgs(f80, fmin(f80), fmax(f80));
2705 try testArgs(f80, fmin(f80), inf(f80));
2706 try testArgs(f80, fmin(f80), nan(f80));
2707
2708 try testArgs(f80, 0.1, -nan(f80));
2709 try testArgs(f80, 0.1, -inf(f80));
2710 try testArgs(f80, 0.1, -fmax(f80));
2711 try testArgs(f80, 0.1, -10.0);
2712 try testArgs(f80, 0.1, -1.0);
2713 try testArgs(f80, 0.1, -0.1);
2714 try testArgs(f80, 0.1, -fmin(f80));
2715 try testArgs(f80, 0.1, -tmin(f80));
2716 try testArgs(f80, 0.1, -0.0);
2717 try testArgs(f80, 0.1, 0.0);
2718 try testArgs(f80, 0.1, tmin(f80));
2719 try testArgs(f80, 0.1, fmin(f80));
2720 try testArgs(f80, 0.1, 0.1);
2721 try testArgs(f80, 0.1, 1.0);
2722 try testArgs(f80, 0.1, 10.0);
2723 try testArgs(f80, 0.1, fmax(f80));
2724 try testArgs(f80, 0.1, inf(f80));
2725 try testArgs(f80, 0.1, nan(f80));
2726
2727 try testArgs(f80, 1.0, -nan(f80));
2728 try testArgs(f80, 1.0, -inf(f80));
2729 try testArgs(f80, 1.0, -fmax(f80));
2730 try testArgs(f80, 1.0, -10.0);
2731 try testArgs(f80, 1.0, -1.0);
2732 try testArgs(f80, 1.0, -0.1);
2733 try testArgs(f80, 1.0, -fmin(f80));
2734 try testArgs(f80, 1.0, -tmin(f80));
2735 try testArgs(f80, 1.0, -0.0);
2736 try testArgs(f80, 1.0, 0.0);
2737 try testArgs(f80, 1.0, tmin(f80));
2738 try testArgs(f80, 1.0, fmin(f80));
2739 try testArgs(f80, 1.0, 0.1);
2740 try testArgs(f80, 1.0, 1.0);
2741 try testArgs(f80, 1.0, 10.0);
2742 try testArgs(f80, 1.0, fmax(f80));
2743 try testArgs(f80, 1.0, inf(f80));
2744 try testArgs(f80, 1.0, nan(f80));
2745
2746 try testArgs(f80, 10.0, -nan(f80));
2747 try testArgs(f80, 10.0, -inf(f80));
2748 try testArgs(f80, 10.0, -fmax(f80));
2749 try testArgs(f80, 10.0, -10.0);
2750 try testArgs(f80, 10.0, -1.0);
2751 try testArgs(f80, 10.0, -0.1);
2752 try testArgs(f80, 10.0, -fmin(f80));
2753 try testArgs(f80, 10.0, -tmin(f80));
2754 try testArgs(f80, 10.0, -0.0);
2755 try testArgs(f80, 10.0, 0.0);
2756 try testArgs(f80, 10.0, tmin(f80));
2757 try testArgs(f80, 10.0, fmin(f80));
2758 try testArgs(f80, 10.0, 0.1);
2759 try testArgs(f80, 10.0, 1.0);
2760 try testArgs(f80, 10.0, 10.0);
2761 try testArgs(f80, 10.0, fmax(f80));
2762 try testArgs(f80, 10.0, inf(f80));
2763 try testArgs(f80, 10.0, nan(f80));
2764
2765 try testArgs(f80, fmax(f80), -nan(f80));
2766 try testArgs(f80, fmax(f80), -inf(f80));
2767 try testArgs(f80, fmax(f80), -fmax(f80));
2768 try testArgs(f80, fmax(f80), -10.0);
2769 try testArgs(f80, fmax(f80), -1.0);
2770 try testArgs(f80, fmax(f80), -0.1);
2771 try testArgs(f80, fmax(f80), -fmin(f80));
2772 try testArgs(f80, fmax(f80), -tmin(f80));
2773 try testArgs(f80, fmax(f80), -0.0);
2774 try testArgs(f80, fmax(f80), 0.0);
2775 try testArgs(f80, fmax(f80), tmin(f80));
2776 try testArgs(f80, fmax(f80), fmin(f80));
2777 try testArgs(f80, fmax(f80), 0.1);
2778 try testArgs(f80, fmax(f80), 1.0);
2779 try testArgs(f80, fmax(f80), 10.0);
2780 try testArgs(f80, fmax(f80), fmax(f80));
2781 try testArgs(f80, fmax(f80), inf(f80));
2782 try testArgs(f80, fmax(f80), nan(f80));
2783
2784 try testArgs(f80, inf(f80), -nan(f80));
2785 try testArgs(f80, inf(f80), -inf(f80));
2786 try testArgs(f80, inf(f80), -fmax(f80));
2787 try testArgs(f80, inf(f80), -10.0);
2788 try testArgs(f80, inf(f80), -1.0);
2789 try testArgs(f80, inf(f80), -0.1);
2790 try testArgs(f80, inf(f80), -fmin(f80));
2791 try testArgs(f80, inf(f80), -tmin(f80));
2792 try testArgs(f80, inf(f80), -0.0);
2793 try testArgs(f80, inf(f80), 0.0);
2794 try testArgs(f80, inf(f80), tmin(f80));
2795 try testArgs(f80, inf(f80), fmin(f80));
2796 try testArgs(f80, inf(f80), 0.1);
2797 try testArgs(f80, inf(f80), 1.0);
2798 try testArgs(f80, inf(f80), 10.0);
2799 try testArgs(f80, inf(f80), fmax(f80));
2800 try testArgs(f80, inf(f80), inf(f80));
2801 try testArgs(f80, inf(f80), nan(f80));
2802
2803 try testArgs(f80, nan(f80), -nan(f80));
2804 try testArgs(f80, nan(f80), -inf(f80));
2805 try testArgs(f80, nan(f80), -fmax(f80));
2806 try testArgs(f80, nan(f80), -10.0);
2807 try testArgs(f80, nan(f80), -1.0);
2808 try testArgs(f80, nan(f80), -0.1);
2809 try testArgs(f80, nan(f80), -fmin(f80));
2810 try testArgs(f80, nan(f80), -tmin(f80));
2811 try testArgs(f80, nan(f80), -0.0);
2812 try testArgs(f80, nan(f80), 0.0);
2813 try testArgs(f80, nan(f80), tmin(f80));
2814 try testArgs(f80, nan(f80), fmin(f80));
2815 try testArgs(f80, nan(f80), 0.1);
2816 try testArgs(f80, nan(f80), 1.0);
2817 try testArgs(f80, nan(f80), 10.0);
2818 try testArgs(f80, nan(f80), fmax(f80));
2819 try testArgs(f80, nan(f80), inf(f80));
2820 try testArgs(f80, nan(f80), nan(f80));
2821
2822 try testArgs(f128, -nan(f128), -nan(f128));
2823 try testArgs(f128, -nan(f128), -inf(f128));
2824 try testArgs(f128, -nan(f128), -fmax(f128));
2825 try testArgs(f128, -nan(f128), -10.0);
2826 try testArgs(f128, -nan(f128), -1.0);
2827 try testArgs(f128, -nan(f128), -0.1);
2828 try testArgs(f128, -nan(f128), -fmin(f128));
2829 try testArgs(f128, -nan(f128), -tmin(f128));
2830 try testArgs(f128, -nan(f128), -0.0);
2831 try testArgs(f128, -nan(f128), 0.0);
2832 try testArgs(f128, -nan(f128), tmin(f128));
2833 try testArgs(f128, -nan(f128), fmin(f128));
2834 try testArgs(f128, -nan(f128), 0.1);
2835 try testArgs(f128, -nan(f128), 1.0);
2836 try testArgs(f128, -nan(f128), 10.0);
2837 try testArgs(f128, -nan(f128), fmax(f128));
2838 try testArgs(f128, -nan(f128), inf(f128));
2839 try testArgs(f128, -nan(f128), nan(f128));
2840
2841 try testArgs(f128, -inf(f128), -nan(f128));
2842 try testArgs(f128, -inf(f128), -inf(f128));
2843 try testArgs(f128, -inf(f128), -fmax(f128));
2844 try testArgs(f128, -inf(f128), -10.0);
2845 try testArgs(f128, -inf(f128), -1.0);
2846 try testArgs(f128, -inf(f128), -0.1);
2847 try testArgs(f128, -inf(f128), -fmin(f128));
2848 try testArgs(f128, -inf(f128), -tmin(f128));
2849 try testArgs(f128, -inf(f128), -0.0);
2850 try testArgs(f128, -inf(f128), 0.0);
2851 try testArgs(f128, -inf(f128), tmin(f128));
2852 try testArgs(f128, -inf(f128), fmin(f128));
2853 try testArgs(f128, -inf(f128), 0.1);
2854 try testArgs(f128, -inf(f128), 1.0);
2855 try testArgs(f128, -inf(f128), 10.0);
2856 try testArgs(f128, -inf(f128), fmax(f128));
2857 try testArgs(f128, -inf(f128), inf(f128));
2858 try testArgs(f128, -inf(f128), nan(f128));
2859
2860 try testArgs(f128, -fmax(f128), -nan(f128));
2861 try testArgs(f128, -fmax(f128), -inf(f128));
2862 try testArgs(f128, -fmax(f128), -fmax(f128));
2863 try testArgs(f128, -fmax(f128), -10.0);
2864 try testArgs(f128, -fmax(f128), -1.0);
2865 try testArgs(f128, -fmax(f128), -0.1);
2866 try testArgs(f128, -fmax(f128), -fmin(f128));
2867 try testArgs(f128, -fmax(f128), -tmin(f128));
2868 try testArgs(f128, -fmax(f128), -0.0);
2869 try testArgs(f128, -fmax(f128), 0.0);
2870 try testArgs(f128, -fmax(f128), tmin(f128));
2871 try testArgs(f128, -fmax(f128), fmin(f128));
2872 try testArgs(f128, -fmax(f128), 0.1);
2873 try testArgs(f128, -fmax(f128), 1.0);
2874 try testArgs(f128, -fmax(f128), 10.0);
2875 try testArgs(f128, -fmax(f128), fmax(f128));
2876 try testArgs(f128, -fmax(f128), inf(f128));
2877 try testArgs(f128, -fmax(f128), nan(f128));
2878
2879 try testArgs(f128, -10.0, -nan(f128));
2880 try testArgs(f128, -10.0, -inf(f128));
2881 try testArgs(f128, -10.0, -fmax(f128));
2882 try testArgs(f128, -10.0, -10.0);
2883 try testArgs(f128, -10.0, -1.0);
2884 try testArgs(f128, -10.0, -0.1);
2885 try testArgs(f128, -10.0, -fmin(f128));
2886 try testArgs(f128, -10.0, -tmin(f128));
2887 try testArgs(f128, -10.0, -0.0);
2888 try testArgs(f128, -10.0, 0.0);
2889 try testArgs(f128, -10.0, tmin(f128));
2890 try testArgs(f128, -10.0, fmin(f128));
2891 try testArgs(f128, -10.0, 0.1);
2892 try testArgs(f128, -10.0, 1.0);
2893 try testArgs(f128, -10.0, 10.0);
2894 try testArgs(f128, -10.0, fmax(f128));
2895 try testArgs(f128, -10.0, inf(f128));
2896 try testArgs(f128, -10.0, nan(f128));
2897
2898 try testArgs(f128, -1.0, -nan(f128));
2899 try testArgs(f128, -1.0, -inf(f128));
2900 try testArgs(f128, -1.0, -fmax(f128));
2901 try testArgs(f128, -1.0, -10.0);
2902 try testArgs(f128, -1.0, -1.0);
2903 try testArgs(f128, -1.0, -0.1);
2904 try testArgs(f128, -1.0, -fmin(f128));
2905 try testArgs(f128, -1.0, -tmin(f128));
2906 try testArgs(f128, -1.0, -0.0);
2907 try testArgs(f128, -1.0, 0.0);
2908 try testArgs(f128, -1.0, tmin(f128));
2909 try testArgs(f128, -1.0, fmin(f128));
2910 try testArgs(f128, -1.0, 0.1);
2911 try testArgs(f128, -1.0, 1.0);
2912 try testArgs(f128, -1.0, 10.0);
2913 try testArgs(f128, -1.0, fmax(f128));
2914 try testArgs(f128, -1.0, inf(f128));
2915 try testArgs(f128, -1.0, nan(f128));
2916
2917 try testArgs(f128, -0.1, -nan(f128));
2918 try testArgs(f128, -0.1, -inf(f128));
2919 try testArgs(f128, -0.1, -fmax(f128));
2920 try testArgs(f128, -0.1, -10.0);
2921 try testArgs(f128, -0.1, -1.0);
2922 try testArgs(f128, -0.1, -0.1);
2923 try testArgs(f128, -0.1, -fmin(f128));
2924 try testArgs(f128, -0.1, -tmin(f128));
2925 try testArgs(f128, -0.1, -0.0);
2926 try testArgs(f128, -0.1, 0.0);
2927 try testArgs(f128, -0.1, tmin(f128));
2928 try testArgs(f128, -0.1, fmin(f128));
2929 try testArgs(f128, -0.1, 0.1);
2930 try testArgs(f128, -0.1, 1.0);
2931 try testArgs(f128, -0.1, 10.0);
2932 try testArgs(f128, -0.1, fmax(f128));
2933 try testArgs(f128, -0.1, inf(f128));
2934 try testArgs(f128, -0.1, nan(f128));
2935
2936 try testArgs(f128, -fmin(f128), -nan(f128));
2937 try testArgs(f128, -fmin(f128), -inf(f128));
2938 try testArgs(f128, -fmin(f128), -fmax(f128));
2939 try testArgs(f128, -fmin(f128), -10.0);
2940 try testArgs(f128, -fmin(f128), -1.0);
2941 try testArgs(f128, -fmin(f128), -0.1);
2942 try testArgs(f128, -fmin(f128), -fmin(f128));
2943 try testArgs(f128, -fmin(f128), -tmin(f128));
2944 try testArgs(f128, -fmin(f128), -0.0);
2945 try testArgs(f128, -fmin(f128), 0.0);
2946 try testArgs(f128, -fmin(f128), tmin(f128));
2947 try testArgs(f128, -fmin(f128), fmin(f128));
2948 try testArgs(f128, -fmin(f128), 0.1);
2949 try testArgs(f128, -fmin(f128), 1.0);
2950 try testArgs(f128, -fmin(f128), 10.0);
2951 try testArgs(f128, -fmin(f128), fmax(f128));
2952 try testArgs(f128, -fmin(f128), inf(f128));
2953 try testArgs(f128, -fmin(f128), nan(f128));
2954
2955 try testArgs(f128, -tmin(f128), -nan(f128));
2956 try testArgs(f128, -tmin(f128), -inf(f128));
2957 try testArgs(f128, -tmin(f128), -fmax(f128));
2958 try testArgs(f128, -tmin(f128), -10.0);
2959 try testArgs(f128, -tmin(f128), -1.0);
2960 try testArgs(f128, -tmin(f128), -0.1);
2961 try testArgs(f128, -tmin(f128), -fmin(f128));
2962 try testArgs(f128, -tmin(f128), -tmin(f128));
2963 try testArgs(f128, -tmin(f128), -0.0);
2964 try testArgs(f128, -tmin(f128), 0.0);
2965 try testArgs(f128, -tmin(f128), tmin(f128));
2966 try testArgs(f128, -tmin(f128), fmin(f128));
2967 try testArgs(f128, -tmin(f128), 0.1);
2968 try testArgs(f128, -tmin(f128), 1.0);
2969 try testArgs(f128, -tmin(f128), 10.0);
2970 try testArgs(f128, -tmin(f128), fmax(f128));
2971 try testArgs(f128, -tmin(f128), inf(f128));
2972 try testArgs(f128, -tmin(f128), nan(f128));
2973
2974 try testArgs(f128, -0.0, -nan(f128));
2975 try testArgs(f128, -0.0, -inf(f128));
2976 try testArgs(f128, -0.0, -fmax(f128));
2977 try testArgs(f128, -0.0, -10.0);
2978 try testArgs(f128, -0.0, -1.0);
2979 try testArgs(f128, -0.0, -0.1);
2980 try testArgs(f128, -0.0, -fmin(f128));
2981 try testArgs(f128, -0.0, -tmin(f128));
2982 try testArgs(f128, -0.0, -0.0);
2983 try testArgs(f128, -0.0, 0.0);
2984 try testArgs(f128, -0.0, tmin(f128));
2985 try testArgs(f128, -0.0, fmin(f128));
2986 try testArgs(f128, -0.0, 0.1);
2987 try testArgs(f128, -0.0, 1.0);
2988 try testArgs(f128, -0.0, 10.0);
2989 try testArgs(f128, -0.0, fmax(f128));
2990 try testArgs(f128, -0.0, inf(f128));
2991 try testArgs(f128, -0.0, nan(f128));
2992
2993 try testArgs(f128, 0.0, -nan(f128));
2994 try testArgs(f128, 0.0, -inf(f128));
2995 try testArgs(f128, 0.0, -fmax(f128));
2996 try testArgs(f128, 0.0, -10.0);
2997 try testArgs(f128, 0.0, -1.0);
2998 try testArgs(f128, 0.0, -0.1);
2999 try testArgs(f128, 0.0, -fmin(f128));
3000 try testArgs(f128, 0.0, -tmin(f128));
3001 try testArgs(f128, 0.0, -0.0);
3002 try testArgs(f128, 0.0, 0.0);
3003 try testArgs(f128, 0.0, tmin(f128));
3004 try testArgs(f128, 0.0, fmin(f128));
3005 try testArgs(f128, 0.0, 0.1);
3006 try testArgs(f128, 0.0, 1.0);
3007 try testArgs(f128, 0.0, 10.0);
3008 try testArgs(f128, 0.0, fmax(f128));
3009 try testArgs(f128, 0.0, inf(f128));
3010 try testArgs(f128, 0.0, nan(f128));
3011
3012 try testArgs(f128, tmin(f128), -nan(f128));
3013 try testArgs(f128, tmin(f128), -inf(f128));
3014 try testArgs(f128, tmin(f128), -fmax(f128));
3015 try testArgs(f128, tmin(f128), -10.0);
3016 try testArgs(f128, tmin(f128), -1.0);
3017 try testArgs(f128, tmin(f128), -0.1);
3018 try testArgs(f128, tmin(f128), -fmin(f128));
3019 try testArgs(f128, tmin(f128), -tmin(f128));
3020 try testArgs(f128, tmin(f128), -0.0);
3021 try testArgs(f128, tmin(f128), 0.0);
3022 try testArgs(f128, tmin(f128), tmin(f128));
3023 try testArgs(f128, tmin(f128), fmin(f128));
3024 try testArgs(f128, tmin(f128), 0.1);
3025 try testArgs(f128, tmin(f128), 1.0);
3026 try testArgs(f128, tmin(f128), 10.0);
3027 try testArgs(f128, tmin(f128), fmax(f128));
3028 try testArgs(f128, tmin(f128), inf(f128));
3029 try testArgs(f128, tmin(f128), nan(f128));
3030
3031 try testArgs(f128, fmin(f128), -nan(f128));
3032 try testArgs(f128, fmin(f128), -inf(f128));
3033 try testArgs(f128, fmin(f128), -fmax(f128));
3034 try testArgs(f128, fmin(f128), -10.0);
3035 try testArgs(f128, fmin(f128), -1.0);
3036 try testArgs(f128, fmin(f128), -0.1);
3037 try testArgs(f128, fmin(f128), -fmin(f128));
3038 try testArgs(f128, fmin(f128), -tmin(f128));
3039 try testArgs(f128, fmin(f128), -0.0);
3040 try testArgs(f128, fmin(f128), 0.0);
3041 try testArgs(f128, fmin(f128), tmin(f128));
3042 try testArgs(f128, fmin(f128), fmin(f128));
3043 try testArgs(f128, fmin(f128), 0.1);
3044 try testArgs(f128, fmin(f128), 1.0);
3045 try testArgs(f128, fmin(f128), 10.0);
3046 try testArgs(f128, fmin(f128), fmax(f128));
3047 try testArgs(f128, fmin(f128), inf(f128));
3048 try testArgs(f128, fmin(f128), nan(f128));
3049
3050 try testArgs(f128, 0.1, -nan(f128));
3051 try testArgs(f128, 0.1, -inf(f128));
3052 try testArgs(f128, 0.1, -fmax(f128));
3053 try testArgs(f128, 0.1, -10.0);
3054 try testArgs(f128, 0.1, -1.0);
3055 try testArgs(f128, 0.1, -0.1);
3056 try testArgs(f128, 0.1, -fmin(f128));
3057 try testArgs(f128, 0.1, -tmin(f128));
3058 try testArgs(f128, 0.1, -0.0);
3059 try testArgs(f128, 0.1, 0.0);
3060 try testArgs(f128, 0.1, tmin(f128));
3061 try testArgs(f128, 0.1, fmin(f128));
3062 try testArgs(f128, 0.1, 0.1);
3063 try testArgs(f128, 0.1, 1.0);
3064 try testArgs(f128, 0.1, 10.0);
3065 try testArgs(f128, 0.1, fmax(f128));
3066 try testArgs(f128, 0.1, inf(f128));
3067 try testArgs(f128, 0.1, nan(f128));
3068
3069 try testArgs(f128, 1.0, -nan(f128));
3070 try testArgs(f128, 1.0, -inf(f128));
3071 try testArgs(f128, 1.0, -fmax(f128));
3072 try testArgs(f128, 1.0, -10.0);
3073 try testArgs(f128, 1.0, -1.0);
3074 try testArgs(f128, 1.0, -0.1);
3075 try testArgs(f128, 1.0, -fmin(f128));
3076 try testArgs(f128, 1.0, -tmin(f128));
3077 try testArgs(f128, 1.0, -0.0);
3078 try testArgs(f128, 1.0, 0.0);
3079 try testArgs(f128, 1.0, tmin(f128));
3080 try testArgs(f128, 1.0, fmin(f128));
3081 try testArgs(f128, 1.0, 0.1);
3082 try testArgs(f128, 1.0, 1.0);
3083 try testArgs(f128, 1.0, 10.0);
3084 try testArgs(f128, 1.0, fmax(f128));
3085 try testArgs(f128, 1.0, inf(f128));
3086 try testArgs(f128, 1.0, nan(f128));
3087
3088 try testArgs(f128, 10.0, -nan(f128));
3089 try testArgs(f128, 10.0, -inf(f128));
3090 try testArgs(f128, 10.0, -fmax(f128));
3091 try testArgs(f128, 10.0, -10.0);
3092 try testArgs(f128, 10.0, -1.0);
3093 try testArgs(f128, 10.0, -0.1);
3094 try testArgs(f128, 10.0, -fmin(f128));
3095 try testArgs(f128, 10.0, -tmin(f128));
3096 try testArgs(f128, 10.0, -0.0);
3097 try testArgs(f128, 10.0, 0.0);
3098 try testArgs(f128, 10.0, tmin(f128));
3099 try testArgs(f128, 10.0, fmin(f128));
3100 try testArgs(f128, 10.0, 0.1);
3101 try testArgs(f128, 10.0, 1.0);
3102 try testArgs(f128, 10.0, 10.0);
3103 try testArgs(f128, 10.0, fmax(f128));
3104 try testArgs(f128, 10.0, inf(f128));
3105 try testArgs(f128, 10.0, nan(f128));
3106
3107 try testArgs(f128, fmax(f128), -nan(f128));
3108 try testArgs(f128, fmax(f128), -inf(f128));
3109 try testArgs(f128, fmax(f128), -fmax(f128));
3110 try testArgs(f128, fmax(f128), -10.0);
3111 try testArgs(f128, fmax(f128), -1.0);
3112 try testArgs(f128, fmax(f128), -0.1);
3113 try testArgs(f128, fmax(f128), -fmin(f128));
3114 try testArgs(f128, fmax(f128), -tmin(f128));
3115 try testArgs(f128, fmax(f128), -0.0);
3116 try testArgs(f128, fmax(f128), 0.0);
3117 try testArgs(f128, fmax(f128), tmin(f128));
3118 try testArgs(f128, fmax(f128), fmin(f128));
3119 try testArgs(f128, fmax(f128), 0.1);
3120 try testArgs(f128, fmax(f128), 1.0);
3121 try testArgs(f128, fmax(f128), 10.0);
3122 try testArgs(f128, fmax(f128), fmax(f128));
3123 try testArgs(f128, fmax(f128), inf(f128));
3124 try testArgs(f128, fmax(f128), nan(f128));
3125
3126 try testArgs(f128, inf(f128), -nan(f128));
3127 try testArgs(f128, inf(f128), -inf(f128));
3128 try testArgs(f128, inf(f128), -fmax(f128));
3129 try testArgs(f128, inf(f128), -10.0);
3130 try testArgs(f128, inf(f128), -1.0);
3131 try testArgs(f128, inf(f128), -0.1);
3132 try testArgs(f128, inf(f128), -fmin(f128));
3133 try testArgs(f128, inf(f128), -tmin(f128));
3134 try testArgs(f128, inf(f128), -0.0);
3135 try testArgs(f128, inf(f128), 0.0);
3136 try testArgs(f128, inf(f128), tmin(f128));
3137 try testArgs(f128, inf(f128), fmin(f128));
3138 try testArgs(f128, inf(f128), 0.1);
3139 try testArgs(f128, inf(f128), 1.0);
3140 try testArgs(f128, inf(f128), 10.0);
3141 try testArgs(f128, inf(f128), fmax(f128));
3142 try testArgs(f128, inf(f128), inf(f128));
3143 try testArgs(f128, inf(f128), nan(f128));
3144
3145 try testArgs(f128, nan(f128), -nan(f128));
3146 try testArgs(f128, nan(f128), -inf(f128));
3147 try testArgs(f128, nan(f128), -fmax(f128));
3148 try testArgs(f128, nan(f128), -10.0);
3149 try testArgs(f128, nan(f128), -1.0);
3150 try testArgs(f128, nan(f128), -0.1);
3151 try testArgs(f128, nan(f128), -fmin(f128));
3152 try testArgs(f128, nan(f128), -tmin(f128));
3153 try testArgs(f128, nan(f128), -0.0);
3154 try testArgs(f128, nan(f128), 0.0);
3155 try testArgs(f128, nan(f128), tmin(f128));
3156 try testArgs(f128, nan(f128), fmin(f128));
3157 try testArgs(f128, nan(f128), 0.1);
3158 try testArgs(f128, nan(f128), 1.0);
3159 try testArgs(f128, nan(f128), 10.0);
3160 try testArgs(f128, nan(f128), fmax(f128));
3161 try testArgs(f128, nan(f128), inf(f128));
3162 try testArgs(f128, nan(f128), nan(f128));
3163 }
14453164 fn testIntVectorTypes() !void {
14463165 try testArgs(@Vector(1, i8), .{
14473166 -0x54,
......@@ -2062,6 +3781,396 @@ fn Binary(comptime op: anytype) type {
20623781 0xf1e3bbe031d59351770a7a501b6e969b2c00d144f17648db3f944b69dfeb7be72e5ff933a061eba4eaa422f8ca09e5a97d0b0dd740fd4076eba8c72d7a278523f399202dc2d043c4e0eb58a2bcd4066e2146e321810b1ee4d3afdddb4f026bcc7905ce17e033a7727b4e08f33b53c63d8c9f763fc6c31d0523eb38c30d5e40bc,
20633782 });
20643783 }
3784 fn testFloatVectorTypes() !void {
3785 @setEvalBranchQuota(21_700);
3786
3787 try testArgs(@Vector(1, f16), .{
3788 -tmin(f16),
3789 }, .{
3790 fmax(f16),
3791 });
3792 try testArgs(@Vector(2, f16), .{
3793 0.1, 1.0,
3794 }, .{
3795 -nan(f16), -fmin(f16),
3796 });
3797 try testArgs(@Vector(4, f16), .{
3798 0.1, -fmax(f16), 0.0, 0.1,
3799 }, .{
3800 -fmin(f16), -10.0, 1.0, -tmin(f16),
3801 });
3802 try testArgs(@Vector(8, f16), .{
3803 -fmax(f16), -fmin(f16), -nan(f16), -0.0, tmin(f16), -0.0, 0.0, 0.1,
3804 }, .{
3805 -1.0, tmin(f16), nan(f16), nan(f16), -fmax(f16), -10.0, -nan(f16), 10.0,
3806 });
3807 try testArgs(@Vector(16, f16), .{
3808 0.1, fmax(f16), -10.0, fmax(f16), -10.0, 0.1, -tmin(f16), -inf(f16), -tmin(f16), -1.0, -fmin(f16), tmin(f16), 10.0, -fmax(f16), 0.0, -fmin(f16),
3809 }, .{
3810 inf(f16), -10.0, -fmax(f16), fmax(f16), -tmin(f16), 0.0, -1.0, -1.0, 0.1, -nan(f16), -tmin(f16), 1.0, 0.1, fmax(f16), -0.0, inf(f16),
3811 });
3812 try testArgs(@Vector(32, f16), .{
3813 -inf(f16), tmin(f16), fmin(f16), -nan(f16), nan(f16), 0.1, 0.0, 10.0, -tmin(f16), inf(f16), 1.0, -10.0, fmin(f16), -0.0, 1.0, -fmax(f16),
3814 10.0, -0.0, -10.0, -tmin(f16), fmax(f16), nan(f16), -fmin(f16), -1.0, 0.0, -10.0, -nan(f16), 1.0, -tmin(f16), -0.0, nan(f16), 10.0,
3815 }, .{
3816 0.0, 10.0, -nan(f16), -0.0, tmin(f16), fmax(f16), nan(f16), tmin(f16), -10.0, 0.1, 10.0, fmin(f16), -fmax(f16), inf(f16), inf(f16), -tmin(f16),
3817 inf(f16), -0.0, 0.1, 0.0, -fmin(f16), -0.0, -nan(f16), -inf(f16), -fmin(f16), fmax(f16), 1.0, fmin(f16), -0.0, -tmin(f16), -fmax(f16), -10.0,
3818 });
3819 try testArgs(@Vector(64, f16), .{
3820 -nan(f16), fmin(f16), -inf(f16), inf(f16), -tmin(f16), inf(f16), 0.1, -1.0, -inf(f16), nan(f16), -fmin(f16), 0.1, -tmin(f16), -fmax(f16), -10.0, inf(f16),
3821 0.0, -fmin(f16), -fmax(f16), 10.0, -fmax(f16), fmax(f16), 10.0, fmin(f16), -inf(f16), -nan(f16), -tmin(f16), nan(f16), -0.0, 0.0, 0.1, -fmin(f16),
3822 0.0, nan(f16), inf(f16), fmax(f16), nan(f16), tmin(f16), 1.0, tmin(f16), fmin(f16), -10.0, 0.0, 0.1, inf(f16), -10.0, inf(f16), 1.0,
3823 0.1, -inf(f16), 10.0, -0.0, -1.0, -tmin(f16), -nan(f16), 0.1, 0.1, -nan(f16), -0.0, -10.0, -0.0, -nan(f16), 0.1, fmin(f16),
3824 }, .{
3825 10.0, 0.0, fmax(f16), -inf(f16), -fmax(f16), -fmax(f16), tmin(f16), -1.0, -tmin(f16), -10.0, nan(f16), -nan(f16), tmin(f16), -fmin(f16), nan(f16), -10.0,
3826 10.0, fmax(f16), 0.1, 0.0, 0.1, -fmax(f16), -0.0, -fmin(f16), inf(f16), -1.0, inf(f16), fmin(f16), -inf(f16), -tmin(f16), 10.0, 10.0,
3827 0.1, 0.1, 0.1, 10.0, -fmin(f16), inf(f16), 0.1, fmax(f16), inf(f16), -0.0, -10.0, tmin(f16), -fmin(f16), 0.0, 10.0, 0.0,
3828 -tmin(f16), -inf(f16), 1.0, -fmax(f16), inf(f16), 10.0, fmax(f16), -1.0, 0.0, 0.1, -1.0, -inf(f16), 0.1, 0.0, -10.0, fmax(f16),
3829 });
3830 try testArgs(@Vector(128, f16), .{
3831 -fmin(f16), 1.0, 0.0, 0.1, nan(f16), 0.1, 0.1, -inf(f16), -tmin(f16), 1.0, -fmin(f16), -fmax(f16), -1.0, -fmin(f16), 10.0, -nan(f16),
3832 inf(f16), -inf(f16), tmin(f16), -10.0, -1.0, -0.0, -0.0, 1.0, nan(f16), -10.0, fmin(f16), -tmin(f16), tmin(f16), 0.1, -fmax(f16), fmax(f16),
3833 tmin(f16), -fmin(f16), nan(f16), 10.0, 1.0, -fmin(f16), 0.1, 10.0, fmax(f16), fmax(f16), fmax(f16), -1.0, -nan(f16), 10.0, tmin(f16), -nan(f16),
3834 -nan(f16), -inf(f16), -0.0, -inf(f16), nan(f16), -1.0, 0.1, -fmax(f16), -10.0, nan(f16), 1.0, -10.0, tmin(f16), 1.0, 0.1, 1.0,
3835 10.0, 0.1, tmin(f16), nan(f16), -inf(f16), -1.0, -1.0, -fmax(f16), -inf(f16), 0.1, 0.1, -0.0, 10.0, fmin(f16), -1.0, inf(f16),
3836 0.1, -10.0, inf(f16), -0.0, 0.1, 0.0, inf(f16), 1.0, tmin(f16), -tmin(f16), 0.1, inf(f16), tmin(f16), -inf(f16), 10.0, 1.0,
3837 -inf(f16), 0.1, 1.0, fmax(f16), -fmin(f16), nan(f16), -nan(f16), fmin(f16), -1.0, -fmax(f16), inf(f16), -fmax(f16), 0.0, -10.0, fmin(f16), -fmax(f16),
3838 -0.0, -1.0, 0.1, 10.0, inf(f16), fmax(f16), inf(f16), 10.0, fmax(f16), -0.0, -tmin(f16), fmin(f16), inf(f16), nan(f16), -fmin(f16), -1.0,
3839 }, .{
3840 -fmax(f16), fmax(f16), inf(f16), 1.0, nan(f16), 0.1, -fmax(f16), 10.0, -fmin(f16), 0.1, fmin(f16), -0.0, 0.1, -0.0, -nan(f16), -nan(f16),
3841 inf(f16), 1.0, -1.0, 0.1, 0.1, 0.1, 0.0, -tmin(f16), -1.0, -10.0, -tmin(f16), 1.0, -10.0, fmin(f16), -fmax(f16), -nan(f16),
3842 -tmin(f16), -inf(f16), inf(f16), -fmin(f16), -nan(f16), 0.0, -inf(f16), -fmax(f16), 0.1, -inf(f16), tmin(f16), nan(f16), tmin(f16), fmin(f16), -0.0, 0.1,
3843 fmin(f16), fmin(f16), 1.0, tmin(f16), 0.0, 10.0, 0.1, inf(f16), 10.0, -tmin(f16), tmin(f16), -1.0, -fmin(f16), 1.0, nan(f16), -fmax(f16),
3844 nan(f16), -fmin(f16), 0.1, 10.0, -10.0, 1.0, -0.0, tmin(f16), nan(f16), inf(f16), -fmax(f16), tmin(f16), -tmin(f16), 10.0, fmin(f16), -tmin(f16),
3845 -0.0, 1.0, tmin(f16), fmax(f16), 1.0, -inf(f16), -nan(f16), -0.0, 0.1, -inf(f16), 0.1, fmax(f16), -inf(f16), -nan(f16), -1.0, -inf(f16),
3846 0.1, fmin(f16), -10.0, -tmin(f16), 1.0, -nan(f16), -fmax(f16), -10.0, -tmin(f16), 10.0, nan(f16), fmin(f16), fmax(f16), tmin(f16), -inf(f16), 1.0,
3847 -fmin(f16), tmin(f16), -1.0, 0.1, 0.0, nan(f16), 1.0, fmax(f16), -1.0, 10.0, nan(f16), 1.0, fmin(f16), 1.0, -10.0, -10.0,
3848 });
3849 try testArgs(@Vector(69, f16), .{
3850 -nan(f16), -1.0, -fmin(f16), fmin(f16), inf(f16), 0.1, 0.0, fmax(f16), tmin(f16), 0.1, 0.0, -tmin(f16), 0.0, 0.0, 1.0, -inf(f16),
3851 tmin(f16), -inf(f16), -tmin(f16), fmin(f16), -inf(f16), -nan(f16), tmin(f16), -tmin(f16), 0.1, -1.0, -tmin(f16), fmax(f16), nan(f16), -fmin(f16), fmin(f16), 10.0,
3852 fmin(f16), -10.0, 0.0, fmin(f16), fmax(f16), -nan(f16), fmax(f16), -fmax(f16), nan(f16), -nan(f16), fmin(f16), -10.0, -fmin(f16), fmin(f16), -fmin(f16), -nan(f16),
3853 0.0, -1.0, fmax(f16), 0.1, inf(f16), 1.0, -1.0, -0.0, 10.0, 0.1, -fmax(f16), tmin(f16), -inf(f16), tmin(f16), -fmax(f16), 0.1,
3854 -10.0, -0.0, -fmax(f16), nan(f16), fmax(f16),
3855 }, .{
3856 inf(f16), -fmin(f16), 0.1, 0.1, -0.0, fmax(f16), 0.1, -0.0, 0.0, -0.0, 0.0, -tmin(f16), tmin(f16), -1.0, nan(f16), -fmin(f16),
3857 fmin(f16), 0.1, 0.1, nan(f16), -fmax(f16), -inf(f16), -nan(f16), -nan(f16), 0.1, -fmax(f16), fmin(f16), 0.1, 0.1, 0.1, -0.0, 10.0,
3858 tmin(f16), -nan(f16), fmin(f16), -1.0, 1.0, -tmin(f16), 0.0, nan(f16), fmax(f16), -10.0, fmin(f16), -fmin(f16), -1.0, 0.1, -fmin(f16), -fmin(f16),
3859 -fmax(f16), 0.0, fmin(f16), -10.0, -1.0, -1.0, fmax(f16), -nan(f16), -inf(f16), -inf(f16), 0.0, tmin(f16), -0.0, nan(f16), -inf(f16), nan(f16),
3860 inf(f16), fmin(f16), -nan(f16), -inf(f16), inf(f16),
3861 });
3862
3863 try testArgs(@Vector(1, f32), .{
3864 fmin(f32),
3865 }, .{
3866 -tmin(f32),
3867 });
3868 try testArgs(@Vector(2, f32), .{
3869 nan(f32), -10.0,
3870 }, .{
3871 -tmin(f32), fmin(f32),
3872 });
3873 try testArgs(@Vector(4, f32), .{
3874 fmax(f32), -fmax(f32), -10.0, 0.0,
3875 }, .{
3876 inf(f32), inf(f32), -10.0, inf(f32),
3877 });
3878 try testArgs(@Vector(8, f32), .{
3879 -10.0, fmax(f32), inf(f32), -0.0, -tmin(f32), -tmin(f32), 10.0, 0.1,
3880 }, .{
3881 10.0, -1.0, -1.0, inf(f32), 1.0, -tmin(f32), nan(f32), 10.0,
3882 });
3883 try testArgs(@Vector(16, f32), .{
3884 0.1, 0.1, -nan(f32), -10.0, -nan(f32), 0.0, fmin(f32), fmin(f32), -10.0, 1.0, -fmax(f32), -0.0, inf(f32), -0.0, fmax(f32), -fmin(f32),
3885 }, .{
3886 nan(f32), 0.0, tmin(f32), -1.0, -10.0, -tmin(f32), fmin(f32), -fmax(f32), 0.1, 0.1, -inf(f32), tmin(f32), -0.0, 10.0, -0.0, -inf(f32),
3887 });
3888 try testArgs(@Vector(32, f32), .{
3889 0.1, tmin(f32), -1.0, 1.0, tmin(f32), -10.0, fmax(f32), 0.0, tmin(f32), 0.1, -1.0, fmax(f32), -nan(f32), -0.0, fmin(f32), 0.0,
3890 -fmax(f32), fmax(f32), -fmin(f32), -inf(f32), tmin(f32), -nan(f32), -1.0, tmin(f32), -fmin(f32), -inf(f32), nan(f32), -tmin(f32), inf(f32), -inf(f32), -nan(f32), 0.1,
3891 }, .{
3892 -fmin(f32), -1.0, fmax(f32), inf(f32), -fmin(f32), fmax(f32), 0.0, -10.0, 0.0, 0.1, fmin(f32), -inf(f32), 1.0, -nan(f32), -nan(f32),
3893 -inf(f32), -0.0, nan(f32), -fmax(f32), 10.0, -tmin(f32), fmax(f32), -10.0, 0.1, tmin(f32), 0.1, -fmax(f32), 0.0, 0.1, -nan(f32),
3894 -fmin(f32), fmax(f32),
3895 });
3896 try testArgs(@Vector(64, f32), .{
3897 fmin(f32), 0.0, -inf(f32), 0.1, -10.0, -fmin(f32), 10.0, nan(f32), 0.1, 1.0, -1.0, 10.0, 10.0, 0.1, -fmax(f32), -1.0,
3898 -fmin(f32), 0.1, -inf(f32), -inf(f32), 0.1, 0.1, 0.0, -1.0, nan(f32), -0.0, -0.0, -fmin(f32), -inf(f32), inf(f32), tmin(f32), -nan(f32),
3899 0.1, 0.0, 1.0, tmin(f32), 10.0, fmin(f32), -fmin(f32), fmax(f32), nan(f32), 1.0, -nan(f32), -nan(f32), 1.0, nan(f32), 1.0, fmax(f32),
3900 -0.0, 0.0, inf(f32), nan(f32), tmin(f32), 0.0, fmin(f32), -0.0, -fmin(f32), tmin(f32), -1.0, -10.0, 0.1, -tmin(f32), -inf(f32), -1.0,
3901 }, .{
3902 nan(f32), -nan(f32), -tmin(f32), inf(f32), -inf(f32), 0.1, 0.1, 0.1, -1.0, -inf(f32), -0.0, fmax(f32), tmin(f32), -nan(f32), -fmax(f32), -1.0,
3903 -fmin(f32), -0.0, fmax(f32), -fmax(f32), 1.0, -0.0, 0.0, 10.0, -1.0, -fmin(f32), 0.0, fmax(f32), 0.1, 1.0, 10.0, 0.1,
3904 0.1, fmin(f32), -nan(f32), -inf(f32), -0.0, -inf(f32), 0.1, -fmax(f32), -10.0, -10.0, nan(f32), 10.0, -1.0, -fmin(f32), 10.0, fmin(f32),
3905 1.0, -fmax(f32), nan(f32), inf(f32), fmax(f32), fmax(f32), -fmin(f32), -inf(f32), -tmin(f32), -nan(f32), nan(f32), nan(f32), 0.1, 0.1, -1.0, inf(f32),
3906 });
3907 try testArgs(@Vector(128, f32), .{
3908 -10.0, -nan(f32), inf(f32), inf(f32), -tmin(f32), -0.0, 0.0, 0.1, -0.0, fmin(f32), nan(f32), -1.0, nan(f32), -fmax(f32), nan(f32), 0.0,
3909 1.0, -tmin(f32), 0.0, -nan(f32), 0.1, 0.1, -1.0, 10.0, -fmax(f32), -fmin(f32), 0.1, nan(f32), 0.1, -fmax(f32), -tmin(f32), -inf(f32),
3910 inf(f32), tmin(f32), -tmin(f32), nan(f32), -inf(f32), -10.0, 1.0, -nan(f32), 0.1, nan(f32), -1.0, tmin(f32), -fmin(f32), -0.0, -0.0, 1.0,
3911 fmin(f32), -fmin(f32), 0.1, 0.1, 0.1, -10.0, -10.0, -tmin(f32), 1.0, -0.0, 10.0, -fmax(f32), 10.0, -fmax(f32), inf(f32), -1.0,
3912 -fmax(f32), fmin(f32), fmin(f32), fmin(f32), -1.0, -nan(f32), fmax(f32), -nan(f32), 0.1, -1.0, -fmax(f32), -tmin(f32), -0.0, fmax(f32), -10.0, inf(f32),
3913 10.0, -inf(f32), 0.1, fmin(f32), nan(f32), -fmax(f32), -tmin(f32), inf(f32), tmin(f32), -fmin(f32), fmax(f32), 1.0, fmin(f32), -0.0, 0.1, fmin(f32),
3914 0.1, inf(f32), -10.0, inf(f32), 10.0, tmin(f32), 0.0, 1.0, inf(f32), -10.0, -fmin(f32), tmin(f32), 1.0, 0.1, 0.1, -fmin(f32),
3915 10.0, 0.1, fmax(f32), fmin(f32), 1.0, -10.0, -inf(f32), -10.0, 0.0, -fmax(f32), -inf(f32), -1.0, fmax(f32), -tmin(f32), inf(f32), nan(f32),
3916 }, .{
3917 -tmin(f32), -fmax(f32), -fmax(f32), 10.0, inf(f32), 0.1, 1.0, fmin(f32), 0.1, 10.0, fmin(f32), -fmax(f32), 1.0, fmax(f32), 0.1, -fmin(f32),
3918 0.0, -0.0, -0.0, -1.0, -nan(f32), nan(f32), -tmin(f32), 10.0, -tmin(f32), -10.0, inf(f32), 0.0, tmin(f32), 0.0, -fmax(f32), inf(f32),
3919 fmin(f32), 0.1, -10.0, tmin(f32), tmin(f32), 0.1, fmin(f32), -tmin(f32), fmin(f32), nan(f32), 0.1, -fmax(f32), -1.0, -0.0, fmin(f32), -0.0,
3920 -1.0, -0.0, -inf(f32), fmax(f32), -10.0, 1.0, inf(f32), -1.0, -tmin(f32), -tmin(f32), 0.1, -10.0, -fmin(f32), 10.0, -10.0, -inf(f32),
3921 -1.0, inf(f32), 0.1, 1.0, -nan(f32), 0.1, -10.0, -nan(f32), -tmin(f32), 0.0, fmin(f32), -nan(f32), fmax(f32), -tmin(f32), 0.0, 0.0,
3922 -fmax(f32), -inf(f32), -1.0, -0.0, 10.0, nan(f32), 0.1, tmin(f32), -10.0, 10.0, tmin(f32), -fmax(f32), 0.1, -10.0, -tmin(f32), fmax(f32),
3923 -fmax(f32), 0.1, -nan(f32), -fmin(f32), inf(f32), inf(f32), tmin(f32), tmin(f32), -tmin(f32), tmin(f32), 0.0, -0.0, 1.0, 10.0, -10.0, inf(f32),
3924 0.0, -fmin(f32), fmax(f32), -10.0, fmax(f32), -0.0, 0.0, -fmin(f32), 10.0, -fmin(f32), -fmin(f32), -fmin(f32), 10.0, fmin(f32), -inf(f32), fmax(f32),
3925 });
3926 try testArgs(@Vector(69, f32), .{
3927 nan(f32), 0.1, -tmin(f32), fmax(f32), nan(f32), -fmax(f32), 0.1, fmax(f32), 10.0, inf(f32), -fmin(f32), -fmax(f32), inf(f32), -nan(f32), 0.1, 1.0,
3928 fmax(f32), 0.1, 10.0, 0.0, -10.0, fmax(f32), 10.0, 0.0, 1.0, 10.0, -fmax(f32), 0.0, -tmin(f32), -fmin(f32), 0.1, 1.0,
3929 fmin(f32), tmin(f32), -fmin(f32), -tmin(f32), tmin(f32), -inf(f32), -fmax(f32), -0.0, -1.0, -0.0, -fmax(f32), fmax(f32), fmin(f32), -0.0, 0.0, -inf(f32),
3930 -tmin(f32), inf(f32), -nan(f32), tmin(f32), -1.0, -tmin(f32), 10.0, -inf(f32), -fmin(f32), 0.1, -inf(f32), -1.0, nan(f32), -inf(f32), -tmin(f32), 10.0,
3931 10.0, -nan(f32), -nan(f32), tmin(f32), -nan(f32),
3932 }, .{
3933 -nan(f32), 1.0, fmax(f32), 0.1, -0.0, 1.0, -inf(f32), -fmin(f32), -nan(f32), inf(f32), 1.0, -nan(f32), -nan(f32), -inf(f32), tmin(f32), -fmin(f32),
3934 -nan(f32), 0.1, fmin(f32), -1.0, -fmax(f32), 0.1, -1.0, 0.1, 0.1, -tmin(f32), 0.1, 0.1, 10.0, fmin(f32), 0.0, nan(f32),
3935 tmin(f32), 1.0, nan(f32), -fmin(f32), tmin(f32), nan(f32), 0.1, nan(f32), 1.0, -fmax(f32), tmin(f32), 1.0, 0.0, -1.0, nan(f32), fmin(f32),
3936 -inf(f32), fmax(f32), -0.0, nan(f32), tmin(f32), tmin(f32), -inf(f32), -10.0, -nan(f32), -fmax(f32), -0.0, 0.1, -inf(f32), 1.0, nan(f32), 1.0,
3937 -10.0, fmin(f32), inf(f32), fmin(f32), 0.0,
3938 });
3939
3940 try testArgs(@Vector(1, f64), .{
3941 -0.0,
3942 }, .{
3943 1.0,
3944 });
3945 try testArgs(@Vector(2, f64), .{
3946 -1.0, 0.0,
3947 }, .{
3948 -inf(f64), -fmax(f64),
3949 });
3950 try testArgs(@Vector(4, f64), .{
3951 -inf(f64), inf(f64), 10.0, 0.0,
3952 }, .{
3953 -tmin(f64), 1.0, nan(f64), 0.0,
3954 });
3955 try testArgs(@Vector(8, f64), .{
3956 0.1, -tmin(f64), -fmax(f64), 1.0, inf(f64), -10.0, -tmin(f64), -10.0,
3957 }, .{
3958 tmin(f64), fmin(f64), 0.1, 10.0, -0.0, -0.0, fmax(f64), -1.0,
3959 });
3960 try testArgs(@Vector(16, f64), .{
3961 0.1, -nan(f64), 1.0, tmin(f64), fmax(f64), -fmax(f64), -tmin(f64), -0.0, -fmin(f64), -1.0, -fmax(f64), -nan(f64), -fmax(f64), nan(f64), -0.0, 0.1,
3962 }, .{
3963 -1.0, -tmin(f64), -fmin(f64), 0.1, 0.1, -0.0, -nan(f64), -inf(f64), -inf(f64), -0.0, nan(f64), tmin(f64), 1.0, 0.1, tmin(f64), fmin(f64),
3964 });
3965 try testArgs(@Vector(32, f64), .{
3966 -fmax(f64), fmin(f64), 0.1, 0.1, 0.0, 1.0, -0.0, -tmin(f64), tmin(f64), inf(f64), -tmin(f64), -tmin(f64), -tmin(f64), -fmax(f64), fmin(f64), 1.0,
3967 -fmin(f64), -nan(f64), 1.0, -inf(f64), -nan(f64), -1.0, 0.0, 0.0, nan(f64), -nan(f64), -fmin(f64), fmin(f64), 0.1, nan(f64), tmin(f64), -fmax(f64),
3968 }, .{
3969 -tmin(f64), -fmax(f64), -inf(f64), -nan(f64), fmin(f64), -inf(f64), 0.1, -fmax(f64), -inf(f64), fmin(f64), inf(f64), -1.0, -tmin(f64), inf(f64), 0.1, nan(f64),
3970 fmin(f64), 10.0, -tmin(f64), -nan(f64), -inf(f64), 1.0, nan(f64), -fmin(f64), -1.0, nan(f64), -1.0, 0.0, 1.0, nan(f64), -1.0, -fmin(f64),
3971 });
3972 try testArgs(@Vector(64, f64), .{
3973 -10.0, fmax(f64), -nan(f64), tmin(f64), 0.1, -1.0, 1.0, -0.0, -fmin(f64), 0.1, -fmin(f64), -0.0, -0.0, tmin(f64), -10.0, 0.1,
3974 -10.0, -fmax(f64), -10.0, -fmin(f64), 0.0, -10.0, nan(f64), 1.0, inf(f64), inf(f64), -inf(f64), tmin(f64), tmin(f64), 0.1, -0.0, 0.1,
3975 -0.0, 0.1, -10.0, 10.0, fmax(f64), -fmin(f64), 1.0, fmax(f64), 1.0, -10.0, fmin(f64), fmax(f64), -1.0, -0.0, -0.0, fmax(f64),
3976 -inf(f64), -inf(f64), -tmin(f64), -fmax(f64), -nan(f64), tmin(f64), -1.0, 0.0, -inf(f64), fmax(f64), nan(f64), -inf(f64), fmin(f64), -nan(f64), -nan(f64), -10.0,
3977 }, .{
3978 nan(f64), -1.0, 0.0, -10.0, -fmax(f64), -fmin(f64), -nan(f64), -tmin(f64), 0.1, -1.0, -nan(f64), -fmax(f64), 0.0, 0.0, 10.0, inf(f64),
3979 fmin(f64), 0.0, -10.0, 1.0, -tmin(f64), -inf(f64), -fmax(f64), 0.0, -fmin(f64), -1.0, -fmin(f64), tmin(f64), 1.0, -10.0, fmin(f64), 0.1,
3980 inf(f64), -0.0, tmin(f64), -fmax(f64), -tmin(f64), -fmax(f64), fmin(f64), -fmax(f64), 0.1, 1.0, 1.0, 0.0, fmin(f64), nan(f64), -10.0, tmin(f64),
3981 inf(f64), 0.1, 1.0, -nan(f64), 1.0, -fmin(f64), fmax(f64), inf(f64), fmin(f64), -inf(f64), -0.0, 0.0, -1.0, -0.0, 0.1, 0.1,
3982 });
3983 try testArgs(@Vector(128, f64), .{
3984 nan(f64), -fmin(f64), fmax(f64), fmin(f64), -10.0, nan(f64), tmin(f64), fmax(f64), inf(f64), -nan(f64), tmin(f64), -nan(f64), -0.0, fmin(f64), fmax(f64),
3985 -inf(f64), inf(f64), -1.0, 0.0, 0.1, fmin(f64), 0.0, 0.1, -1.0, -inf(f64), 0.1, fmax(f64), fmin(f64), fmax(f64), -fmax(f64),
3986 fmin(f64), inf(f64), -fmin(f64), -10.0, -0.0, 0.1, nan(f64), -fmax(f64), -fmax(f64), -1.0, 10.0, 10.0, -1.0, -inf(f64), inf(f64),
3987 -fmin(f64), 1.0, -inf(f64), -10.0, 0.1, 1.0, 10.0, 10.0, tmin(f64), nan(f64), inf(f64), 0.0, -1.0, -10.0, 1.0,
3988 -tmin(f64), -fmax(f64), -nan(f64), 10.0, 0.1, tmin(f64), 0.0, 10.0, 0.1, -tmin(f64), -tmin(f64), 1.0, -fmax(f64), nan(f64), -fmin(f64),
3989 nan(f64), 10.0, -1.0, -0.0, -tmin(f64), nan(f64), 10.0, 10.0, -inf(f64), 0.1, -nan(f64), -10.0, -tmin(f64), -fmax(f64), -fmax(f64),
3990 inf(f64), -inf(f64), tmin(f64), 1.0, -inf(f64), -10.0, inf(f64), 0.1, -nan(f64), -inf(f64), fmax(f64), 0.1, -inf(f64), 0.1, 1.0,
3991 0.1, 0.1, 0.1, inf(f64), -inf(f64), 1.0, 10.0, 10.0, nan(f64), 10.0, -tmin(f64), 1.0, -fmin(f64), -1.0, -fmax(f64),
3992 -fmin(f64), -fmin(f64), -1.0, inf(f64), nan(f64), tmin(f64), 0.1, -1.0,
3993 }, .{
3994 0.0, 0.0, inf(f64), -0.0, 0.1, -nan(f64), 10.0, -nan(f64), tmin(f64), -10.0, -0.0, inf(f64), -fmin(f64), 0.1, fmax(f64),
3995 nan(f64), -tmin(f64), tmin(f64), 1.0, 0.1, -10.0, -nan(f64), 1.0, inf(f64), -10.0, fmin(f64), 0.1, 10.0, -10.0, 10.0,
3996 -nan(f64), -nan(f64), 0.1, 0.0, 10.0, -fmax(f64), -tmin(f64), tmin(f64), -1.0, -tmin(f64), -10.0, 0.1, -fmax(f64), 10.0, nan(f64),
3997 fmax(f64), -1.0, -1.0, -tmin(f64), fmax(f64), -10.0, 0.1, 1.0, fmin(f64), inf(f64), 0.1, tmin(f64), 0.1, -fmax(f64), fmax(f64),
3998 -10.0, -fmax(f64), fmax(f64), tmin(f64), -fmin(f64), inf(f64), 0.1, -0.0, fmax(f64), tmin(f64), 0.1, 1.0, -inf(f64), 1.0, 10.0,
3999 0.1, 0.0, -10.0, -nan(f64), 10.0, -fmin(f64), -tmin(f64), 10.0, 1.0, -tmin(f64), -1.0, -fmin(f64), -0.0, -10.0, 0.1,
4000 inf(f64), -fmax(f64), 0.1, tmin(f64), -0.0, fmax(f64), 0.0, -nan(f64), -fmin(f64), fmax(f64), -0.0, nan(f64), -inf(f64), tmin(f64), 0.1,
4001 inf(f64), 0.0, 10.0, -fmax(f64), tmin(f64), -0.0, fmin(f64), -nan(f64), -10.0, -inf(f64), nan(f64), inf(f64), -0.0, 10.0, fmax(f64),
4002 tmin(f64), -10.0, -nan(f64), 10.0, -inf(f64), -fmax(f64), -inf(f64), -1.0,
4003 });
4004 try testArgs(@Vector(69, f64), .{
4005 inf(f64), -0.0, -fmax(f64), fmax(f64), fmax(f64), 0.0, fmin(f64), -nan(f64), 0.1, 0.1, 0.1, -fmin(f64), inf(f64), 0.1, fmax(f64), nan(f64),
4006 tmin(f64), -10.0, 10.0, -tmin(f64), -0.0, nan(f64), -10.0, fmin(f64), 0.0, -0.0, 0.1, inf(f64), -tmin(f64), -nan(f64), inf(f64), -nan(f64),
4007 -inf(f64), fmax(f64), 0.1, -fmin(f64), 0.1, -1.0, fmin(f64), fmin(f64), fmin(f64), 10.0, -fmin(f64), nan(f64), 0.0, 0.0, 10.0, nan(f64),
4008 -tmin(f64), tmin(f64), tmin(f64), fmin(f64), -0.0, -1.0, 0.1, 1.0, fmax(f64), tmin(f64), fmin(f64), 0.0, -fmin(f64), fmin(f64), -tmin(f64), 0.0,
4009 -nan(f64), 10.0, -1.0, 0.1, 0.0,
4010 }, .{
4011 -10.0, -0.0, fmin(f64), -fmin(f64), nan(f64), 10.0, -tmin(f64), -fmax(f64), 10.0, 0.1, -fmin(f64), inf(f64), -inf(f64), -tmin(f64), 1.0, tmin(f64),
4012 -tmin(f64), -nan(f64), fmax(f64), 0.0, -1.0, 10.0, inf(f64), fmin(f64), fmax(f64), 0.1, 0.1, fmax(f64), -inf(f64), 0.1, 0.1, fmin(f64),
4013 0.1, fmin(f64), -10.0, nan(f64), 0.0, 0.0, fmax(f64), -inf(f64), tmin(f64), inf(f64), -tmin(f64), fmax(f64), -inf(f64), -10.0, -1.0, fmin(f64),
4014 0.1, -nan(f64), fmax(f64), -fmin(f64), fmax(f64), nan(f64), -0.0, -fmax(f64), 10.0, nan(f64), inf(f64), -1.0, -fmin(f64), nan(f64), -fmin(f64), -0.0,
4015 -nan(f64), -fmin(f64), 0.1, nan(f64), 0.1,
4016 });
4017
4018 try testArgs(@Vector(1, f80), .{
4019 -nan(f80),
4020 }, .{
4021 -1.0,
4022 });
4023 try testArgs(@Vector(2, f80), .{
4024 -fmax(f80), -inf(f80),
4025 }, .{
4026 0.1, 10.0,
4027 });
4028 try testArgs(@Vector(4, f80), .{
4029 -0.0, -inf(f80), 0.1, 10.0,
4030 }, .{
4031 -1.0, 0.0, 0.1, -10.0,
4032 });
4033 try testArgs(@Vector(8, f80), .{
4034 1.0, -0.0, -inf(f80), 0.1, -inf(f80), fmin(f80), 0.0, 10.0,
4035 }, .{
4036 -0.0, -fmin(f80), fmin(f80), -nan(f80), nan(f80), inf(f80), fmin(f80), 10.0,
4037 });
4038 try testArgs(@Vector(16, f80), .{
4039 10.0, inf(f80), -fmin(f80), 0.1, -tmin(f80), -0.0, -inf(f80), -1.0, -fmax(f80), -nan(f80), -tmin(f80), 10.0, 10.0, -inf(f80), -fmax(f80), fmax(f80),
4040 }, .{
4041 -inf(f80), nan(f80), -fmax(f80), fmin(f80), 1.0, 0.1, -inf(f80), nan(f80), 0.1, nan(f80), -inf(f80), nan(f80), tmin(f80), 0.1, -tmin(f80), -10.0,
4042 });
4043 try testArgs(@Vector(32, f80), .{
4044 inf(f80), -0.0, 0.1, -0.0, 0.1, -fmin(f80), -0.0, fmax(f80), nan(f80), -tmin(f80), nan(f80), -10.0, 0.0, 1.0, 10.0, -fmin(f80),
4045 fmin(f80), 0.1, inf(f80), -0.0, nan(f80), tmin(f80), -tmin(f80), fmin(f80), tmin(f80), -0.0, nan(f80), -fmax(f80), tmin(f80), -fmin(f80), 1.0, tmin(f80),
4046 }, .{
4047 0.0, -10.0, fmax(f80), -inf(f80), 0.1, -inf(f80), inf(f80), 10.0, -1.0, -10.0, -fmin(f80), 0.0, inf(f80), 1.0, -nan(f80), 0.0,
4048 0.1, nan(f80), 1.0, -fmax(f80), fmin(f80), -inf(f80), -fmax(f80), 0.1, -10.0, tmin(f80), fmax(f80), -0.0, -fmin(f80), -fmin(f80), fmin(f80), -tmin(f80),
4049 });
4050 try testArgs(@Vector(64, f80), .{
4051 -fmax(f80), 0.1, -1.0, 1.0, inf(f80), 0.1, -10.0, 0.1, fmin(f80), -fmin(f80), -10.0, -fmax(f80), 0.0, -10.0, -1.0, -nan(f80),
4052 0.0, 0.1, -1.0, -tmin(f80), 1.0, tmin(f80), fmax(f80), 0.0, -10.0, -tmin(f80), fmax(f80), -0.0, 0.1, -inf(f80), -fmax(f80), -1.0,
4053 -nan(f80), tmin(f80), -tmin(f80), -0.0, -0.0, -1.0, -0.0, fmax(f80), inf(f80), -nan(f80), 0.1, -inf(f80), -tmin(f80), nan(f80), 0.1, 10.0,
4054 nan(f80), -inf(f80), 0.1, tmin(f80), -fmin(f80), 10.0, -10.0, tmin(f80), fmin(f80), nan(f80), 0.1, -nan(f80), tmin(f80), nan(f80), fmax(f80), -fmax(f80),
4055 }, .{
4056 -nan(f80), -fmax(f80), tmin(f80), -inf(f80), -tmin(f80), fmin(f80), -nan(f80), -fmin(f80), fmax(f80), inf(f80), -0.0, -1.0, 0.1, -fmax(f80), 1.0, -inf(f80),
4057 0.0, -nan(f80), -10.0, -1.0, -nan(f80), inf(f80), 1.0, -nan(f80), 10.0, inf(f80), tmin(f80), 0.1, tmin(f80), -tmin(f80), -inf(f80), -fmin(f80),
4058 fmax(f80), fmax(f80), 0.1, -tmin(f80), -nan(f80), -1.0, fmin(f80), -nan(f80), -nan(f80), inf(f80), -1.0, 0.1, -fmin(f80), -tmin(f80), 0.0, -0.0,
4059 0.1, -fmin(f80), -inf(f80), -1.0, -tmin(f80), 1.0, -inf(f80), -0.0, 0.0, 1.0, tmin(f80), 0.0, 0.1, -nan(f80), fmax(f80), 1.0,
4060 });
4061 try testArgs(@Vector(128, f80), .{
4062 0.1, -0.0, 0.1, 0.0, fmin(f80), -1.0, 1.0, -inf(f80), fmax(f80), -fmin(f80), nan(f80), 10.0, 0.1, 0.1, -fmin(f80), -inf(f80),
4063 -1.0, -inf(f80), 1.0, -fmin(f80), inf(f80), -nan(f80), 10.0, inf(f80), tmin(f80), nan(f80), -10.0, inf(f80), 10.0, inf(f80), -10.0, 0.0,
4064 -10.0, fmin(f80), -tmin(f80), 1.0, -fmax(f80), nan(f80), 0.0, fmax(f80), 0.1, -1.0, -fmin(f80), inf(f80), -tmin(f80), nan(f80), -tmin(f80), 10.0,
4065 -10.0, -tmin(f80), -1.0, -tmin(f80), -fmax(f80), 10.0, -1.0, -inf(f80), -nan(f80), 0.0, 1.0, fmax(f80), -tmin(f80), -fmin(f80), fmin(f80), fmin(f80),
4066 -10.0, -fmax(f80), -tmin(f80), inf(f80), 1.0, 0.0, tmin(f80), -nan(f80), -fmin(f80), 0.1, -nan(f80), 0.0, 0.1, -10.0, -0.0, -nan(f80),
4067 1.0, 10.0, -10.0, fmin(f80), -nan(f80), fmax(f80), -0.0, 1.0, inf(f80), 1.0, -fmin(f80), -fmin(f80), 0.0, 0.1, inf(f80), 10.0,
4068 tmin(f80), -1.0, fmax(f80), -0.0, fmax(f80), fmax(f80), 0.1, -fmin(f80), -10.0, 1.0, -fmin(f80), -fmax(f80), fmin(f80), -fmax(f80), -0.0, -1.0,
4069 -nan(f80), -inf(f80), nan(f80), -fmax(f80), inf(f80), -inf(f80), -nan(f80), fmin(f80), nan(f80), -1.0, tmin(f80), tmin(f80), 0.1, 10.0, -tmin(f80), -nan(f80),
4070 }, .{
4071 -1.0, -0.0, 0.0, fmax(f80), -1.0, -0.0, 0.1, tmin(f80), -inf(f80), 10.0, -0.0, 0.1, -tmin(f80), -fmax(f80), tmin(f80), inf(f80),
4072 0.1, 1.0, tmin(f80), nan(f80), -fmax(f80), 10.0, fmin(f80), -1.0, -fmax(f80), nan(f80), -fmin(f80), 10.0, -1.0, tmin(f80), inf(f80), -0.0,
4073 tmin(f80), 1.0, 0.0, -fmin(f80), 0.0, 10.0, -fmax(f80), -0.0, -inf(f80), fmin(f80), -0.0, -0.0, -0.0, -fmax(f80), 0.1, fmax(f80),
4074 -tmin(f80), tmin(f80), -fmax(f80), 10.0, -fmax(f80), 0.1, fmax(f80), -10.0, 0.1, 1.0, -1.0, -1.0, nan(f80), -nan(f80), 10.0, -nan(f80),
4075 nan(f80), -10.0, -tmin(f80), fmin(f80), -tmin(f80), -fmin(f80), tmin(f80), -0.0, 0.1, fmax(f80), tmin(f80), tmin(f80), nan(f80), 0.1, 10.0, 0.1,
4076 inf(f80), inf(f80), 1.0, -inf(f80), -fmax(f80), 0.0, 1.0, -fmax(f80), fmax(f80), nan(f80), fmin(f80), 0.1, -1.0, 1.0, 0.1, -tmin(f80),
4077 10.0, 0.1, -fmax(f80), 0.0, nan(f80), -tmin(f80), 0.1, fmax(f80), fmax(f80), 0.1, -1.0, inf(f80), nan(f80), 10.0, fmax(f80), -nan(f80),
4078 -10.0, -1.0, tmin(f80), fmin(f80), inf(f80), fmax(f80), -fmin(f80), fmin(f80), -inf(f80), -tmin(f80), 1.0, nan(f80), -fmin(f80), -fmin(f80), fmax(f80), 1.0,
4079 });
4080 try testArgs(@Vector(69, f80), .{
4081 -10.0, tmin(f80), 0.1, -nan(f80), -inf(f80), -nan(f80), fmin(f80), -0.0, 10.0, fmax(f80), -fmin(f80), 0.1, -nan(f80), inf(f80), 1.0, -1.0,
4082 inf(f80), fmin(f80), -fmax(f80), 0.1, nan(f80), 0.0, 0.0, nan(f80), -10.0, fmax(f80), fmin(f80), -fmax(f80), 1.0, 0.1, 0.0, -fmin(f80),
4083 -tmin(f80), 0.0, -10.0, fmin(f80), 1.0, 10.0, 0.1, nan(f80), -10.0, fmax(f80), 0.1, fmin(f80), -inf(f80), 0.0, tmin(f80), inf(f80),
4084 fmax(f80), 1.0, 0.1, nan(f80), inf(f80), tmin(f80), tmin(f80), -fmax(f80), 0.0, fmin(f80), -inf(f80), 0.1, -tmin(f80), 0.1, -1.0, 0.1,
4085 -fmax(f80), -1.0, 0.1, -1.0, fmax(f80),
4086 }, .{
4087 -1.0, fmin(f80), inf(f80), -nan(f80), -0.0, fmin(f80), -0.0, nan(f80), -fmax(f80), 0.1, 1.0, -10.0, -tmin(f80), -fmin(f80), 10.0, inf(f80),
4088 -10.0, -tmin(f80), -fmin(f80), 10.0, 0.0, -tmin(f80), 10.0, -10.0, 0.1, 0.1, tmin(f80), fmax(f80), 0.0, 0.1, 0.1, -10.0,
4089 fmin(f80), nan(f80), -10.0, -10.0, -10.0, 0.0, -0.0, 0.1, fmin(f80), fmin(f80), -0.0, -fmin(f80), -nan(f80), -inf(f80), 0.0, -inf(f80),
4090 inf(f80), fmax(f80), -tmin(f80), inf(f80), 0.1, -nan(f80), 0.1, tmin(f80), -10.0, -fmax(f80), -fmax(f80), inf(f80), -nan(f80), 1.0, -inf(f80), 10.0,
4091 nan(f80), 10.0, -10.0, 0.0, -fmin(f80),
4092 });
4093
4094 try testArgs(@Vector(1, f128), .{
4095 -nan(f128),
4096 }, .{
4097 -0.0,
4098 });
4099 try testArgs(@Vector(2, f128), .{
4100 0.0, -inf(f128),
4101 }, .{
4102 0.1, -fmin(f128),
4103 });
4104 try testArgs(@Vector(4, f128), .{
4105 0.1, fmax(f128), 10.0, -fmax(f128),
4106 }, .{
4107 -tmin(f128), fmax(f128), -0.0, -0.0,
4108 });
4109 try testArgs(@Vector(8, f128), .{
4110 10.0, -fmin(f128), 0.0, -inf(f128), 10.0, -0.0, -1.0, -fmin(f128),
4111 }, .{
4112 fmin(f128), tmin(f128), -1.0, -10.0, 0.0, -tmin(f128), 0.0, 0.1,
4113 });
4114 try testArgs(@Vector(16, f128), .{
4115 -fmin(f128), -10.0, -fmin(f128), 0.1, -10.0, 1.0, -fmax(f128), tmin(f128), -nan(f128), -tmin(f128), 10.0, -inf(f128), -1.0, tmin(f128), -0.0, nan(f128),
4116 }, .{
4117 -fmax(f128), fmin(f128), inf(f128), tmin(f128), -10.0, 10.0, fmax(f128), 1.0, -inf(f128), -inf(f128), -fmax(f128), -nan(f128), 1.0, -inf(f128), tmin(f128), tmin(f128),
4118 });
4119 try testArgs(@Vector(32, f128), .{
4120 -0.0, -1.0, 1.0, -fmax(f128), -fmax(f128), 0.1, -fmin(f128), -fmin(f128), -1.0, -tmin(f128), -0.0, -fmax(f128), tmin(f128), inf(f128), 0.0, fmax(f128),
4121 -nan(f128), -0.0, -inf(f128), -1.0, 0.1, -fmin(f128), tmin(f128), -10.0, fmax(f128), -nan(f128), -nan(f128), -fmax(f128), 0.1, inf(f128), -0.0, tmin(f128),
4122 }, .{
4123 -1.0, -10.0, -fmin(f128), -fmin(f128), inf(f128), tmin(f128), nan(f128), 0.0, -fmin(f128), 0.1, -nan(f128), 0.1, -0.0, tmin(f128), 1.0, 0.0,
4124 fmin(f128), fmax(f128), -fmax(f128), -tmin(f128), fmin(f128), -0.0, -1.0, -nan(f128), -inf(f128), 1.0, nan(f128), 1.0, 0.1, -0.0, -fmax(f128), -10.0,
4125 });
4126 try testArgs(@Vector(64, f128), .{
4127 -1.0, -0.0, nan(f128), 0.1, -10.0, 0.0, 1.0, 1.0, -inf(f128), fmin(f128), fmax(f128), nan(f128), -nan(f128), inf(f128), -0.0,
4128 0.1, -inf(f128), -fmax(f128), 10.0, -tmin(f128), -tmin(f128), -fmax(f128), 1.0, 0.1, 0.1, nan(f128), 10.0, 1.0, -tmin(f128), 10.0,
4129 -nan(f128), fmax(f128), fmax(f128), 0.0, fmax(f128), inf(f128), 1.0, -0.0, 0.1, -tmin(f128), fmin(f128), fmax(f128), tmin(f128), inf(f128), -10.0,
4130 -1.0, -1.0, -1.0, -inf(f128), 10.0, -tmin(f128), nan(f128), nan(f128), 0.1, fmin(f128), 0.1, tmin(f128), -10.0, 0.1, 10.0,
4131 fmax(f128), fmax(f128), 0.1, -fmax(f128),
4132 }, .{
4133 -0.0, 0.1, -0.0, -fmin(f128), 10.0, 0.0, 1.0, -inf(f128), tmin(f128), -1.0, fmin(f128), -nan(f128), -10.0, 0.1, -10.0, 0.1,
4134 0.1, tmin(f128), nan(f128), -1.0, 0.0, -10.0, -10.0, fmax(f128), -fmax(f128), inf(f128), -nan(f128), 0.1, -nan(f128), 1.0, fmax(f128), inf(f128),
4135 nan(f128), fmin(f128), 10.0, inf(f128), 0.0, -inf(f128), 0.1, 0.1, 0.1, -1.0, 0.1, -10.0, inf(f128), -nan(f128), 0.1, inf(f128),
4136 inf(f128), inf(f128), -10.0, -tmin(f128), 0.1, -inf(f128), -fmin(f128), 1.0, -tmin(f128), 1.0, -tmin(f128), -inf(f128), -0.0, -nan(f128), -1.0, -fmax(f128),
4137 });
4138 try testArgs(@Vector(128, f128), .{
4139 -inf(f128), tmin(f128), -fmax(f128), 1.0, fmin(f128), -fmax(f128), -1.0, 0.1, -fmax(f128), -fmin(f128), -10.0, nan(f128), 0.1, nan(f128),
4140 inf(f128), -1.0, tmin(f128), -inf(f128), 0.0, fmax(f128), tmin(f128), -fmin(f128), fmin(f128), -10.0, -fmin(f128), -10.0, 1.0, -nan(f128),
4141 -inf(f128), fmin(f128), inf(f128), -tmin(f128), 0.1, 0.0, 10.0, 1.0, -tmin(f128), -tmin(f128), tmin(f128), 1.0, fmin(f128), 0.1,
4142 0.1, 0.1, fmax(f128), 0.1, inf(f128), 0.0, fmin(f128), -fmin(f128), 10.0, 10.0, -10.0, tmin(f128), inf(f128), inf(f128),
4143 -fmin(f128), 0.0, 0.1, -nan(f128), 0.1, -inf(f128), -nan(f128), -1.0, fmin(f128), -0.0, 10.0, -tmin(f128), 10.0, 1.0,
4144 0.1, -0.0, -tmin(f128), 0.1, -1.0, -tmin(f128), -fmin(f128), tmin(f128), 0.1, -tmin(f128), -nan(f128), -10.0, -inf(f128), 0.0,
4145 0.1, 0.0, -fmin(f128), 0.0, 10.0, 10.0, tmin(f128), inf(f128), -nan(f128), -inf(f128), -1.0, -fmin(f128), -10.0, -fmin(f128),
4146 -inf(f128), -fmax(f128), tmin(f128), tmin(f128), -fmin(f128), 0.1, fmin(f128), fmin(f128), -fmin(f128), nan(f128), -1.0, -0.0, -0.0, 0.1,
4147 fmax(f128), 0.0, -fmax(f128), nan(f128), nan(f128), nan(f128), nan(f128), -nan(f128), fmin(f128), -inf(f128), inf(f128), -fmax(f128), -10.0, fmin(f128),
4148 0.1, fmax(f128),
4149 }, .{
4150 0.0, 10.0, 0.1, inf(f128), -0.0, -1.0, nan(f128), -10.0, -inf(f128), 0.1, -tmin(f128), 1.0, inf(f128), 0.1, -1.0,
4151 10.0, 0.0, 1.0, nan(f128), tmin(f128), fmax(f128), 10.0, 0.1, 0.1, -fmin(f128), -inf(f128), -nan(f128), -fmin(f128), -0.0, -inf(f128),
4152 -nan(f128), fmax(f128), -fmin(f128), -tmin(f128), -fmin(f128), -fmax(f128), nan(f128), fmin(f128), -fmax(f128), fmax(f128), 1.0, 10.0, -fmax(f128), nan(f128), -fmax(f128),
4153 -inf(f128), nan(f128), -nan(f128), tmin(f128), -1.0, 0.1, 0.1, -1.0, -nan(f128), fmax(f128), 10.0, -inf(f128), 10.0, -0.0, -1.0,
4154 -0.0, -tmin(f128), 10.0, -1.0, -fmax(f128), fmin(f128), fmax(f128), tmin(f128), 10.0, fmin(f128), -nan(f128), 1.0, -tmin(f128), -1.0, fmax(f128),
4155 1.0, -tmin(f128), 0.1, -nan(f128), inf(f128), 0.1, 0.1, fmax(f128), -fmin(f128), fmin(f128), -0.0, fmax(f128), -fmax(f128), -tmin(f128), tmin(f128),
4156 nan(f128), 0.1, tmin(f128), -1.0, fmin(f128), -nan(f128), fmax(f128), 1.0, nan(f128), -nan(f128), inf(f128), -fmin(f128), fmin(f128), 0.1, 10.0,
4157 -tmin(f128), -10.0, 0.0, 0.1, -fmin(f128), -0.0, 0.0, -10.0, fmax(f128), nan(f128), nan(f128), -fmin(f128), -fmax(f128), 10.0, 0.0,
4158 fmin(f128), 10.0, -tmin(f128), -tmin(f128), 0.0, -10.0, 1.0, -fmin(f128),
4159 });
4160 try testArgs(@Vector(69, f128), .{
4161 -1.0, nan(f128), 0.1, 0.1, 0.1, -1.0, -10.0, inf(f128), -0.0, inf(f128), tmin(f128), 0.0, -fmax(f128), -tmin(f128), -10.0, -fmax(f128),
4162 -0.0, 0.0, nan(f128), inf(f128), 1.0, -1.0, 0.1, -0.0, 1.0, fmax(f128), -fmax(f128), 0.0, inf(f128), -inf(f128), -tmin(f128), -inf(f128),
4163 10.0, fmin(f128), 10.0, -10.0, 0.1, 1.0, -0.0, nan(f128), tmin(f128), inf(f128), inf(f128), -nan(f128), -nan(f128), 1.0, -tmin(f128), 0.0,
4164 fmin(f128), fmax(f128), fmin(f128), -10.0, nan(f128), 0.0, -nan(f128), -0.0, -nan(f128), 0.1, -10.0, -tmin(f128), fmax(f128), 1.0, fmin(f128), fmax(f128),
4165 nan(f128), -inf(f128), 1.0, fmin(f128), -nan(f128),
4166 }, .{
4167 -inf(f128), fmax(f128), 0.0, nan(f128), -10.0, tmin(f128), nan(f128), 1.0, 10.0, -fmin(f128), fmin(f128), tmin(f128), 0.0, -fmin(f128), -0.0, fmin(f128),
4168 inf(f128), inf(f128), fmin(f128), fmin(f128), -tmin(f128), -fmax(f128), 10.0, nan(f128), -0.0, 1.0, 10.0, -10.0, -inf(f128), fmin(f128), -fmax(f128), 0.1,
4169 -1.0, -nan(f128), -10.0, tmin(f128), inf(f128), nan(f128), 0.0, -10.0, tmin(f128), 0.0, -fmax(f128), -tmin(f128), 0.1, 0.1, 10.0, 0.1,
4170 fmax(f128), 0.1, 0.0, -fmin(f128), -inf(f128), -inf(f128), -nan(f128), 0.1, -fmax(f128), fmax(f128), -fmax(f128), -0.0, -tmin(f128), -1.0, nan(f128), 0.1,
4171 -1.0, -inf(f128), tmin(f128), inf(f128), inf(f128),
4172 });
4173 }
20654174 };
20664175}
20674176
......@@ -2069,64 +4178,76 @@ inline fn bitNot(comptime Type: type, rhs: Type) @TypeOf(~rhs) {
20694178 return ~rhs;
20704179}
20714180test bitNot {
2072 try Unary(bitNot).testIntTypes();
2073 try Unary(bitNot).testIntVectorTypes();
4181 const t = unary(bitNot, .{});
4182 try t.testIntTypes();
4183 try t.testIntVectorTypes();
20744184}
20754185
20764186inline fn abs(comptime Type: type, rhs: Type) @TypeOf(@abs(rhs)) {
20774187 return @abs(rhs);
20784188}
20794189test abs {
2080 try Unary(abs).testIntTypes();
2081 try Unary(abs).testIntVectorTypes();
2082 try Unary(abs).testFloatTypes();
2083 try Unary(abs).testFloatVectorTypes();
4190 const t = unary(abs, .{ .strict = true });
4191 try t.testIntTypes();
4192 try t.testIntVectorTypes();
4193 try t.testFloatTypes();
4194 try t.testFloatVectorTypes();
20844195}
20854196
20864197inline fn clz(comptime Type: type, rhs: Type) @TypeOf(@clz(rhs)) {
20874198 return @clz(rhs);
20884199}
20894200test clz {
2090 try Unary(clz).testIntTypes();
2091 try Unary(clz).testIntVectorTypes();
4201 const t = unary(clz, .{});
4202 try t.testIntTypes();
4203 try t.testIntVectorTypes();
20924204}
20934205
20944206inline fn bitAnd(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs & rhs) {
20954207 return lhs & rhs;
20964208}
20974209test bitAnd {
2098 try Binary(bitAnd).testIntTypes();
2099 try Binary(bitAnd).testIntVectorTypes();
4210 const t = binary(bitAnd, .{});
4211 try t.testIntTypes();
4212 try t.testIntVectorTypes();
21004213}
21014214
21024215inline fn bitOr(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs | rhs) {
21034216 return lhs | rhs;
21044217}
21054218test bitOr {
2106 try Binary(bitOr).testIntTypes();
2107 try Binary(bitOr).testIntVectorTypes();
4219 const t = binary(bitOr, .{});
4220 try t.testIntTypes();
4221 try t.testIntVectorTypes();
21084222}
21094223
21104224inline fn bitXor(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs ^ rhs) {
21114225 return lhs ^ rhs;
21124226}
21134227test bitXor {
2114 try Binary(bitXor).testIntTypes();
2115 try Binary(bitXor).testIntVectorTypes();
4228 const t = binary(bitXor, .{});
4229 try t.testIntTypes();
4230 try t.testIntVectorTypes();
21164231}
21174232
21184233inline fn min(comptime Type: type, lhs: Type, rhs: Type) Type {
21194234 return @min(lhs, rhs);
21204235}
21214236test min {
2122 try Binary(min).testIntTypes();
2123 try Binary(min).testIntVectorTypes();
4237 const t = binary(min, .{});
4238 try t.testIntTypes();
4239 try t.testIntVectorTypes();
4240 try t.testFloatTypes();
4241 try t.testFloatVectorTypes();
21244242}
21254243
21264244inline fn max(comptime Type: type, lhs: Type, rhs: Type) Type {
21274245 return @max(lhs, rhs);
21284246}
21294247test max {
2130 try Binary(max).testIntTypes();
2131 try Binary(max).testIntVectorTypes();
4248 const t = binary(max, .{});
4249 try t.testIntTypes();
4250 try t.testIntVectorTypes();
4251 try t.testFloatTypes();
4252 try t.testFloatVectorTypes();
21324253}