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 {...@@ -15,8 +15,6 @@ fn __extendxftf2(a: f80) callconv(.C) f128 {
1515
16 const dst_bits = @bitSizeOf(f128);16 const dst_bits = @bitSizeOf(f128);
1717
18 const dst_min_normal = @as(u128, 1) << dst_sig_bits;
19
20 // Break a into a sign and representation of the absolute value18 // Break a into a sign and representation of the absolute value
21 var a_rep = std.math.F80.fromFloat(a);19 var a_rep = std.math.F80.fromFloat(a);
22 const sign = a_rep.exp & 0x8000;20 const sign = a_rep.exp & 0x8000;
...@@ -36,12 +34,7 @@ fn __extendxftf2(a: f80) callconv(.C) f128 {...@@ -36,12 +34,7 @@ fn __extendxftf2(a: f80) callconv(.C) f128 {
36 abs_result |= @as(u128, a_rep.exp) << dst_sig_bits;34 abs_result |= @as(u128, a_rep.exp) << dst_sig_bits;
37 } else {35 } else {
38 // a is denormal36 // a is denormal
39 // renormalize the significand and clear the leading bit and integer part,37 abs_result = @as(u128, a_rep.fraction) << (dst_sig_bits - src_sig_bits);
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;
45 }38 }
4639
47 // Apply the signbit to (dst_t)abs(a).40 // 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...@@ -1421,7 +1421,7 @@ fn asmCmovccRegisterRegister(self: *CodeGen, cc: Condition, reg1: Register, reg2
1421 },1421 },
1422 .data = .{ .rr = .{1422 .data = .{ .rr = .{
1423 .fixes = switch (cc) {1423 .fixes = switch (cc) {
1424 else => .fromCondition(cc),1424 else => .fromCond(cc),
1425 .z_and_np, .nz_or_p => ._,1425 .z_and_np, .nz_or_p => ._,
1426 },1426 },
1427 .r1 = reg1,1427 .r1 = reg1,
...@@ -1449,7 +1449,7 @@ fn asmCmovccRegisterMemory(self: *CodeGen, cc: Condition, reg: Register, m: Memo...@@ -1449,7 +1449,7 @@ fn asmCmovccRegisterMemory(self: *CodeGen, cc: Condition, reg: Register, m: Memo
1449 },1449 },
1450 .data = .{ .rx = .{1450 .data = .{ .rx = .{
1451 .fixes = switch (cc) {1451 .fixes = switch (cc) {
1452 else => .fromCondition(cc),1452 else => .fromCond(cc),
1453 .z_and_np => unreachable,1453 .z_and_np => unreachable,
1454 .nz_or_p => ._,1454 .nz_or_p => ._,
1455 },1455 },
...@@ -1476,7 +1476,7 @@ fn asmSetccRegister(self: *CodeGen, cc: Condition, reg: Register) !void {...@@ -1476,7 +1476,7 @@ fn asmSetccRegister(self: *CodeGen, cc: Condition, reg: Register) !void {
1476 },1476 },
1477 .data = switch (cc) {1477 .data = switch (cc) {
1478 else => .{ .r = .{1478 else => .{ .r = .{
1479 .fixes = .fromCondition(cc),1479 .fixes = .fromCond(cc),
1480 .r1 = reg,1480 .r1 = reg,
1481 } },1481 } },
1482 .z_and_np, .nz_or_p => .{ .rr = .{1482 .z_and_np, .nz_or_p => .{ .rr = .{
...@@ -1501,7 +1501,7 @@ fn asmSetccMemory(self: *CodeGen, cc: Condition, m: Memory) !void {...@@ -1501,7 +1501,7 @@ fn asmSetccMemory(self: *CodeGen, cc: Condition, m: Memory) !void {
1501 },1501 },
1502 .data = switch (cc) {1502 .data = switch (cc) {
1503 else => .{ .x = .{1503 else => .{ .x = .{
1504 .fixes = .fromCondition(cc),1504 .fixes = .fromCond(cc),
1505 .payload = payload,1505 .payload = payload,
1506 } },1506 } },
1507 .z_and_np, .nz_or_p => .{ .rx = .{1507 .z_and_np, .nz_or_p => .{ .rx = .{
...@@ -1536,7 +1536,7 @@ fn asmJccReloc(self: *CodeGen, cc: Condition, target: Mir.Inst.Index) !Mir.Inst....@@ -1536,7 +1536,7 @@ fn asmJccReloc(self: *CodeGen, cc: Condition, target: Mir.Inst.Index) !Mir.Inst.
1536 },1536 },
1537 .data = .{ .inst = .{1537 .data = .{ .inst = .{
1538 .fixes = switch (cc) {1538 .fixes = switch (cc) {
1539 else => .fromCondition(cc),1539 else => .fromCond(cc),
1540 .z_and_np, .nz_or_p => ._,1540 .z_and_np, .nz_or_p => ._,
1541 },1541 },
1542 .inst = target,1542 .inst = target,
...@@ -2224,7 +2224,7 @@ fn gen(self: *CodeGen) InnerError!void {...@@ -2224,7 +2224,7 @@ fn gen(self: *CodeGen) InnerError!void {
2224 else => |cc| return self.fail("{s} does not support var args", .{@tagName(cc)}),2224 else => |cc| return self.fail("{s} does not support var args", .{@tagName(cc)}),
2225 };2225 };
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
2229 try self.genBody(self.air.getMainBody());2229 try self.genBody(self.air.getMainBody());
22302230
...@@ -2235,7 +2235,7 @@ fn gen(self: *CodeGen) InnerError!void {...@@ -2235,7 +2235,7 @@ fn gen(self: *CodeGen) InnerError!void {
2235 break :epilogue_relocs self.epilogue_relocs.items[0..epilogue_relocs_last_index];2235 break :epilogue_relocs self.epilogue_relocs.items[0..epilogue_relocs_last_index];
2236 } else self.epilogue_relocs.items) |epilogue_reloc| self.performReloc(epilogue_reloc);2236 } 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);
2239 const backpatch_stack_dealloc = try self.asmPlaceholder();2239 const backpatch_stack_dealloc = try self.asmPlaceholder();
2240 const backpatch_pop_callee_preserved_regs = try self.asmPlaceholder();2240 const backpatch_pop_callee_preserved_regs = try self.asmPlaceholder();
2241 try self.asmRegister(.{ ._, .pop }, .rbp);2241 try self.asmRegister(.{ ._, .pop }, .rbp);
...@@ -2354,15 +2354,15 @@ fn gen(self: *CodeGen) InnerError!void {...@@ -2354,15 +2354,15 @@ fn gen(self: *CodeGen) InnerError!void {
2354 });2354 });
2355 }2355 }
2356 } else {2356 } else {
2357 try self.asmPseudo(.pseudo_dbg_prologue_end_none);2357 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_prologue_end_none);
2358 try self.genBody(self.air.getMainBody());2358 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);
2360 }2360 }
23612361
2362 // Drop them off at the rbrace.2362 // Drop them off at the rbrace.
2363 _ = try self.addInst(.{2363 if (self.debug_output != .none) _ = try self.addInst(.{
2364 .tag = .pseudo,2364 .tag = .pseudo,
2365 .ops = .pseudo_dbg_line_stmt_line_column,2365 .ops = .pseudo_dbg_line_line_column,
2366 .data = .{ .line_column = .{2366 .data = .{ .line_column = .{
2367 .line = self.end_di_line,2367 .line = self.end_di_line,
2368 .column = self.end_di_column,2368 .column = self.end_di_column,
...@@ -2387,13 +2387,13 @@ fn checkInvariantsAfterAirInst(self: *CodeGen) void {...@@ -2387,13 +2387,13 @@ fn checkInvariantsAfterAirInst(self: *CodeGen) void {
2387}2387}
23882388
2389fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {2389fn 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);
2391 try self.genBody(body);2391 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);
2393}2393}
23942394
2395fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {2395fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2396 @setEvalBranchQuota(3_400);2396 @setEvalBranchQuota(3_900);
2397 const pt = cg.pt;2397 const pt = cg.pt;
2398 const zcu = pt.zcu;2398 const zcu = pt.zcu;
2399 const ip = &zcu.intern_pool;2399 const ip = &zcu.intern_pool;
...@@ -2543,7 +2543,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -2543,7 +2543,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2543 .reduce_optimized => try cg.airReduce(inst),2543 .reduce_optimized => try cg.airReduce(inst),
2544 .int_from_float_optimized => try cg.airIntFromFloat(inst),2544 .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 },
2547 .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else {2560 .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else {
2548 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;2561 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
2549 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;2562 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 {...@@ -2792,9 +2805,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2792 }2805 }
2793 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);2806 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
2794 },2807 },
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 {
2796 const bin_op = air_datas[@intFromEnum(inst)].bin_op;2809 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);
2798 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });2810 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
2799 var res: [1]Temp = undefined;2811 var res: [1]Temp = undefined;
2800 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{2812 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 {...@@ -4496,7 +4508,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4496 },4508 },
4497 .extra_temps = .{4509 .extra_temps = .{
4498 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },4510 .{ .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 } } },
4500 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },4512 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4501 .unused,4513 .unused,
4502 .unused,4514 .unused,
...@@ -4633,7 +4645,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4633,7 +4645,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4633 },4645 },
4634 .extra_temps = .{4646 .extra_temps = .{
4635 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },4647 .{ .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 } } },
4637 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },4649 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4638 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },4650 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4639 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },4651 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
...@@ -4953,7 +4965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4953,7 +4965,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4953 },4965 },
4954 .extra_temps = .{4966 .extra_temps = .{
4955 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },4967 .{ .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 } } },
4957 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },4969 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
4958 .unused,4970 .unused,
4959 .unused,4971 .unused,
...@@ -4984,7 +4996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -4984,7 +4996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
4984 },4996 },
4985 .extra_temps = .{4997 .extra_temps = .{
4986 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },4998 .{ .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 } } },
4988 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },5000 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
4989 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },5001 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
4990 .unused,5002 .unused,
...@@ -5016,7 +5028,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5016,7 +5028,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5016 },5028 },
5017 .extra_temps = .{5029 .extra_temps = .{
5018 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },5030 .{ .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 } } },
5020 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },5032 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5021 .unused,5033 .unused,
5022 .unused,5034 .unused,
...@@ -5045,7 +5057,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5045,7 +5057,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5045 },5057 },
5046 .extra_temps = .{5058 .extra_temps = .{
5047 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5059 .{ .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 } } },
5049 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },5061 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5050 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },5062 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5051 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },5063 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
...@@ -5081,7 +5093,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5081,7 +5093,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5081 },5093 },
5082 .extra_temps = .{5094 .extra_temps = .{
5083 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5095 .{ .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 } } },
5085 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },5097 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5086 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },5098 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5087 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },5099 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
...@@ -5117,7 +5129,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5117,7 +5129,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5117 },5129 },
5118 .extra_temps = .{5130 .extra_temps = .{
5119 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5131 .{ .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 } } },
5121 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },5133 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5122 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },5134 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5123 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },5135 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
...@@ -5359,255 +5371,173 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5359,255 +5371,173 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5359 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },5371 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
5360 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },5372 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5361 } },5373 } },
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 } },
5390 }, .{5374 }, .{
5391 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },5375 .required_features = .{ .f16c, null, null, null },
5392 .patterns = &.{5376 .src_constraints = .{
5393 .{ .src = .{ .to_mut_gpr, .mem } },5377 .{ .scalar_float = .{ .of = .word, .is = .word } },
5394 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },5378 .{ .scalar_float = .{ .of = .word, .is = .word } },
5395 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5396 },5379 },
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 } },
5407 .patterns = &.{5380 .patterns = &.{
5408 .{ .src = .{ .to_mut_gpr, .to_gpr } },5381 .{ .src = .{ .to_sse, .to_sse } },
5409 },5382 },
5410 .dst_temps = .{.{ .ref = .src0 }},5383 .extra_temps = .{
5411 .clobbers = .{ .eflags = true },5384 .{ .type = .f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
5412 .each = .{ .once = &.{5385 .{ .type = .f16, .kind = .{ .rc = .sse } },
5413 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },5386 .unused,
5414 .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ },5387 .unused,
5415 } },5388 .unused,
5416 }, .{5389 .unused,
5417 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },5390 .unused,
5418 .patterns = &.{5391 .unused,
5419 .{ .src = .{ .to_mut_gpr, .mem } },5392 .unused,
5420 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5421 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5422 },5393 },
5423 .dst_temps = .{.{ .ref = .src0 }},5394 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5424 .clobbers = .{ .eflags = true },
5425 .each = .{ .once = &.{5395 .each = .{ .once = &.{
5426 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },5396 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
5427 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },5397 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
5428 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },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(.{}), ._ },
5429 } },5402 } },
5430 }, .{5403 }, .{
5431 .required_features = .{ .cmov, null, null, null },5404 .required_features = .{ .sse, null, null, null },
5432 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },5405 .src_constraints = .{
5433 .patterns = &.{5406 .{ .scalar_float = .{ .of = .word, .is = .word } },
5434 .{ .src = .{ .to_mut_gpr, .mem } },5407 .{ .scalar_float = .{ .of = .word, .is = .word } },
5435 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5436 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5437 },5408 },
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 } },
5446 .patterns = &.{5409 .patterns = &.{
5447 .{ .src = .{ .to_mut_gpr, .mem } },5410 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
5448 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5449 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5450 },5411 },
5451 .dst_temps = .{.{ .ref = .src0 }},5412 .call_frame = .{ .alignment = .@"16" },
5452 .clobbers = .{ .eflags = true },5413 .extra_temps = .{
5453 .each = .{ .once = &.{5414 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
5454 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },5415 .unused,
5455 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },5416 .unused,
5456 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },5417 .unused,
5457 } },5418 .unused,
5458 }, .{5419 .unused,
5459 .required_features = .{ .cmov, null, null, null },5420 .unused,
5460 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },5421 .unused,
5461 .patterns = &.{5422 .unused,
5462 .{ .src = .{ .to_mut_gpr, .mem } },
5463 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5464 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5465 },5423 },
5466 .dst_temps = .{.{ .ref = .src0 }},5424 .dst_temps = .{.{ .ref = .src0 }},
5467 .clobbers = .{ .eflags = true },5425 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5468 .each = .{ .once = &.{5426 .each = .{ .once = &.{
5469 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },5427 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
5470 .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ },
5471 } },5428 } },
5472 }, .{5429 }, .{
5473 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },5430 .required_features = .{ .f16c, null, null, null },
5474 .patterns = &.{5431 .src_constraints = .{
5475 .{ .src = .{ .to_mut_gpr, .mem } },5432 .{ .scalar_float = .{ .of = .qword, .is = .word } },
5476 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },5433 .{ .scalar_float = .{ .of = .qword, .is = .word } },
5477 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5478 },5434 },
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 } },
5489 .patterns = &.{5435 .patterns = &.{
5490 .{ .src = .{ .to_mut_gpr, .mem } },5436 .{ .src = .{ .mem, .mem } },
5491 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },5437 .{ .src = .{ .to_sse, .mem } },
5492 .{ .src = .{ .to_mut_gpr, .to_gpr } },5438 .{ .src = .{ .mem, .to_sse } },
5439 .{ .src = .{ .to_sse, .to_sse } },
5493 },5440 },
5494 .dst_temps = .{.{ .ref = .src0 }},5441 .extra_temps = .{
5495 .clobbers = .{ .eflags = true },5442 .{ .type = .vector_4_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
5496 .each = .{ .once = &.{5443 .{ .type = .vector_4_f16, .kind = .{ .rc = .sse } },
5497 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },5444 .unused,
5498 .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ },5445 .unused,
5499 } },5446 .unused,
5500 }, .{5447 .unused,
5501 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },5448 .unused,
5502 .patterns = &.{5449 .unused,
5503 .{ .src = .{ .to_mut_gpr, .mem } },5450 .unused,
5504 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5505 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5506 },5451 },
5507 .dst_temps = .{.{ .ref = .src0 }},5452 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5508 .clobbers = .{ .eflags = true },
5509 .each = .{ .once = &.{5453 .each = .{ .once = &.{
5510 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },5454 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
5511 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },5455 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
5512 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },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(.{}), ._ },
5513 } },5460 } },
5514 }, .{5461 }, .{
5515 .required_features = .{ .cmov, null, null, null },5462 .required_features = .{ .f16c, null, null, null },
5516 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },5463 .src_constraints = .{
5517 .patterns = &.{5464 .{ .scalar_float = .{ .of = .xword, .is = .word } },
5518 .{ .src = .{ .to_mut_gpr, .mem } },5465 .{ .scalar_float = .{ .of = .xword, .is = .word } },
5519 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5520 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5521 },5466 },
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 } },
5530 .patterns = &.{5467 .patterns = &.{
5531 .{ .src = .{ .to_mut_gpr, .mem } },5468 .{ .src = .{ .mem, .mem } },
5532 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },5469 .{ .src = .{ .to_sse, .mem } },
5533 .{ .src = .{ .to_mut_gpr, .to_gpr } },5470 .{ .src = .{ .mem, .to_sse } },
5471 .{ .src = .{ .to_sse, .to_sse } },
5534 },5472 },
5535 .dst_temps = .{.{ .ref = .src0 }},5473 .extra_temps = .{
5536 .clobbers = .{ .eflags = true },5474 .{ .type = .vector_8_f16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
5537 .each = .{ .once = &.{5475 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
5538 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },5476 .unused,
5539 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },5477 .unused,
5540 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },5478 .unused,
5541 } },5479 .unused,
5542 }, .{5480 .unused,
5543 .required_features = .{ .@"64bit", .cmov, null, null },5481 .unused,
5544 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },5482 .unused,
5545 .patterns = &.{
5546 .{ .src = .{ .to_mut_gpr, .mem } },
5547 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5548 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5549 },5483 },
5550 .dst_temps = .{.{ .ref = .src0 }},5484 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5551 .clobbers = .{ .eflags = true },
5552 .each = .{ .once = &.{5485 .each = .{ .once = &.{
5553 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },5486 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
5554 .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ },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(.{}), ._ },
5555 } },5492 } },
5556 }, .{5493 }, .{
5557 .required_features = .{ .@"64bit", null, null, null },5494 .required_features = .{ .f16c, null, null, null },
5558 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },5495 .src_constraints = .{
5559 .patterns = &.{5496 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
5560 .{ .src = .{ .to_mut_gpr, .mem } },5497 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
5561 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5562 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5563 },5498 },
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 } },
5574 .patterns = &.{5499 .patterns = &.{
5575 .{ .src = .{ .to_mut_gpr, .mem } },5500 .{ .src = .{ .to_mem, .to_mem } },
5576 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5577 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5578 },5501 },
5579 .dst_temps = .{.{ .ref = .src0 }},5502 .extra_temps = .{
5580 .clobbers = .{ .eflags = true },5503 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5581 .each = .{ .once = &.{5504 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
5582 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },5505 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
5583 .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ },5506 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
5584 } },5507 .unused,
5585 }, .{5508 .unused,
5586 .required_features = .{ .@"64bit", null, null, null },5509 .unused,
5587 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },5510 .unused,
5588 .patterns = &.{5511 .unused,
5589 .{ .src = .{ .to_mut_gpr, .mem } },
5590 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5591 .{ .src = .{ .to_mut_gpr, .to_gpr } },
5592 },5512 },
5593 .dst_temps = .{.{ .ref = .src0 }},5513 .dst_temps = .{.mem},
5594 .clobbers = .{ .eflags = true },5514 .clobbers = .{ .eflags = true },
5595 .each = .{ .once = &.{5515 .each = .{ .once = &.{
5596 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },5516 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5597 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },5517 .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5598 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },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", ._, ._, ._ },
5599 } },5525 } },
5600 }, .{5526 }, .{
5601 .required_features = .{ .@"64bit", .cmov, null, null },5527 .required_features = .{ .avx, null, null, null },
5602 .src_constraints = .{ .any_signed_int, .any_signed_int },5528 .src_constraints = .{
5529 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5530 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5531 },
5603 .patterns = &.{5532 .patterns = &.{
5604 .{ .src = .{ .to_mem, .to_mem } },5533 .{ .src = .{ .to_mem, .to_mem } },
5605 },5534 },
5535 .call_frame = .{ .alignment = .@"16" },
5606 .extra_temps = .{5536 .extra_temps = .{
5607 .{ .type = .isize, .kind = .{ .reg = .rsi } },5537 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5608 .{ .type = .u64, .kind = .{ .reg = .rdi } },5538 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
5609 .{ .type = .u64, .kind = .{ .reg = .rcx } },5539 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
5610 .unused,5540 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
5611 .unused,5541 .unused,
5612 .unused,5542 .unused,
5613 .unused,5543 .unused,
...@@ -5615,34 +5545,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5615,34 +5545,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5615 .unused,5545 .unused,
5616 },5546 },
5617 .dst_temps = .{.mem},5547 .dst_temps = .{.mem},
5618 .clobbers = .{ .eflags = true },5548 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5619 .each = .{ .once = &.{5549 .each = .{ .once = &.{
5620 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },5550 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5621 .{ ._, ._c, .cl, ._, ._, ._, ._ },5551 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
5622 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },5552 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
5623 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },5553 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
5624 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },5554 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
5625 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },5555 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
5626 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },5556 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5627 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },5557 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
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, ._, ._, ._, ._ },
5634 } },5558 } },
5635 }, .{5559 }, .{
5636 .required_features = .{ .@"64bit", null, null, null },5560 .required_features = .{ .sse4_1, null, null, null },
5637 .src_constraints = .{ .any_signed_int, .any_signed_int },5561 .src_constraints = .{
5562 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5563 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5564 },
5638 .patterns = &.{5565 .patterns = &.{
5639 .{ .src = .{ .to_mem, .to_mem } },5566 .{ .src = .{ .to_mem, .to_mem } },
5640 },5567 },
5568 .call_frame = .{ .alignment = .@"16" },
5641 .extra_temps = .{5569 .extra_temps = .{
5642 .{ .type = .isize, .kind = .{ .reg = .rsi } },5570 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5643 .{ .type = .u64, .kind = .{ .reg = .rdi } },5571 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
5644 .{ .type = .u64, .kind = .{ .reg = .rcx } },5572 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
5645 .unused,5573 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
5646 .unused,5574 .unused,
5647 .unused,5575 .unused,
5648 .unused,5576 .unused,
...@@ -5650,66 +5578,104 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5650,66 +5578,104 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5650 .unused,5578 .unused,
5651 },5579 },
5652 .dst_temps = .{.mem},5580 .dst_temps = .{.mem},
5653 .clobbers = .{ .eflags = true },5581 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5654 .each = .{ .once = &.{5582 .each = .{ .once = &.{
5655 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },5583 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5656 .{ ._, ._c, .cl, ._, ._, ._, ._ },5584 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
5657 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },5585 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
5658 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },5586 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
5659 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },5587 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
5660 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },5588 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
5661 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },5589 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
5662 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },5590 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5663 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },5591 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
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, ._, ._, ._, ._ },
5669 } },5592 } },
5670 }, .{5593 }, .{
5671 .required_features = .{ .@"64bit", .cmov, null, null },5594 .required_features = .{ .sse2, null, null, null },
5672 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },5595 .src_constraints = .{
5596 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5597 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
5598 },
5673 .patterns = &.{5599 .patterns = &.{
5674 .{ .src = .{ .to_mem, .to_mem } },5600 .{ .src = .{ .to_mem, .to_mem } },
5675 },5601 },
5602 .call_frame = .{ .alignment = .@"16" },
5676 .extra_temps = .{5603 .extra_temps = .{
5677 .{ .type = .isize, .kind = .{ .reg = .rsi } },5604 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5678 .{ .type = .u64, .kind = .{ .reg = .rdi } },5605 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
5679 .{ .type = .u64, .kind = .{ .reg = .rcx } },5606 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
5607 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
5608 .{ .type = .f16, .kind = .{ .reg = .ax } },
5609 .unused,
5680 .unused,5610 .unused,
5681 .unused,5611 .unused,
5682 .unused,5612 .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" } } },
5683 .unused,5645 .unused,
5684 .unused,5646 .unused,
5685 .unused,5647 .unused,
5686 },5648 },
5687 .dst_temps = .{.mem},5649 .dst_temps = .{.mem},
5688 .clobbers = .{ .eflags = true },5650 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5689 .each = .{ .once = &.{5651 .each = .{ .once = &.{
5690 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },5652 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5691 .{ ._, ._c, .cl, ._, ._, ._, ._ },5653 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
5692 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },5654 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
5693 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },5655 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
5694 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },5656 .{ ._, ._, .movzx, .tmp1d, .memia(.src1w, .tmp0, .add_size), ._, ._ },
5695 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },5657 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
5696 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },5658 .{ ._, ._ss, .mov, .tmp4x, .mem(.tmp2d), ._, ._ },
5697 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },5659 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
5698 .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ },5660 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
5699 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },5661 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
5700 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },5662 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
5701 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },5663 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5664 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5702 } },5665 } },
5703 }, .{5666 }, .{
5704 .required_features = .{ .@"64bit", null, null, null },5667 .required_features = .{ .avx, null, null, null },
5705 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },5668 .src_constraints = .{
5669 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5670 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5671 },
5706 .patterns = &.{5672 .patterns = &.{
5707 .{ .src = .{ .to_mem, .to_mem } },5673 .{ .src = .{ .to_sse, .to_sse } },
5708 },5674 },
5709 .extra_temps = .{5675 .extra_temps = .{
5710 .{ .type = .isize, .kind = .{ .reg = .rsi } },5676 .{ .type = .f32, .kind = .{ .rc = .sse } },
5711 .{ .type = .u64, .kind = .{ .reg = .rdi } },5677 .unused,
5712 .{ .type = .u64, .kind = .{ .reg = .rcx } },5678 .unused,
5713 .unused,5679 .unused,
5714 .unused,5680 .unused,
5715 .unused,5681 .unused,
...@@ -5717,98 +5683,115 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5717,98 +5683,115 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5717 .unused,5683 .unused,
5718 .unused,5684 .unused,
5719 },5685 },
5720 .dst_temps = .{.mem},5686 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5721 .clobbers = .{ .eflags = true },
5722 .each = .{ .once = &.{5687 .each = .{ .once = &.{
5723 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },5688 .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
5724 .{ ._, ._c, .cl, ._, ._, ._, ._ },5689 .{ ._, .v_ss, .max, .dst0x, .src1x, .src0x, ._ },
5725 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },5690 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
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, ._, ._, ._, ._ },
5735 } },5691 } },
5736 }, .{5692 }, .{
5737 .required_features = .{ .avx, null, null, null },5693 .required_features = .{ .sse4_1, null, null, null },
5738 .src_constraints = .{5694 .src_constraints = .{
5739 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },5695 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5740 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },5696 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5741 },5697 },
5742 .patterns = &.{5698 .patterns = &.{
5743 .{ .src = .{ .to_sse, .mem } },5699 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
5744 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
5745 .{ .src = .{ .to_sse, .to_sse } },
5746 },5700 },
5747 .dst_temps = .{.{ .rc = .sse }},5701 .dst_temps = .{.{ .rc = .sse }},
5748 .each = .{ .once = &.{5702 .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, ._ },
5750 } },5707 } },
5751 }, .{5708 }, .{
5752 .required_features = .{ .sse4_1, null, null, null },5709 .required_features = .{ .sse, null, null, null },
5753 .src_constraints = .{5710 .src_constraints = .{
5754 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },5711 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5755 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },5712 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5756 },5713 },
5757 .patterns = &.{5714 .patterns = &.{
5758 .{ .src = .{ .to_mut_sse, .mem } },
5759 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
5760 .{ .src = .{ .to_mut_sse, .to_sse } },5715 .{ .src = .{ .to_mut_sse, .to_sse } },
5761 },5716 },
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 },
5762 .dst_temps = .{.{ .ref = .src0 }},5728 .dst_temps = .{.{ .ref = .src0 }},
5763 .each = .{ .once = &.{5729 .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, ._, ._ },
5765 } },5736 } },
5766 }, .{5737 }, .{
5767 .required_features = .{ .sse2, null, null, null },5738 .required_features = .{ .avx, null, null, null },
5768 .src_constraints = .{5739 .src_constraints = .{
5769 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },5740 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5770 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },5741 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5771 },5742 },
5772 .patterns = &.{5743 .patterns = &.{
5773 .{ .src = .{ .to_mut_sse, .mem } },5744 .{ .src = .{ .to_sse, .to_sse } },
5774 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
5775 .{ .src = .{ .to_mut_sse, .to_sse } },
5776 },5745 },
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 } }},
5778 .each = .{ .once = &.{5758 .each = .{ .once = &.{
5779 .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ },5759 .{ ._, .v_ps, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
5780 .{ ._, .p_b, .cmpgt, .dst0x, .src0x, ._, ._ },5760 .{ ._, .v_ps, .max, .dst0x, .src1x, .src0x, ._ },
5781 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },5761 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
5782 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
5783 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
5784 } },5762 } },
5785 }, .{5763 }, .{
5786 .required_features = .{ .avx2, null, null, null },5764 .required_features = .{ .sse4_1, null, null, null },
5787 .src_constraints = .{5765 .src_constraints = .{
5788 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },5766 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5789 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },5767 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5790 },5768 },
5791 .patterns = &.{5769 .patterns = &.{
5792 .{ .src = .{ .to_sse, .mem } },5770 .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } },
5793 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },5771 .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } },
5794 .{ .src = .{ .to_sse, .to_sse } },5772 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
5795 },5773 },
5796 .dst_temps = .{.{ .rc = .sse }},5774 .dst_temps = .{.{ .rc = .sse }},
5797 .each = .{ .once = &.{5775 .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, ._ },
5799 } },5780 } },
5800 }, .{5781 }, .{
5801 .required_features = .{ .avx2, null, null, null },5782 .required_features = .{ .sse, null, null, null },
5802 .src_constraints = .{5783 .src_constraints = .{
5803 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },5784 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5804 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },5785 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
5805 },5786 },
5806 .patterns = &.{5787 .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 } },
5808 },5791 },
5809 .extra_temps = .{5792 .extra_temps = .{
5810 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5793 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5811 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },5794 .unused,
5812 .unused,5795 .unused,
5813 .unused,5796 .unused,
5814 .unused,5797 .unused,
...@@ -5817,28 +5800,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5817,28 +5800,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5817 .unused,5800 .unused,
5818 .unused,5801 .unused,
5819 },5802 },
5820 .dst_temps = .{.mem},5803 .dst_temps = .{.{ .ref = .src0 }},
5821 .clobbers = .{ .eflags = true },
5822 .each = .{ .once = &.{5804 .each = .{ .once = &.{
5823 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },5805 .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ },
5824 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },5806 .{ ._, ._ps, .max, .tmp0x, .src0x, ._, ._ },
5825 .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },5807 .{ ._, ._ps, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
5826 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },5808 .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ },
5827 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },5809 .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ },
5828 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5810 .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
5829 } },5811 } },
5830 }, .{5812 }, .{
5831 .required_features = .{ .avx, null, null, null },5813 .required_features = .{ .avx, null, null, null },
5832 .src_constraints = .{5814 .src_constraints = .{
5833 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },5815 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
5834 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },5816 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
5835 },5817 },
5836 .patterns = &.{5818 .patterns = &.{
5837 .{ .src = .{ .to_mem, .to_mem } },5819 .{ .src = .{ .to_sse, .to_sse } },
5838 },5820 },
5839 .extra_temps = .{5821 .extra_temps = .{
5840 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5822 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
5841 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },5823 .unused,
5842 .unused,5824 .unused,
5843 .unused,5825 .unused,
5844 .unused,5826 .unused,
...@@ -5847,30 +5829,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5847,30 +5829,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5847 .unused,5829 .unused,
5848 .unused,5830 .unused,
5849 },5831 },
5850 .dst_temps = .{.mem},5832 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5851 .clobbers = .{ .eflags = true },
5852 .each = .{ .once = &.{5833 .each = .{ .once = &.{
5853 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },5834 .{ ._, .v_ps, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) },
5854 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },5835 .{ ._, .v_ps, .max, .dst0y, .src1y, .src0y, ._ },
5855 .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },5836 .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .src1y, .tmp0y },
5856 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5857 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5858 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5859 } },5837 } },
5860 }, .{5838 }, .{
5861 .required_features = .{ .sse4_1, null, null, null },5839 .required_features = .{ .avx, null, null, null },
5862 .src_constraints = .{5840 .src_constraints = .{
5863 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },5841 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
5864 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },5842 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
5865 },5843 },
5866 .patterns = &.{5844 .patterns = &.{
5867 .{ .src = .{ .to_mem, .to_mem } },5845 .{ .src = .{ .to_mem, .to_mem } },
5868 },5846 },
5869 .extra_temps = .{5847 .extra_temps = .{
5870 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5848 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5871 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },5849 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
5872 .unused,5850 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
5873 .unused,5851 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
5874 .unused,5852 .unused,
5875 .unused,5853 .unused,
5876 .unused,5854 .unused,
...@@ -5880,27 +5858,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5880,27 +5858,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5880 .dst_temps = .{.mem},5858 .dst_temps = .{.mem},
5881 .clobbers = .{ .eflags = true },5859 .clobbers = .{ .eflags = true },
5882 .each = .{ .once = &.{5860 .each = .{ .once = &.{
5883 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },5861 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5884 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },5862 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
5885 .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },5863 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
5886 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },5864 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
5887 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },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), ._, ._ },
5888 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5869 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5889 } },5870 } },
5890 }, .{5871 }, .{
5891 .required_features = .{ .sse2, null, null, null },5872 .required_features = .{ .sse4_1, null, null, null },
5892 .src_constraints = .{5873 .src_constraints = .{
5893 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },5874 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
5894 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },5875 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
5895 },5876 },
5896 .patterns = &.{5877 .patterns = &.{
5897 .{ .src = .{ .to_mem, .to_mem } },5878 .{ .src = .{ .to_mem, .to_mem } },
5898 },5879 },
5899 .extra_temps = .{5880 .extra_temps = .{
5900 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5881 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5901 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },5882 .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
5902 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },5883 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5903 .unused,5884 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5904 .unused,5885 .unused,
5905 .unused,5886 .unused,
5906 .unused,5887 .unused,
...@@ -5910,31 +5891,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5910,31 +5891,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5910 .dst_temps = .{.mem},5891 .dst_temps = .{.mem},
5911 .clobbers = .{ .eflags = true },5892 .clobbers = .{ .eflags = true },
5912 .each = .{ .once = &.{5893 .each = .{ .once = &.{
5913 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },5894 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5914 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },5895 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5915 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },5896 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5916 .{ ._, .p_b, .cmpgt, .tmp1x, .tmp2x, ._, ._ },5897 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
5917 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },5898 .{ ._, ._ps, .max, .tmp3x, .tmp1x, ._, ._ },
5918 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },5899 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
5919 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },5900 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
5920 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },5901 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
5921 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },5902 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
5922 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5903 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5923 } },5904 } },
5924 }, .{5905 }, .{
5925 .required_features = .{ .cmov, .slow_incdec, null, null },5906 .required_features = .{ .sse, null, null, null },
5926 .src_constraints = .{5907 .src_constraints = .{
5927 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },5908 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
5928 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },5909 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
5929 },5910 },
5930 .patterns = &.{5911 .patterns = &.{
5931 .{ .src = .{ .to_mem, .to_mem } },5912 .{ .src = .{ .to_mem, .to_mem } },
5932 },5913 },
5933 .extra_temps = .{5914 .extra_temps = .{
5934 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5915 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5935 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },5916 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5936 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },5917 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5937 .unused,5918 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5938 .unused,5919 .unused,
5939 .unused,5920 .unused,
5940 .unused,5921 .unused,
...@@ -5944,28 +5925,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5944,28 +5925,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5944 .dst_temps = .{.mem},5925 .dst_temps = .{.mem},
5945 .clobbers = .{ .eflags = true },5926 .clobbers = .{ .eflags = true },
5946 .each = .{ .once = &.{5927 .each = .{ .once = &.{
5947 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },5928 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5948 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },5929 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5949 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },5930 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5950 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },5931 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
5951 .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ },5932 .{ ._, ._ps, .max, .tmp3x, .tmp1x, ._, ._ },
5952 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },5933 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ },
5953 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },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), ._, ._ },
5954 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5939 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5955 } },5940 } },
5956 }, .{5941 }, .{
5957 .required_features = .{ .cmov, null, null, null },5942 .required_features = .{ .avx, null, null, null },
5958 .src_constraints = .{5943 .src_constraints = .{
5959 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },5944 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5960 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },5945 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5961 },5946 },
5962 .patterns = &.{5947 .patterns = &.{
5963 .{ .src = .{ .to_mem, .to_mem } },5948 .{ .src = .{ .to_sse, .to_sse } },
5964 },5949 },
5965 .extra_temps = .{5950 .extra_temps = .{
5966 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5951 .{ .type = .f64, .kind = .{ .rc = .sse } },
5967 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },5952 .unused,
5968 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },5953 .unused,
5969 .unused,5954 .unused,
5970 .unused,5955 .unused,
5971 .unused,5956 .unused,
...@@ -5973,30 +5958,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5973,30 +5958,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5973 .unused,5958 .unused,
5974 .unused,5959 .unused,
5975 },5960 },
5976 .dst_temps = .{.mem},5961 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5977 .clobbers = .{ .eflags = true },
5978 .each = .{ .once = &.{5962 .each = .{ .once = &.{
5979 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },5963 .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
5980 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },5964 .{ ._, .v_sd, .max, .dst0x, .src1x, .src0x, ._ },
5981 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },5965 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
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", ._, ._, ._ },
5987 } },5966 } },
5988 }, .{5967 }, .{
5989 .required_features = .{ .slow_incdec, null, null, null },5968 .required_features = .{ .sse4_1, null, null, null },
5990 .src_constraints = .{5969 .src_constraints = .{
5991 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },5970 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5992 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },5971 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5993 },5972 },
5994 .patterns = &.{5973 .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 } },
5996 },5991 },
5997 .extra_temps = .{5992 .extra_temps = .{
5998 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5993 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
5999 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },5994 .unused,
6000 .unused,5995 .unused,
6001 .unused,5996 .unused,
6002 .unused,5997 .unused,
...@@ -6005,29 +6000,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6005,29 +6000,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6005 .unused,6000 .unused,
6006 .unused,6001 .unused,
6007 },6002 },
6008 .dst_temps = .{.mem},6003 .dst_temps = .{.{ .ref = .src0 }},
6009 .clobbers = .{ .eflags = true },
6010 .each = .{ .once = &.{6004 .each = .{ .once = &.{
6011 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6005 .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ },
6012 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },6006 .{ ._, ._sd, .max, .tmp0x, .src0x, ._, ._ },
6013 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },6007 .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
6014 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },6008 .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ },
6015 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },6009 .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ },
6016 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },6010 .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
6017 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6018 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6019 } },6011 } },
6020 }, .{6012 }, .{
6013 .required_features = .{ .sse, null, null, null },
6021 .src_constraints = .{6014 .src_constraints = .{
6022 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },6015 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
6023 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },6016 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
6024 },6017 },
6025 .patterns = &.{6018 .patterns = &.{
6026 .{ .src = .{ .to_mem, .to_mem } },6019 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
6027 },6020 },
6021 .call_frame = .{ .alignment = .@"16" },
6028 .extra_temps = .{6022 .extra_temps = .{
6029 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6023 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } },
6030 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },6024 .unused,
6031 .unused,6025 .unused,
6032 .unused,6026 .unused,
6033 .unused,6027 .unused,
...@@ -6036,90 +6030,98 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6036,90 +6030,98 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6036 .unused,6030 .unused,
6037 .unused,6031 .unused,
6038 },6032 },
6039 .dst_temps = .{.mem},6033 .dst_temps = .{.{ .ref = .src0 }},
6040 .clobbers = .{ .eflags = true },6034 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6041 .each = .{ .once = &.{6035 .each = .{ .once = &.{
6042 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6036 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
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", ._, ._, ._ },
6050 } },6037 } },
6051 }, .{6038 }, .{
6052 .required_features = .{ .sse, .mmx, null, null },6039 .required_features = .{ .avx, null, null, null },
6053 .src_constraints = .{6040 .src_constraints = .{
6054 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },6041 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6055 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },6042 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6056 },6043 },
6057 .patterns = &.{6044 .patterns = &.{
6058 .{ .src = .{ .to_mut_mmx, .mem } },6045 .{ .src = .{ .to_sse, .to_sse } },
6059 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
6060 .{ .src = .{ .to_mut_mmx, .to_mmx } },
6061 },6046 },
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 } }},
6063 .each = .{ .once = &.{6059 .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 },
6065 } },6063 } },
6066 }, .{6064 }, .{
6067 .required_features = .{ .avx, null, null, null },6065 .required_features = .{ .sse4_1, null, null, null },
6068 .src_constraints = .{6066 .src_constraints = .{
6069 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },6067 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6070 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },6068 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6071 },6069 },
6072 .patterns = &.{6070 .patterns = &.{
6073 .{ .src = .{ .to_sse, .mem } },6071 .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } },
6074 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },6072 .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } },
6075 .{ .src = .{ .to_sse, .to_sse } },6073 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
6076 },6074 },
6077 .dst_temps = .{.{ .rc = .sse }},6075 .dst_temps = .{.{ .rc = .sse }},
6078 .each = .{ .once = &.{6076 .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, ._ },
6080 } },6081 } },
6081 }, .{6082 }, .{
6082 .required_features = .{ .sse2, null, null, null },6083 .required_features = .{ .sse2, null, null, null },
6083 .src_constraints = .{6084 .src_constraints = .{
6084 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },6085 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6085 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },6086 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
6086 },6087 },
6087 .patterns = &.{6088 .patterns = &.{
6088 .{ .src = .{ .to_mut_sse, .mem } },6089 .{ .src = .{ .to_mut_sse, .mem } },
6089 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },6090 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6090 .{ .src = .{ .to_mut_sse, .to_sse } },6091 .{ .src = .{ .to_mut_sse, .to_sse } },
6091 },6092 },
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 },
6092 .dst_temps = .{.{ .ref = .src0 }},6104 .dst_temps = .{.{ .ref = .src0 }},
6093 .each = .{ .once = &.{6105 .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, ._, ._ },
6095 } },6112 } },
6096 }, .{6113 }, .{
6097 .required_features = .{ .avx2, null, null, null },6114 .required_features = .{ .avx, null, null, null },
6098 .src_constraints = .{6115 .src_constraints = .{
6099 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },6116 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
6100 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },6117 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
6101 },6118 },
6102 .patterns = &.{6119 .patterns = &.{
6103 .{ .src = .{ .to_sse, .mem } },
6104 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6105 .{ .src = .{ .to_sse, .to_sse } },6120 .{ .src = .{ .to_sse, .to_sse } },
6106 },6121 },
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 },
6120 .extra_temps = .{6122 .extra_temps = .{
6121 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6123 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
6122 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },6124 .unused,
6123 .unused,6125 .unused,
6124 .unused,6126 .unused,
6125 .unused,6127 .unused,
...@@ -6128,30 +6130,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6128,30 +6130,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6128 .unused,6130 .unused,
6129 .unused,6131 .unused,
6130 },6132 },
6131 .dst_temps = .{.mem},6133 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
6132 .clobbers = .{ .eflags = true },
6133 .each = .{ .once = &.{6134 .each = .{ .once = &.{
6134 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6135 .{ ._, .v_pd, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) },
6135 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },6136 .{ ._, .v_pd, .max, .dst0y, .src1y, .src0y, ._ },
6136 .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },6137 .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .src1y, .tmp0y },
6137 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6138 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
6139 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6140 } },6138 } },
6141 }, .{6139 }, .{
6142 .required_features = .{ .avx, null, null, null },6140 .required_features = .{ .avx, null, null, null },
6143 .src_constraints = .{6141 .src_constraints = .{
6144 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },6142 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
6145 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },6143 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
6146 },6144 },
6147 .patterns = &.{6145 .patterns = &.{
6148 .{ .src = .{ .to_mem, .to_mem } },6146 .{ .src = .{ .to_mem, .to_mem } },
6149 },6147 },
6150 .extra_temps = .{6148 .extra_temps = .{
6151 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6149 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6152 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },6150 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
6153 .unused,6151 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
6154 .unused,6152 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
6155 .unused,6153 .unused,
6156 .unused,6154 .unused,
6157 .unused,6155 .unused,
...@@ -6161,27 +6159,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6161,27 +6159,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6161 .dst_temps = .{.mem},6159 .dst_temps = .{.mem},
6162 .clobbers = .{ .eflags = true },6160 .clobbers = .{ .eflags = true },
6163 .each = .{ .once = &.{6161 .each = .{ .once = &.{
6164 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6162 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6165 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6163 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6166 .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },6164 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
6167 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },6165 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
6168 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },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), ._, ._ },
6169 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6170 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6170 } },6171 } },
6171 }, .{6172 }, .{
6172 .required_features = .{ .sse2, null, null, null },6173 .required_features = .{ .sse4_1, null, null, null },
6173 .src_constraints = .{6174 .src_constraints = .{
6174 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },6175 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
6175 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },6176 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
6176 },6177 },
6177 .patterns = &.{6178 .patterns = &.{
6178 .{ .src = .{ .to_mem, .to_mem } },6179 .{ .src = .{ .to_mem, .to_mem } },
6179 },6180 },
6180 .extra_temps = .{6181 .extra_temps = .{
6181 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6182 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6182 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },6183 .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
6183 .unused,6184 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6184 .unused,6185 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6185 .unused,6186 .unused,
6186 .unused,6187 .unused,
6187 .unused,6188 .unused,
...@@ -6191,27 +6192,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6191,27 +6192,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6191 .dst_temps = .{.mem},6192 .dst_temps = .{.mem},
6192 .clobbers = .{ .eflags = true },6193 .clobbers = .{ .eflags = true },
6193 .each = .{ .once = &.{6194 .each = .{ .once = &.{
6194 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6195 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6195 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6196 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6196 .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6197 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6197 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },6198 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
6198 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },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), ._, ._ },
6199 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6204 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6200 } },6205 } },
6201 }, .{6206 }, .{
6202 .required_features = .{ .cmov, .slow_incdec, null, null },6207 .required_features = .{ .sse2, null, null, null },
6203 .src_constraints = .{6208 .src_constraints = .{
6204 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },6209 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
6205 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },6210 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
6206 },6211 },
6207 .patterns = &.{6212 .patterns = &.{
6208 .{ .src = .{ .to_mem, .to_mem } },6213 .{ .src = .{ .to_mem, .to_mem } },
6209 },6214 },
6210 .extra_temps = .{6215 .extra_temps = .{
6211 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6216 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6212 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6217 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6213 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6218 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6214 .unused,6219 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
6215 .unused,6220 .unused,
6216 .unused,6221 .unused,
6217 .unused,6222 .unused,
...@@ -6221,29 +6226,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6221,29 +6226,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6221 .dst_temps = .{.mem},6226 .dst_temps = .{.mem},
6222 .clobbers = .{ .eflags = true },6227 .clobbers = .{ .eflags = true },
6223 .each = .{ .once = &.{6228 .each = .{ .once = &.{
6224 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6229 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6225 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },6230 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6226 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },6231 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6227 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },6232 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
6228 .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ },6233 .{ ._, ._pd, .max, .tmp3x, .tmp1x, ._, ._ },
6229 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },6234 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.ord), ._ },
6230 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },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), ._, ._ },
6231 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6240 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6232 } },6241 } },
6233 }, .{6242 }, .{
6234 .required_features = .{ .cmov, null, null, null },6243 .required_features = .{ .sse, null, null, null },
6235 .src_constraints = .{6244 .src_constraints = .{
6236 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },6245 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
6237 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },6246 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
6238 },6247 },
6239 .patterns = &.{6248 .patterns = &.{
6240 .{ .src = .{ .to_mem, .to_mem } },6249 .{ .src = .{ .to_mem, .to_mem } },
6241 },6250 },
6251 .call_frame = .{ .alignment = .@"16" },
6242 .extra_temps = .{6252 .extra_temps = .{
6243 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6253 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6244 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6254 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
6245 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6255 .{ .type = .f64, .kind = .{ .reg = .xmm1 } },
6246 .unused,6256 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } },
6247 .unused,6257 .unused,
6248 .unused,6258 .unused,
6249 .unused,6259 .unused,
...@@ -6251,29 +6261,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6251,29 +6261,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6251 .unused,6261 .unused,
6252 },6262 },
6253 .dst_temps = .{.mem},6263 .dst_temps = .{.mem},
6254 .clobbers = .{ .eflags = true },6264 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6255 .each = .{ .once = &.{6265 .each = .{ .once = &.{
6256 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6266 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6257 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },6267 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
6258 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },6268 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
6259 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },6269 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
6260 .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ },6270 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
6261 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },6271 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6262 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },6272 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
6263 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },6273 .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },
6274 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6264 } },6275 } },
6265 }, .{6276 }, .{
6266 .required_features = .{ .slow_incdec, null, null, null },6277 .required_features = .{ .x87, .cmov, null, null },
6267 .src_constraints = .{6278 .src_constraints = .{
6268 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },6279 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6269 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },6280 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6270 },6281 },
6271 .patterns = &.{6282 .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 } },
6273 },6286 },
6274 .extra_temps = .{6287 .extra_temps = .{
6275 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6288 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6276 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6289 .unused,
6277 .unused,6290 .unused,
6278 .unused,6291 .unused,
6279 .unused,6292 .unused,
...@@ -6282,29 +6295,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6282,29 +6295,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6282 .unused,6295 .unused,
6283 .unused,6296 .unused,
6284 },6297 },
6285 .dst_temps = .{.mem},6298 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
6286 .clobbers = .{ .eflags = true },6299 .clobbers = .{ .eflags = true },
6287 .each = .{ .once = &.{6300 .each = .{ .once = &.{
6288 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6301 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
6289 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },6302 .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ },
6290 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },6303 .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ },
6291 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },6304 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6292 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },6305 .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ },
6293 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },6306 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6294 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },6307 .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ },
6295 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6308 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
6296 } },6309 } },
6297 }, .{6310 }, .{
6311 .required_features = .{ .sahf, .x87, null, null },
6298 .src_constraints = .{6312 .src_constraints = .{
6299 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },6313 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6300 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },6314 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6301 },6315 },
6302 .patterns = &.{6316 .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 } },
6304 },6320 },
6305 .extra_temps = .{6321 .extra_temps = .{
6306 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6322 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6307 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },6323 .{ .type = .u8, .kind = .{ .reg = .ah } },
6308 .unused,6324 .unused,
6309 .unused,6325 .unused,
6310 .unused,6326 .unused,
...@@ -6313,90 +6329,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6313,90 +6329,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6313 .unused,6329 .unused,
6314 .unused,6330 .unused,
6315 },6331 },
6316 .dst_temps = .{.mem},6332 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
6317 .clobbers = .{ .eflags = true },6333 .clobbers = .{ .eflags = true },
6318 .each = .{ .once = &.{6334 .each = .{ .once = &.{
6319 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6335 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
6320 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },6336 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
6321 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },6337 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6322 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },6338 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6323 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },6339 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
6324 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },6340 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6325 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },6341 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
6326 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },6342 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6327 } },6343 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6328 }, .{6344 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6329 .required_features = .{ .sse, .mmx, null, null },6345 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
6330 .src_constraints = .{6346 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
6331 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },6347 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
6332 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },6348 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
6333 },6349 } },
6334 .patterns = &.{6350 }, .{
6335 .{ .src = .{ .to_mut_mmx, .mem } },6351 .required_features = .{ .@"64bit", .x87, null, null },
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 },
6390 .src_constraints = .{6352 .src_constraints = .{
6391 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },6353 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6392 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },6354 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6393 },6355 },
6394 .patterns = &.{6356 .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 } },
6396 },6360 },
6397 .extra_temps = .{6361 .extra_temps = .{
6398 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6362 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6399 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },6363 .{ .type = .u8, .kind = .{ .reg = .ah } },
6400 .unused,6364 .unused,
6401 .unused,6365 .unused,
6402 .unused,6366 .unused,
...@@ -6405,28 +6369,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6405,28 +6369,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6405 .unused,6369 .unused,
6406 .unused,6370 .unused,
6407 },6371 },
6408 .dst_temps = .{.mem},6372 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
6409 .clobbers = .{ .eflags = true },6373 .clobbers = .{ .eflags = true },
6410 .each = .{ .once = &.{6374 .each = .{ .once = &.{
6411 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6375 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
6412 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },6376 .{ ._, .f_, .xam, ._, ._, ._, ._ },
6413 .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },6377 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6414 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },6378 .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ },
6415 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },6379 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
6416 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },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, ._, ._, ._ },
6417 } },6389 } },
6418 }, .{6390 }, .{
6419 .required_features = .{ .avx, null, null, null },6391 .required_features = .{ .x87, null, null, null },
6420 .src_constraints = .{6392 .src_constraints = .{
6421 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },6393 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6422 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },6394 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
6423 },6395 },
6424 .patterns = &.{6396 .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 } },
6426 },6400 },
6427 .extra_temps = .{6401 .extra_temps = .{
6428 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6402 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6429 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },6403 .{ .type = .u8, .kind = .{ .reg = .ah } },
6430 .unused,6404 .unused,
6431 .unused,6405 .unused,
6432 .unused,6406 .unused,
...@@ -6435,29 +6409,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6435,29 +6409,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6435 .unused,6409 .unused,
6436 .unused,6410 .unused,
6437 },6411 },
6438 .dst_temps = .{.mem},6412 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
6439 .clobbers = .{ .eflags = true },6413 .clobbers = .{ .eflags = true },
6440 .each = .{ .once = &.{6414 .each = .{ .once = &.{
6441 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6415 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
6442 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6416 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
6443 .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },6417 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6444 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },6418 .{ ._, ._, .sahf, ._, ._, ._, ._ },
6445 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },6419 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
6446 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6420 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
6447 } },6421 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
6448 }, .{6422 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
6449 .required_features = .{ .sse2, null, null, null },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 },
6450 .src_constraints = .{6432 .src_constraints = .{
6451 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },6433 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6452 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },6434 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6453 },6435 },
6454 .patterns = &.{6436 .patterns = &.{
6455 .{ .src = .{ .to_mem, .to_mem } },6437 .{ .src = .{ .to_mem, .to_mem } },
6456 },6438 },
6457 .extra_temps = .{6439 .extra_temps = .{
6458 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6440 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6459 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },6441 .{ .type = .f80, .kind = .{ .reg = .st6 } },
6460 .unused,6442 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6461 .unused,6443 .unused,
6462 .unused,6444 .unused,
6463 .unused,6445 .unused,
...@@ -6469,26 +6451,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6469,26 +6451,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6469 .clobbers = .{ .eflags = true },6451 .clobbers = .{ .eflags = true },
6470 .each = .{ .once = &.{6452 .each = .{ .once = &.{
6471 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6453 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6472 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6454 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
6473 .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6455 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
6474 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },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, ._, ._, ._ },
6475 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },6464 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6476 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6465 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6477 } },6466 } },
6478 }, .{6467 }, .{
6479 .required_features = .{ .cmov, null, null, null },6468 .required_features = .{ .sahf, .x87, null, null },
6480 .src_constraints = .{6469 .src_constraints = .{
6481 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },6470 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6482 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },6471 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6483 },6472 },
6484 .patterns = &.{6473 .patterns = &.{
6485 .{ .src = .{ .to_mem, .to_mem } },6474 .{ .src = .{ .to_mem, .to_mem } },
6486 },6475 },
6487 .extra_temps = .{6476 .extra_temps = .{
6488 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6477 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6489 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },6478 .{ .type = .f80, .kind = .{ .reg = .st6 } },
6490 .unused,6479 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6491 .unused,6480 .{ .type = .u8, .kind = .{ .reg = .ah } },
6492 .unused,6481 .unused,
6493 .unused,6482 .unused,
6494 .unused,6483 .unused,
...@@ -6499,26 +6488,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6499,26 +6488,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6499 .clobbers = .{ .eflags = true },6488 .clobbers = .{ .eflags = true },
6500 .each = .{ .once = &.{6489 .each = .{ .once = &.{
6501 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6490 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6502 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },6491 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
6503 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },6492 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
6504 .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },6493 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
6505 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },6494 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
6506 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },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), ._, ._ },
6507 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6508 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6508 } },6509 } },
6509 }, .{6510 }, .{
6511 .required_features = .{ .@"64bit", .x87, null, null },
6510 .src_constraints = .{6512 .src_constraints = .{
6511 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },6513 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6512 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },6514 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6513 },6515 },
6514 .patterns = &.{6516 .patterns = &.{
6515 .{ .src = .{ .to_mem, .to_mem } },6517 .{ .src = .{ .to_mem, .to_mem } },
6516 },6518 },
6517 .extra_temps = .{6519 .extra_temps = .{
6518 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6520 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6519 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },6521 .{ .type = .f80, .kind = .{ .reg = .st6 } },
6520 .unused,6522 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6521 .unused,6523 .{ .type = .u8, .kind = .{ .reg = .ah } },
6522 .unused,6524 .unused,
6523 .unused,6525 .unused,
6524 .unused,6526 .unused,
...@@ -6529,90 +6531,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6529,90 +6531,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6529 .clobbers = .{ .eflags = true },6531 .clobbers = .{ .eflags = true },
6530 .each = .{ .once = &.{6532 .each = .{ .once = &.{
6531 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6533 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6532 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },6534 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
6533 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },6535 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
6534 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },6536 .{ ._, .f_, .xam, ._, ._, ._, ._ },
6535 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },6537 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
6536 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },6538 .{ ._, ._, .@"test", .tmp3b, .si(0b0_1_000_100), ._, ._ },
6537 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },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), ._, ._ },
6538 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6551 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6539 } },6552 } },
6540 }, .{6553 }, .{
6541 .required_features = .{ .avx, null, null, null },6554 .required_features = .{ .x87, 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 },
6604 .src_constraints = .{6555 .src_constraints = .{
6605 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },6556 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6606 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },6557 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
6607 },6558 },
6608 .patterns = &.{6559 .patterns = &.{
6609 .{ .src = .{ .to_mem, .to_mem } },6560 .{ .src = .{ .to_mem, .to_mem } },
6610 },6561 },
6611 .extra_temps = .{6562 .extra_temps = .{
6612 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6563 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6613 .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },6564 .{ .type = .f80, .kind = .{ .reg = .st6 } },
6614 .unused,6565 .{ .type = .f80, .kind = .{ .reg = .st7 } },
6615 .unused,6566 .{ .type = .u8, .kind = .{ .reg = .ah } },
6616 .unused,6567 .unused,
6617 .unused,6568 .unused,
6618 .unused,6569 .unused,
...@@ -6623,24 +6574,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6623,24 +6574,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6623 .clobbers = .{ .eflags = true },6574 .clobbers = .{ .eflags = true },
6624 .each = .{ .once = &.{6575 .each = .{ .once = &.{
6625 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6576 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6626 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },6577 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
6627 .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },6578 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
6628 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },6579 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
6629 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },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), ._, ._ },
6630 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6594 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6631 } },6595 } },
6632 }, .{6596 }, .{
6633 .required_features = .{ .avx, null, null, null },6597 .required_features = .{ .sse, null, null, null },
6634 .src_constraints = .{6598 .src_constraints = .{
6635 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },6599 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
6636 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },6600 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
6637 },6601 },
6638 .patterns = &.{6602 .patterns = &.{
6639 .{ .src = .{ .to_mem, .to_mem } },6603 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
6640 },6604 },
6605 .call_frame = .{ .alignment = .@"16" },
6641 .extra_temps = .{6606 .extra_temps = .{
6642 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6607 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
6643 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },6608 .unused,
6644 .unused,6609 .unused,
6645 .unused,6610 .unused,
6646 .unused,6611 .unused,
...@@ -6649,30 +6614,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6649,30 +6614,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6649 .unused,6614 .unused,
6650 .unused,6615 .unused,
6651 },6616 },
6652 .dst_temps = .{.mem},6617 .dst_temps = .{.{ .ref = .src0 }},
6653 .clobbers = .{ .eflags = true },6618 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6654 .each = .{ .once = &.{6619 .each = .{ .once = &.{
6655 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6620 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
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", ._, ._, ._ },
6661 } },6621 } },
6662 }, .{6622 }, .{
6663 .required_features = .{ .sse4_1, null, null, null },6623 .required_features = .{ .avx, null, null, null },
6664 .src_constraints = .{6624 .src_constraints = .{
6665 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },6625 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6666 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },6626 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6667 },6627 },
6668 .patterns = &.{6628 .patterns = &.{
6669 .{ .src = .{ .to_mem, .to_mem } },6629 .{ .src = .{ .to_mem, .to_mem } },
6670 },6630 },
6631 .call_frame = .{ .alignment = .@"16" },
6671 .extra_temps = .{6632 .extra_temps = .{
6672 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6633 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6673 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },6634 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
6674 .unused,6635 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
6675 .unused,6636 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
6676 .unused,6637 .unused,
6677 .unused,6638 .unused,
6678 .unused,6639 .unused,
...@@ -6680,29 +6641,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6680,29 +6641,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6680 .unused,6641 .unused,
6681 },6642 },
6682 .dst_temps = .{.mem},6643 .dst_temps = .{.mem},
6683 .clobbers = .{ .eflags = true },6644 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6684 .each = .{ .once = &.{6645 .each = .{ .once = &.{
6685 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6646 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6686 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6647 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6687 .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6648 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6688 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },6649 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6689 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },6650 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6651 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
6690 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6652 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6691 } },6653 } },
6692 }, .{6654 }, .{
6693 .required_features = .{ .sse2, null, null, null },6655 .required_features = .{ .sse2, null, null, null },
6694 .src_constraints = .{6656 .src_constraints = .{
6695 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },6657 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6696 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },6658 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6697 },6659 },
6698 .patterns = &.{6660 .patterns = &.{
6699 .{ .src = .{ .to_mem, .to_mem } },6661 .{ .src = .{ .to_mem, .to_mem } },
6700 },6662 },
6663 .call_frame = .{ .alignment = .@"16" },
6701 .extra_temps = .{6664 .extra_temps = .{
6702 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6665 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6703 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },6666 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
6704 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },6667 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
6705 .unused,6668 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
6706 .unused,6669 .unused,
6707 .unused,6670 .unused,
6708 .unused,6671 .unused,
...@@ -6710,31 +6673,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6710,31 +6673,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6710 .unused,6673 .unused,
6711 },6674 },
6712 .dst_temps = .{.mem},6675 .dst_temps = .{.mem},
6713 .clobbers = .{ .eflags = true },6676 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6714 .each = .{ .once = &.{6677 .each = .{ .once = &.{
6715 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6678 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6716 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6679 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6717 .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },6680 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6718 .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6681 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6719 .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ },6682 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6720 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },6683 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
6721 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6722 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6684 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6723 } },6685 } },
6724 }, .{6686 }, .{
6725 .required_features = .{ .cmov, null, null, null },6687 .required_features = .{ .sse, null, null, null },
6726 .src_constraints = .{6688 .src_constraints = .{
6727 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },6689 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6728 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },6690 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
6729 },6691 },
6730 .patterns = &.{6692 .patterns = &.{
6731 .{ .src = .{ .to_mem, .to_mem } },6693 .{ .src = .{ .to_mem, .to_mem } },
6732 },6694 },
6695 .call_frame = .{ .alignment = .@"16" },
6733 .extra_temps = .{6696 .extra_temps = .{
6734 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },6697 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6735 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },6698 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
6736 .unused,6699 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
6737 .unused,6700 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
6738 .unused,6701 .unused,
6739 .unused,6702 .unused,
6740 .unused,6703 .unused,
...@@ -6742,19 +6705,1411 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6742,19 +6705,1411 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6742 .unused,6705 .unused,
6743 },6706 },
6744 .dst_temps = .{.mem},6707 .dst_temps = .{.mem},
6745 .clobbers = .{ .eflags = true },6708 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6746 .each = .{ .once = &.{6709 .each = .{ .once = &.{
6747 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },6710 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6748 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },6711 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6749 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },6712 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6750 .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },6713 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6751 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },6714 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6752 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },6715 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
6753 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6716 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6754 } },6717 } },
6755 }, .{6718 } }) catch |err| switch (err) {
6756 .src_constraints = .{6719 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
6757 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },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 } },
6758 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },8113 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
6759 },8114 },
6760 .patterns = &.{8115 .patterns = &.{
...@@ -6762,9 +8117,1161 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6762,9 +8117,1161 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6762 },8117 },
6763 .extra_temps = .{8118 .extra_temps = .{
6764 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },8119 .{ .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,
6766 .unused,9241 .unused,
6767 .unused,9242 .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 } },
6768 .unused,9275 .unused,
6769 .unused,9276 .unused,
6770 .unused,9277 .unused,
...@@ -6775,92 +9282,155 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6775,92 +9282,155 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6775 .clobbers = .{ .eflags = true },9282 .clobbers = .{ .eflags = true },
6776 .each = .{ .once = &.{9283 .each = .{ .once = &.{
6777 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9284 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6778 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },9285 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
6779 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },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), ._, ._ },
6780 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },9293 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
6781 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },9294 .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
6782 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },9295 .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
6783 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },9296 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
6784 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9297 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
9298 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
9299 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6785 } },9300 } },
6786 }, .{9301 }, .{
6787 .required_features = .{ .avx, null, null, null },9302 .required_features = .{ .f16c, null, null, null },
6788 .src_constraints = .{9303 .src_constraints = .{
6789 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },9304 .{ .scalar_float = .{ .of = .word, .is = .word } },
6790 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },9305 .{ .scalar_float = .{ .of = .word, .is = .word } },
6791 },9306 },
6792 .patterns = &.{9307 .patterns = &.{
6793 .{ .src = .{ .to_sse, .mem } },
6794 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6795 .{ .src = .{ .to_sse, .to_sse } },9308 .{ .src = .{ .to_sse, .to_sse } },
6796 },9309 },
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 } }},
6798 .each = .{ .once = &.{9322 .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(.{}), ._ },
6800 } },9329 } },
6801 }, .{9330 }, .{
6802 .required_features = .{ .sse4_1, null, null, null },9331 .required_features = .{ .sse, null, null, null },
6803 .src_constraints = .{9332 .src_constraints = .{
6804 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },9333 .{ .scalar_float = .{ .of = .word, .is = .word } },
6805 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },9334 .{ .scalar_float = .{ .of = .word, .is = .word } },
6806 },9335 },
6807 .patterns = &.{9336 .patterns = &.{
6808 .{ .src = .{ .to_mut_sse, .mem } },9337 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
6809 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },9338 },
6810 .{ .src = .{ .to_mut_sse, .to_sse } },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,
6811 },9350 },
6812 .dst_temps = .{.{ .ref = .src0 }},9351 .dst_temps = .{.{ .ref = .src0 }},
9352 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6813 .each = .{ .once = &.{9353 .each = .{ .once = &.{
6814 .{ ._, .p_d, .mins, .dst0x, .src1x, ._, ._ },9354 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
6815 } },9355 } },
6816 }, .{9356 }, .{
6817 .required_features = .{ .sse2, null, null, null },9357 .required_features = .{ .f16c, null, null, null },
6818 .src_constraints = .{9358 .src_constraints = .{
6819 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },9359 .{ .scalar_float = .{ .of = .qword, .is = .word } },
6820 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },9360 .{ .scalar_float = .{ .of = .qword, .is = .word } },
6821 },9361 },
6822 .patterns = &.{9362 .patterns = &.{
6823 .{ .src = .{ .to_mut_sse, .mem } },9363 .{ .src = .{ .mem, .mem } },
6824 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },9364 .{ .src = .{ .to_sse, .mem } },
6825 .{ .src = .{ .to_mut_sse, .to_sse } },9365 .{ .src = .{ .mem, .to_sse } },
9366 .{ .src = .{ .to_sse, .to_sse } },
6826 },9367 },
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 } }},
6828 .each = .{ .once = &.{9380 .each = .{ .once = &.{
6829 .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ },9381 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
6830 .{ ._, .p_d, .cmpgt, .dst0x, .src0x, ._, ._ },9382 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
6831 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },9383 .{ ._, .v_ps, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) },
6832 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },9384 .{ ._, .v_ps, .min, .dst0x, .tmp0x, .dst0x, ._ },
6833 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },9385 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x },
9386 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
6834 } },9387 } },
6835 }, .{9388 }, .{
6836 .required_features = .{ .avx2, null, null, null },9389 .required_features = .{ .f16c, null, null, null },
6837 .src_constraints = .{9390 .src_constraints = .{
6838 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },9391 .{ .scalar_float = .{ .of = .xword, .is = .word } },
6839 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },9392 .{ .scalar_float = .{ .of = .xword, .is = .word } },
6840 },9393 },
6841 .patterns = &.{9394 .patterns = &.{
9395 .{ .src = .{ .mem, .mem } },
6842 .{ .src = .{ .to_sse, .mem } },9396 .{ .src = .{ .to_sse, .mem } },
6843 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },9397 .{ .src = .{ .mem, .to_sse } },
6844 .{ .src = .{ .to_sse, .to_sse } },9398 .{ .src = .{ .to_sse, .to_sse } },
6845 },9399 },
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 } }},
6847 .each = .{ .once = &.{9412 .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(.{}), ._ },
6849 } },9419 } },
6850 }, .{9420 }, .{
6851 .required_features = .{ .avx2, null, null, null },9421 .required_features = .{ .f16c, null, null, null },
6852 .src_constraints = .{9422 .src_constraints = .{
6853 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },9423 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
6854 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },9424 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
6855 },9425 },
6856 .patterns = &.{9426 .patterns = &.{
6857 .{ .src = .{ .to_mem, .to_mem } },9427 .{ .src = .{ .to_mem, .to_mem } },
6858 },9428 },
6859 .extra_temps = .{9429 .extra_temps = .{
6860 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9430 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6861 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },9431 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
6862 .unused,9432 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
6863 .unused,9433 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
6864 .unused,9434 .unused,
6865 .unused,9435 .unused,
6866 .unused,9436 .unused,
...@@ -6871,26 +9441,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6871,26 +9441,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6871 .clobbers = .{ .eflags = true },9441 .clobbers = .{ .eflags = true },
6872 .each = .{ .once = &.{9442 .each = .{ .once = &.{
6873 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9443 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6874 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },9444 .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6875 .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },9445 .{ ._, .v_ps, .cvtph2, .tmp2y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6876 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },9446 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
6877 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },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), ._, ._ },
6878 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9451 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6879 } },9452 } },
6880 }, .{9453 }, .{
6881 .required_features = .{ .avx, null, null, null },9454 .required_features = .{ .avx, null, null, null },
6882 .src_constraints = .{9455 .src_constraints = .{
6883 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },9456 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
6884 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },9457 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
6885 },9458 },
6886 .patterns = &.{9459 .patterns = &.{
6887 .{ .src = .{ .to_mem, .to_mem } },9460 .{ .src = .{ .to_mem, .to_mem } },
6888 },9461 },
9462 .call_frame = .{ .alignment = .@"16" },
6889 .extra_temps = .{9463 .extra_temps = .{
6890 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9464 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6891 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },9465 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
6892 .unused,9466 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
6893 .unused,9467 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
6894 .unused,9468 .unused,
6895 .unused,9469 .unused,
6896 .unused,9470 .unused,
...@@ -6898,29 +9472,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6898,29 +9472,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6898 .unused,9472 .unused,
6899 },9473 },
6900 .dst_temps = .{.mem},9474 .dst_temps = .{.mem},
6901 .clobbers = .{ .eflags = true },9475 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6902 .each = .{ .once = &.{9476 .each = .{ .once = &.{
6903 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9477 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6904 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9478 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
6905 .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },9479 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
6906 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },9480 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
6907 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },9481 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9482 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
9483 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
6908 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9484 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6909 } },9485 } },
6910 }, .{9486 }, .{
6911 .required_features = .{ .sse4_1, null, null, null },9487 .required_features = .{ .sse4_1, null, null, null },
6912 .src_constraints = .{9488 .src_constraints = .{
6913 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },9489 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
6914 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },9490 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
6915 },9491 },
6916 .patterns = &.{9492 .patterns = &.{
6917 .{ .src = .{ .to_mem, .to_mem } },9493 .{ .src = .{ .to_mem, .to_mem } },
6918 },9494 },
9495 .call_frame = .{ .alignment = .@"16" },
6919 .extra_temps = .{9496 .extra_temps = .{
6920 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9497 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6921 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },9498 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
6922 .unused,9499 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
6923 .unused,9500 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
6924 .unused,9501 .unused,
6925 .unused,9502 .unused,
6926 .unused,9503 .unused,
...@@ -6928,91 +9505,103 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6928,91 +9505,103 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6928 .unused,9505 .unused,
6929 },9506 },
6930 .dst_temps = .{.mem},9507 .dst_temps = .{.mem},
6931 .clobbers = .{ .eflags = true },9508 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6932 .each = .{ .once = &.{9509 .each = .{ .once = &.{
6933 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9510 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6934 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9511 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
6935 .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },9512 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
6936 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },9513 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
6937 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },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), ._, ._ },
6938 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9518 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6939 } },9519 } },
6940 }, .{9520 }, .{
6941 .required_features = .{ .sse2, null, null, null },9521 .required_features = .{ .sse2, null, null, null },
6942 .src_constraints = .{9522 .src_constraints = .{
6943 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },9523 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
6944 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },9524 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
6945 },9525 },
6946 .patterns = &.{9526 .patterns = &.{
6947 .{ .src = .{ .to_mem, .to_mem } },9527 .{ .src = .{ .to_mem, .to_mem } },
6948 },9528 },
9529 .call_frame = .{ .alignment = .@"16" },
6949 .extra_temps = .{9530 .extra_temps = .{
6950 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9531 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6951 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },9532 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
6952 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },9533 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
6953 .unused,9534 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
6954 .unused,9535 .{ .type = .f16, .kind = .{ .reg = .ax } },
6955 .unused,9536 .unused,
6956 .unused,9537 .unused,
6957 .unused,9538 .unused,
6958 .unused,9539 .unused,
6959 },9540 },
6960 .dst_temps = .{.mem},9541 .dst_temps = .{.mem},
6961 .clobbers = .{ .eflags = true },9542 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6962 .each = .{ .once = &.{9543 .each = .{ .once = &.{
6963 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9544 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6964 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9545 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
6965 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },9546 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
6966 .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ },9547 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
6967 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },9548 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
6968 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9549 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6969 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },9550 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
6970 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },9551 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
6971 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },9552 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
6972 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9553 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6973 } },9554 } },
6974 }, .{9555 }, .{
6975 .required_features = .{ .cmov, null, null, null },9556 .required_features = .{ .sse, null, null, null },
6976 .src_constraints = .{9557 .src_constraints = .{
6977 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },9558 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
6978 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },9559 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
6979 },9560 },
6980 .patterns = &.{9561 .patterns = &.{
6981 .{ .src = .{ .to_mem, .to_mem } },9562 .{ .src = .{ .to_mem, .to_mem } },
6982 },9563 },
9564 .call_frame = .{ .alignment = .@"16" },
6983 .extra_temps = .{9565 .extra_temps = .{
6984 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9566 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6985 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },9567 .{ .type = .f16, .kind = .{ .reg = .eax } },
6986 .unused,9568 .{ .type = .f32, .kind = .mem },
6987 .unused,9569 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
6988 .unused,9570 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
6989 .unused,9571 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
6990 .unused,9572 .unused,
6991 .unused,9573 .unused,
6992 .unused,9574 .unused,
6993 },9575 },
6994 .dst_temps = .{.mem},9576 .dst_temps = .{.mem},
6995 .clobbers = .{ .eflags = true },9577 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6996 .each = .{ .once = &.{9578 .each = .{ .once = &.{
6997 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9579 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6998 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },9580 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6999 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },9581 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
7000 .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },9582 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
7001 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },9583 .{ ._, ._, .movzx, .tmp1d, .memia(.src1w, .tmp0, .add_size), ._, ._ },
7002 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },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), ._, ._ },
7003 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9591 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7004 } },9592 } },
7005 }, .{9593 }, .{
9594 .required_features = .{ .avx, null, null, null },
7006 .src_constraints = .{9595 .src_constraints = .{
7007 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },9596 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
7008 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },9597 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
7009 },9598 },
7010 .patterns = &.{9599 .patterns = &.{
7011 .{ .src = .{ .to_mem, .to_mem } },9600 .{ .src = .{ .to_sse, .to_sse } },
7012 },9601 },
7013 .extra_temps = .{9602 .extra_temps = .{
7014 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9603 .{ .type = .f32, .kind = .{ .rc = .sse } },
7015 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },9604 .unused,
7016 .unused,9605 .unused,
7017 .unused,9606 .unused,
7018 .unused,9607 .unused,
...@@ -7021,63 +9610,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7021,63 +9610,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7021 .unused,9610 .unused,
7022 .unused,9611 .unused,
7023 },9612 },
7024 .dst_temps = .{.mem},9613 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
7025 .clobbers = .{ .eflags = true },
7026 .each = .{ .once = &.{9614 .each = .{ .once = &.{
7027 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9615 .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
7028 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },9616 .{ ._, .v_ss, .min, .dst0x, .src1x, .src0x, ._ },
7029 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },9617 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
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", ._, ._, ._ },
7035 } },9618 } },
7036 }, .{9619 }, .{
7037 .required_features = .{ .avx, null, null, null },9620 .required_features = .{ .sse4_1, null, null, null },
7038 .src_constraints = .{9621 .src_constraints = .{
7039 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9622 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
7040 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9623 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
7041 },9624 },
7042 .patterns = &.{9625 .patterns = &.{
7043 .{ .src = .{ .to_sse, .mem } },9626 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
7044 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7045 .{ .src = .{ .to_sse, .to_sse } },
7046 },9627 },
7047 .dst_temps = .{.{ .rc = .sse }},9628 .dst_temps = .{.{ .rc = .sse }},
7048 .each = .{ .once = &.{9629 .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, ._ },
7050 } },9634 } },
7051 }, .{9635 }, .{
7052 .required_features = .{ .sse4_1, null, null, null },9636 .required_features = .{ .sse, null, null, null },
7053 .src_constraints = .{9637 .src_constraints = .{
7054 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9638 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
7055 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9639 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
7056 },9640 },
7057 .patterns = &.{9641 .patterns = &.{
7058 .{ .src = .{ .to_mut_sse, .mem } },
7059 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7060 .{ .src = .{ .to_mut_sse, .to_sse } },9642 .{ .src = .{ .to_mut_sse, .to_sse } },
7061 },9643 },
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 },
7062 .dst_temps = .{.{ .ref = .src0 }},9655 .dst_temps = .{.{ .ref = .src0 }},
7063 .each = .{ .once = &.{9656 .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, ._, ._ },
7065 } },9663 } },
7066 }, .{9664 }, .{
7067 .required_features = .{ .sse2, null, null, null },9665 .required_features = .{ .avx, null, null, null },
7068 .src_constraints = .{9666 .src_constraints = .{
7069 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9667 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
7070 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9668 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
7071 },9669 },
7072 .patterns = &.{9670 .patterns = &.{
7073 .{ .src = .{ .to_mut_sse, .mem } },9671 .{ .src = .{ .to_sse, .to_sse } },
7074 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7075 .{ .src = .{ .to_mut_sse, .to_sse } },
7076 },9672 },
7077 .extra_temps = .{9673 .extra_temps = .{
7078 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },9674 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
7079 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },9675 .unused,
7080 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },9676 .unused,
7081 .unused,9677 .unused,
7082 .unused,9678 .unused,
7083 .unused,9679 .unused,
...@@ -7085,45 +9681,44 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7085,45 +9681,44 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7085 .unused,9681 .unused,
7086 .unused,9682 .unused,
7087 },9683 },
7088 .dst_temps = .{.{ .rc = .sse }},9684 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
7089 .each = .{ .once = &.{9685 .each = .{ .once = &.{
7090 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },9686 .{ ._, .v_ps, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
7091 .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ },9687 .{ ._, .v_ps, .min, .dst0x, .src1x, .src0x, ._ },
7092 .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },9688 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
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, ._, ._ },
7099 } },9689 } },
7100 }, .{9690 }, .{
7101 .required_features = .{ .avx2, null, null, null },9691 .required_features = .{ .sse4_1, null, null, null },
7102 .src_constraints = .{9692 .src_constraints = .{
7103 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },9693 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
7104 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },9694 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
7105 },9695 },
7106 .patterns = &.{9696 .patterns = &.{
7107 .{ .src = .{ .to_sse, .mem } },9697 .{ .src = .{ .{ .to_reg = .xmm0 }, .mem } },
7108 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },9698 .{ .src = .{ .mem, .{ .to_reg = .xmm0 } }, .commute = .{ 0, 1 } },
7109 .{ .src = .{ .to_sse, .to_sse } },9699 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
7110 },9700 },
7111 .dst_temps = .{.{ .rc = .sse }},9701 .dst_temps = .{.{ .rc = .sse }},
7112 .each = .{ .once = &.{9702 .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, ._ },
7114 } },9707 } },
7115 }, .{9708 }, .{
7116 .required_features = .{ .avx2, null, null, null },9709 .required_features = .{ .sse, null, null, null },
7117 .src_constraints = .{9710 .src_constraints = .{
7118 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },9711 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
7119 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },9712 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
7120 },9713 },
7121 .patterns = &.{9714 .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 } },
7123 },9718 },
7124 .extra_temps = .{9719 .extra_temps = .{
7125 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9720 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
7126 .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },9721 .unused,
7127 .unused,9722 .unused,
7128 .unused,9723 .unused,
7129 .unused,9724 .unused,
...@@ -7132,28 +9727,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7132,28 +9727,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7132 .unused,9727 .unused,
7133 .unused,9728 .unused,
7134 },9729 },
7135 .dst_temps = .{.mem},9730 .dst_temps = .{.{ .ref = .src0 }},
7136 .clobbers = .{ .eflags = true },
7137 .each = .{ .once = &.{9731 .each = .{ .once = &.{
7138 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9732 .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ },
7139 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },9733 .{ ._, ._ps, .min, .tmp0x, .src0x, ._, ._ },
7140 .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },9734 .{ ._, ._ps, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
7141 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },9735 .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ },
7142 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },9736 .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ },
7143 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9737 .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
7144 } },9738 } },
7145 }, .{9739 }, .{
7146 .required_features = .{ .avx, null, null, null },9740 .required_features = .{ .avx, null, null, null },
7147 .src_constraints = .{9741 .src_constraints = .{
7148 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9742 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
7149 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9743 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
7150 },9744 },
7151 .patterns = &.{9745 .patterns = &.{
7152 .{ .src = .{ .to_mem, .to_mem } },9746 .{ .src = .{ .to_sse, .to_sse } },
7153 },9747 },
7154 .extra_temps = .{9748 .extra_temps = .{
7155 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9749 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
7156 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },9750 .unused,
7157 .unused,9751 .unused,
7158 .unused,9752 .unused,
7159 .unused,9753 .unused,
...@@ -7162,30 +9756,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7162,30 +9756,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7162 .unused,9756 .unused,
7163 .unused,9757 .unused,
7164 },9758 },
7165 .dst_temps = .{.mem},9759 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
7166 .clobbers = .{ .eflags = true },
7167 .each = .{ .once = &.{9760 .each = .{ .once = &.{
7168 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9761 .{ ._, .v_ps, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) },
7169 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9762 .{ ._, .v_ps, .min, .dst0y, .src1y, .src0y, ._ },
7170 .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },9763 .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .src1y, .tmp0y },
7171 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7172 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7173 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7174 } },9764 } },
7175 }, .{9765 }, .{
7176 .required_features = .{ .sse4_1, null, null, null },9766 .required_features = .{ .avx, null, null, null },
7177 .src_constraints = .{9767 .src_constraints = .{
7178 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9768 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
7179 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9769 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
7180 },9770 },
7181 .patterns = &.{9771 .patterns = &.{
7182 .{ .src = .{ .to_mem, .to_mem } },9772 .{ .src = .{ .to_mem, .to_mem } },
7183 },9773 },
7184 .extra_temps = .{9774 .extra_temps = .{
7185 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9775 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7186 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },9776 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
7187 .unused,9777 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
7188 .unused,9778 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
7189 .unused,9779 .unused,
7190 .unused,9780 .unused,
7191 .unused,9781 .unused,
...@@ -7195,67 +9785,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7195,67 +9785,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7195 .dst_temps = .{.mem},9785 .dst_temps = .{.mem},
7196 .clobbers = .{ .eflags = true },9786 .clobbers = .{ .eflags = true },
7197 .each = .{ .once = &.{9787 .each = .{ .once = &.{
7198 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9788 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7199 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9789 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7200 .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },9790 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
7201 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },9791 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
7202 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },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), ._, ._ },
7203 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9796 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7204 } },9797 } },
7205 }, .{9798 }, .{
7206 .required_features = .{ .sse2, null, null, null },9799 .required_features = .{ .sse4_1, null, null, null },
7207 .src_constraints = .{9800 .src_constraints = .{
7208 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9801 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
7209 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },9802 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
7210 },9803 },
7211 .patterns = &.{9804 .patterns = &.{
7212 .{ .src = .{ .to_mem, .to_mem } },9805 .{ .src = .{ .to_mem, .to_mem } },
7213 },9806 },
7214 .extra_temps = .{9807 .extra_temps = .{
7215 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9808 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7216 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },9809 .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
7217 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },9810 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
7218 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },9811 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
7219 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },9812 .unused,
7220 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },9813 .unused,
7221 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },9814 .unused,
7222 .unused,9815 .unused,
7223 .unused,9816 .unused,
7224 },9817 },
7225 .dst_temps = .{.mem},9818 .dst_temps = .{.mem},
7226 .clobbers = .{ .eflags = true },9819 .clobbers = .{ .eflags = true },
7227 .each = .{ .once = &.{9820 .each = .{ .once = &.{
7228 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },9821 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7229 .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ },9822 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7230 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9823 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7231 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9824 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
7232 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },9825 .{ ._, ._ps, .min, .tmp3x, .tmp1x, ._, ._ },
7233 .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },9826 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
7234 .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ },9827 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
7235 .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ },9828 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
7236 .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ },9829 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
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), ._, ._ },
7243 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9830 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7244 } },9831 } },
7245 }, .{9832 }, .{
7246 .required_features = .{ .cmov, null, null, null },9833 .required_features = .{ .sse, null, null, null },
7247 .src_constraints = .{9834 .src_constraints = .{
7248 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },9835 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
7249 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },9836 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
7250 },9837 },
7251 .patterns = &.{9838 .patterns = &.{
7252 .{ .src = .{ .to_mem, .to_mem } },9839 .{ .src = .{ .to_mem, .to_mem } },
7253 },9840 },
7254 .extra_temps = .{9841 .extra_temps = .{
7255 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9842 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7256 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },9843 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
7257 .unused,9844 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
7258 .unused,9845 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
7259 .unused,9846 .unused,
7260 .unused,9847 .unused,
7261 .unused,9848 .unused,
...@@ -7265,25 +9852,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7265,25 +9852,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7265 .dst_temps = .{.mem},9852 .dst_temps = .{.mem},
7266 .clobbers = .{ .eflags = true },9853 .clobbers = .{ .eflags = true },
7267 .each = .{ .once = &.{9854 .each = .{ .once = &.{
7268 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9855 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7269 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },9856 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7270 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },9857 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7271 .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },9858 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
7272 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },9859 .{ ._, ._ps, .min, .tmp3x, .tmp1x, ._, ._ },
7273 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },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), ._, ._ },
7274 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9866 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7275 } },9867 } },
7276 }, .{9868 }, .{
9869 .required_features = .{ .avx, null, null, null },
7277 .src_constraints = .{9870 .src_constraints = .{
7278 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },9871 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
7279 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },9872 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
7280 },9873 },
7281 .patterns = &.{9874 .patterns = &.{
7282 .{ .src = .{ .to_mem, .to_mem } },9875 .{ .src = .{ .to_sse, .to_sse } },
7283 },9876 },
7284 .extra_temps = .{9877 .extra_temps = .{
7285 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9878 .{ .type = .f64, .kind = .{ .rc = .sse } },
7286 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },9879 .unused,
7287 .unused,9880 .unused,
7288 .unused,9881 .unused,
7289 .unused,9882 .unused,
...@@ -7292,47 +9885,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7292,47 +9885,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7292 .unused,9885 .unused,
7293 .unused,9886 .unused,
7294 },9887 },
7295 .dst_temps = .{.mem},9888 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
7296 .clobbers = .{ .eflags = true },
7297 .each = .{ .once = &.{9889 .each = .{ .once = &.{
7298 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },9890 .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
7299 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },9891 .{ ._, .v_sd, .min, .dst0x, .src1x, .src0x, ._ },
7300 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },9892 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
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", ._, ._, ._ },
7306 } },9893 } },
7307 }, .{9894 }, .{
7308 .required_features = .{ .avx, null, null, null },9895 .required_features = .{ .sse4_1, null, null, null },
7309 .src_constraints = .{9896 .src_constraints = .{
7310 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },9897 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
7311 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },9898 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
7312 },9899 },
7313 .patterns = &.{9900 .patterns = &.{
7314 .{ .src = .{ .to_sse, .mem } },9901 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
7315 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7316 .{ .src = .{ .to_sse, .to_sse } },
7317 },9902 },
7318 .dst_temps = .{.{ .rc = .sse }},9903 .dst_temps = .{.{ .rc = .sse }},
7319 .each = .{ .once = &.{9904 .each = .{ .once = &.{
7320 .{ ._, .vp_q, .cmpgt, .dst0x, .src0x, .src1x, ._ },9905 .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ },
7321 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },9906 .{ ._, ._sd, .min, .dst0x, .src0x, ._, ._ },
9907 .{ ._, ._sd, .cmp, .src0x, .src0x, .vp(.unord), ._ },
9908 .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ },
7322 } },9909 } },
7323 }, .{9910 }, .{
7324 .required_features = .{ .sse4_2, null, null, null },9911 .required_features = .{ .sse2, null, null, null },
7325 .src_constraints = .{9912 .src_constraints = .{
7326 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },9913 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
7327 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },9914 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
7328 },9915 },
7329 .patterns = &.{9916 .patterns = &.{
7330 .{ .src = .{ .to_mut_sse, .mem } },
7331 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7332 .{ .src = .{ .to_mut_sse, .to_sse } },9917 .{ .src = .{ .to_mut_sse, .to_sse } },
7333 },9918 },
7334 .extra_temps = .{9919 .extra_temps = .{
7335 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },9920 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
7336 .unused,9921 .unused,
7337 .unused,9922 .unused,
7338 .unused,9923 .unused,
...@@ -7344,72 +9929,154 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7344,72 +9929,154 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7344 },9929 },
7345 .dst_temps = .{.{ .ref = .src0 }},9930 .dst_temps = .{.{ .ref = .src0 }},
7346 .each = .{ .once = &.{9931 .each = .{ .once = &.{
7347 .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },9932 .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ },
7348 .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ },9933 .{ ._, ._sd, .min, .tmp0x, .src0x, ._, ._ },
7349 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ },9934 .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
9935 .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ },
9936 .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ },
9937 .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
7350 } },9938 } },
7351 }, .{9939 }, .{
7352 .required_features = .{ .avx2, null, null, null },9940 .required_features = .{ .sse, null, null, null },
7353 .src_constraints = .{9941 .src_constraints = .{
7354 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },9942 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
7355 .{ .scalar_signed_int = .{ .of = .yword, .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 } },
7356 },9970 },
7357 .patterns = &.{9971 .patterns = &.{
7358 .{ .src = .{ .to_sse, .mem } },
7359 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7360 .{ .src = .{ .to_sse, .to_sse } },9972 .{ .src = .{ .to_sse, .to_sse } },
7361 },9973 },
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 },
7362 .dst_temps = .{.{ .rc = .sse }},10002 .dst_temps = .{.{ .rc = .sse }},
7363 .each = .{ .once = &.{10003 .each = .{ .once = &.{
7364 .{ ._, .vp_q, .cmpgt, .dst0y, .src0y, .src1y, ._ },10004 .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ },
7365 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },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, ._, ._ },
7366 } },10039 } },
7367 }, .{10040 }, .{
7368 .required_features = .{ .avx2, null, null, null },10041 .required_features = .{ .avx, null, null, null },
7369 .src_constraints = .{10042 .src_constraints = .{
7370 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },10043 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
7371 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },10044 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
7372 },10045 },
7373 .patterns = &.{10046 .patterns = &.{
7374 .{ .src = .{ .to_mem, .to_mem } },10047 .{ .src = .{ .to_sse, .to_sse } },
7375 },10048 },
7376 .extra_temps = .{10049 .extra_temps = .{
7377 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10050 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
7378 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },10051 .unused,
7379 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },10052 .unused,
7380 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },10053 .unused,
7381 .unused,10054 .unused,
7382 .unused,10055 .unused,
7383 .unused,10056 .unused,
7384 .unused,10057 .unused,
7385 .unused,10058 .unused,
7386 },10059 },
7387 .dst_temps = .{.mem},10060 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
7388 .clobbers = .{ .eflags = true },
7389 .each = .{ .once = &.{10061 .each = .{ .once = &.{
7390 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10062 .{ ._, .v_pd, .cmp, .tmp0y, .src0y, .src0y, .vp(.unord) },
7391 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },10063 .{ ._, .v_pd, .min, .dst0y, .src1y, .src0y, ._ },
7392 .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },10064 .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .src1y, .tmp0y },
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", ._, ._, ._ },
7398 } },10065 } },
7399 }, .{10066 }, .{
7400 .required_features = .{ .avx, null, null, null },10067 .required_features = .{ .avx, null, null, null },
7401 .src_constraints = .{10068 .src_constraints = .{
7402 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },10069 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
7403 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },10070 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
7404 },10071 },
7405 .patterns = &.{10072 .patterns = &.{
7406 .{ .src = .{ .to_mem, .to_mem } },10073 .{ .src = .{ .to_mem, .to_mem } },
7407 },10074 },
7408 .extra_temps = .{10075 .extra_temps = .{
7409 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10076 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7410 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },10077 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
7411 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },10078 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
7412 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },10079 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
7413 .unused,10080 .unused,
7414 .unused,10081 .unused,
7415 .unused,10082 .unused,
...@@ -7419,29 +10086,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7419,29 +10086,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7419 .dst_temps = .{.mem},10086 .dst_temps = .{.mem},
7420 .clobbers = .{ .eflags = true },10087 .clobbers = .{ .eflags = true },
7421 .each = .{ .once = &.{10088 .each = .{ .once = &.{
7422 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10089 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7423 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10090 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7424 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10091 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
7425 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ },10092 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
7426 .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x },10093 .{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
7427 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },10094 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
7428 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },10095 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
10096 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
7429 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10097 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7430 } },10098 } },
7431 }, .{10099 }, .{
7432 .required_features = .{ .sse4_2, null, null, null },10100 .required_features = .{ .sse4_1, null, null, null },
7433 .src_constraints = .{10101 .src_constraints = .{
7434 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },10102 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
7435 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },10103 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
7436 },10104 },
7437 .patterns = &.{10105 .patterns = &.{
7438 .{ .src = .{ .to_mem, .to_mem } },10106 .{ .src = .{ .to_mem, .to_mem } },
7439 },10107 },
7440 .extra_temps = .{10108 .extra_temps = .{
7441 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10109 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7442 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },10110 .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
7443 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },10111 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
7444 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },10112 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
7445 .unused,10113 .unused,
7446 .unused,10114 .unused,
7447 .unused,10115 .unused,
...@@ -7451,30 +10119,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7451,30 +10119,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7451 .dst_temps = .{.mem},10119 .dst_temps = .{.mem},
7452 .clobbers = .{ .eflags = true },10120 .clobbers = .{ .eflags = true },
7453 .each = .{ .once = &.{10121 .each = .{ .once = &.{
7454 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10122 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7455 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10123 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7456 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10124 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7457 .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ },10125 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
7458 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },10126 .{ ._, ._pd, .min, .tmp3x, .tmp1x, ._, ._ },
7459 .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ },10127 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
7460 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },10128 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
7461 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },10129 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
10130 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
7462 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10131 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7463 } },10132 } },
7464 }, .{10133 }, .{
7465 .required_features = .{ .@"64bit", .cmov, null, null },10134 .required_features = .{ .sse2, null, null, null },
7466 .src_constraints = .{10135 .src_constraints = .{
7467 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },10136 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
7468 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },10137 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
7469 },10138 },
7470 .patterns = &.{10139 .patterns = &.{
7471 .{ .src = .{ .to_mem, .to_mem } },10140 .{ .src = .{ .to_mem, .to_mem } },
7472 },10141 },
7473 .extra_temps = .{10142 .extra_temps = .{
7474 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10143 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7475 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },10144 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
7476 .unused,10145 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
7477 .unused,10146 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
7478 .unused,10147 .unused,
7479 .unused,10148 .unused,
7480 .unused,10149 .unused,
...@@ -7484,28 +10153,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7484,28 +10153,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7484 .dst_temps = .{.mem},10153 .dst_temps = .{.mem},
7485 .clobbers = .{ .eflags = true },10154 .clobbers = .{ .eflags = true },
7486 .each = .{ .once = &.{10155 .each = .{ .once = &.{
7487 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10156 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7488 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },10157 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7489 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10158 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7490 .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10159 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
7491 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },10160 .{ ._, ._pd, .min, .tmp3x, .tmp1x, ._, ._ },
7492 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },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), ._, ._ },
7493 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10167 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7494 } },10168 } },
7495 }, .{10169 }, .{
7496 .required_features = .{ .@"64bit", null, null, null },10170 .required_features = .{ .sse, null, null, null },
7497 .src_constraints = .{10171 .src_constraints = .{
7498 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },10172 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
7499 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },10173 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
7500 },10174 },
7501 .patterns = &.{10175 .patterns = &.{
7502 .{ .src = .{ .to_mem, .to_mem } },10176 .{ .src = .{ .to_mem, .to_mem } },
7503 },10177 },
10178 .call_frame = .{ .alignment = .@"16" },
7504 .extra_temps = .{10179 .extra_temps = .{
7505 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10180 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7506 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },10181 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
7507 .unused,10182 .{ .type = .f64, .kind = .{ .reg = .xmm1 } },
7508 .unused,10183 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } },
7509 .unused,10184 .unused,
7510 .unused,10185 .unused,
7511 .unused,10186 .unused,
...@@ -7513,32 +10188,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7513,32 +10188,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7513 .unused,10188 .unused,
7514 },10189 },
7515 .dst_temps = .{.mem},10190 .dst_temps = .{.mem},
7516 .clobbers = .{ .eflags = true },10191 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
7517 .each = .{ .once = &.{10192 .each = .{ .once = &.{
7518 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10193 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7519 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },10194 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
7520 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10195 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
7521 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },10196 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7522 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10197 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7523 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },10198 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
7524 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },10199 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
10200 .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },
7525 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10201 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7526 } },10202 } },
7527 }, .{10203 }, .{
7528 .required_features = .{ .avx, null, null, null },10204 .required_features = .{ .x87, .cmov, null, null },
7529 .src_constraints = .{10205 .src_constraints = .{
7530 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },10206 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
7531 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },10207 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
7532 },10208 },
7533 .patterns = &.{10209 .patterns = &.{
7534 .{ .src = .{ .to_sse, .mem } },10210 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
7535 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },10211 .{ .src = .{ .mem, .to_x87 } },
7536 .{ .src = .{ .to_sse, .to_sse } },10212 .{ .src = .{ .to_x87, .to_x87 } },
7537 },10213 },
7538 .extra_temps = .{10214 .extra_temps = .{
7539 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },10215 .{ .type = .f80, .kind = .{ .reg = .st7 } },
7540 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },10216 .unused,
7541 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10217 .unused,
7542 .unused,10218 .unused,
7543 .unused,10219 .unused,
7544 .unused,10220 .unused,
...@@ -7546,62 +10222,69 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7546,62 +10222,69 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7546 .unused,10222 .unused,
7547 .unused,10223 .unused,
7548 },10224 },
7549 .dst_temps = .{.{ .rc = .sse }},10225 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
10226 .clobbers = .{ .eflags = true },
7550 .each = .{ .once = &.{10227 .each = .{ .once = &.{
7551 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },10228 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
7552 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },10229 .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ },
7553 .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ },10230 .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ },
7554 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ },10231 .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ },
7555 .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ },10232 .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ },
7556 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },10233 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
7557 } },10234 } },
7558 }, .{10235 }, .{
7559 .required_features = .{ .sse4_2, null, null, null },10236 .required_features = .{ .sahf, .x87, null, null },
7560 .src_constraints = .{10237 .src_constraints = .{
7561 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },10238 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
7562 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },10239 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
7563 },10240 },
7564 .patterns = &.{10241 .patterns = &.{
7565 .{ .src = .{ .to_mut_sse, .mem } },10242 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
7566 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },10243 .{ .src = .{ .mem, .to_x87 } },
7567 .{ .src = .{ .to_mut_sse, .to_sse } },10244 .{ .src = .{ .to_x87, .to_x87 } },
7568 },10245 },
7569 .extra_temps = .{10246 .extra_temps = .{
7570 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },10247 .{ .type = .f80, .kind = .{ .reg = .st7 } },
7571 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },10248 .{ .type = .u8, .kind = .{ .reg = .ah } },
7572 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },10249 .unused,
7573 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10250 .unused,
7574 .unused,10251 .unused,
7575 .unused,10252 .unused,
7576 .unused,10253 .unused,
7577 .unused,10254 .unused,
7578 .unused,10255 .unused,
7579 },10256 },
7580 .dst_temps = .{.{ .ref = .src0 }},10257 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
10258 .clobbers = .{ .eflags = true },
7581 .each = .{ .once = &.{10259 .each = .{ .once = &.{
7582 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },10260 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
7583 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },10261 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
7584 .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },10262 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
7585 .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ },10263 .{ ._, ._, .sahf, ._, ._, ._, ._ },
7586 .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },10264 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
7587 .{ ._, .p_q, .cmpgt, .tmp2x, .tmp3x, ._, ._ },10265 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
7588 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp2x, ._ },10266 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
7589 } },10267 .{ ._, ._, .sahf, ._, ._, ._, ._ },
7590 }, .{10268 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
7591 .required_features = .{ .avx2, null, null, null },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 },
7592 .src_constraints = .{10275 .src_constraints = .{
7593 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },10276 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
7594 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },10277 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
7595 },10278 },
7596 .patterns = &.{10279 .patterns = &.{
7597 .{ .src = .{ .to_sse, .mem } },10280 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
7598 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },10281 .{ .src = .{ .mem, .to_x87 } },
7599 .{ .src = .{ .to_sse, .to_sse } },10282 .{ .src = .{ .to_x87, .to_x87 } },
7600 },10283 },
7601 .extra_temps = .{10284 .extra_temps = .{
7602 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },10285 .{ .type = .f80, .kind = .{ .reg = .st7 } },
7603 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },10286 .{ .type = .u8, .kind = .{ .reg = .ah } },
7604 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },10287 .unused,
7605 .unused,10288 .unused,
7606 .unused,10289 .unused,
7607 .unused,10290 .unused,
...@@ -7609,139 +10292,150 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7609,139 +10292,150 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7609 .unused,10292 .unused,
7610 .unused,10293 .unused,
7611 },10294 },
7612 .dst_temps = .{.{ .rc = .sse }},10295 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
10296 .clobbers = .{ .eflags = true },
7613 .each = .{ .once = &.{10297 .each = .{ .once = &.{
7614 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },10298 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
7615 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },10299 .{ ._, .f_, .xam, ._, ._, ._, ._ },
7616 .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ },10300 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
7617 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ },10301 .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ },
7618 .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ },10302 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
7619 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },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, ._, ._, ._ },
7620 } },10310 } },
7621 }, .{10311 }, .{
7622 .required_features = .{ .avx2, null, null, null },10312 .required_features = .{ .x87, null, null, null },
7623 .src_constraints = .{10313 .src_constraints = .{
7624 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },10314 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
7625 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },10315 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
7626 },10316 },
7627 .patterns = &.{10317 .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 } },
7629 },10321 },
7630 .extra_temps = .{10322 .extra_temps = .{
7631 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10323 .{ .type = .f80, .kind = .{ .reg = .st7 } },
7632 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },10324 .{ .type = .u8, .kind = .{ .reg = .ah } },
7633 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },10325 .unused,
7634 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },10326 .unused,
7635 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },10327 .unused,
7636 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },10328 .unused,
7637 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },10329 .unused,
7638 .unused,10330 .unused,
7639 .unused,10331 .unused,
7640 },10332 },
7641 .dst_temps = .{.mem},10333 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
7642 .clobbers = .{ .eflags = true },10334 .clobbers = .{ .eflags = true },
7643 .each = .{ .once = &.{10335 .each = .{ .once = &.{
7644 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },10336 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
7645 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },10337 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
7646 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10338 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
7647 .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },10339 .{ ._, ._, .sahf, ._, ._, ._, ._ },
7648 .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ },10340 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
7649 .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ },10341 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
7650 .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ },10342 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
7651 .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ },10343 .{ ._, ._, .sahf, ._, ._, ._, ._ },
7652 .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y },10344 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
7653 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },10345 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
7654 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },10346 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
7655 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10347 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
7656 } },10348 } },
7657 }, .{10349 }, .{
7658 .required_features = .{ .avx, null, null, null },10350 .required_features = .{ .x87, .cmov, null, null },
7659 .src_constraints = .{10351 .src_constraints = .{
7660 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },10352 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
7661 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },10353 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
7662 },10354 },
7663 .patterns = &.{10355 .patterns = &.{
7664 .{ .src = .{ .to_mem, .to_mem } },10356 .{ .src = .{ .to_mem, .to_mem } },
7665 },10357 },
7666 .extra_temps = .{10358 .extra_temps = .{
7667 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10359 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7668 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },10360 .{ .type = .f80, .kind = .{ .reg = .st6 } },
7669 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10361 .{ .type = .f80, .kind = .{ .reg = .st7 } },
7670 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10362 .unused,
7671 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10363 .unused,
7672 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10364 .unused,
7673 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10365 .unused,
7674 .unused,10366 .unused,
7675 .unused,10367 .unused,
7676 },10368 },
7677 .dst_temps = .{.mem},10369 .dst_temps = .{.mem},
7678 .clobbers = .{ .eflags = true },10370 .clobbers = .{ .eflags = true },
7679 .each = .{ .once = &.{10371 .each = .{ .once = &.{
7680 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7681 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
7682 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10372 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7683 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10373 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
7684 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10374 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
7685 .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ },10375 .{ ._, .f_, .ucomi, .tmp1t, .tmp1t, ._, ._ },
7686 .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ },10376 .{ ._, .f_u, .cmov, .tmp1t, .tmp2t, ._, ._ },
7687 .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ },10377 .{ ._, .f_, .ucomi, .tmp1t, .tmp2t, ._, ._ },
7688 .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x },10378 .{ ._, .f_nb, .cmov, .tmp1t, .tmp2t, ._, ._ },
7689 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },10379 .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_size), ._, ._, ._ },
10380 .{ ._, .f_p, .st, .tmp2t, ._, ._, ._ },
7690 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },10381 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7691 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10382 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7692 } },10383 } },
7693 }, .{10384 }, .{
7694 .required_features = .{ .sse4_2, null, null, null },10385 .required_features = .{ .sahf, .x87, null, null },
7695 .src_constraints = .{10386 .src_constraints = .{
7696 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },10387 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
7697 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },10388 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
7698 },10389 },
7699 .patterns = &.{10390 .patterns = &.{
7700 .{ .src = .{ .to_mem, .to_mem } },10391 .{ .src = .{ .to_mem, .to_mem } },
7701 },10392 },
7702 .extra_temps = .{10393 .extra_temps = .{
7703 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10394 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7704 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },10395 .{ .type = .f80, .kind = .{ .reg = .st6 } },
7705 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10396 .{ .type = .f80, .kind = .{ .reg = .st7 } },
7706 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10397 .{ .type = .u8, .kind = .{ .reg = .ah } },
7707 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10398 .unused,
7708 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },10399 .unused,
7709 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },10400 .unused,
7710 .unused,10401 .unused,
7711 .unused,10402 .unused,
7712 },10403 },
7713 .dst_temps = .{.mem},10404 .dst_temps = .{.mem},
7714 .clobbers = .{ .eflags = true },10405 .clobbers = .{ .eflags = true },
7715 .each = .{ .once = &.{10406 .each = .{ .once = &.{
7716 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7717 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
7718 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10407 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7719 .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ },10408 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
7720 .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ },10409 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
7721 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10410 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
7722 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10411 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
7723 .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ },10412 .{ ._, ._, .sahf, ._, ._, ._, ._ },
7724 .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ },10413 .{ ._, ._p, .j, .@"1f", ._, ._, ._ },
7725 .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ },10414 .{ ._, .f_, .ucom, .tmp2t, ._, ._, ._ },
7726 .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ },10415 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
7727 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },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, ._, ._, ._ },
7728 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },10422 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7729 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10423 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7730 } },10424 } },
7731 }, .{10425 }, .{
7732 .required_features = .{ .@"64bit", .cmov, null, null },10426 .required_features = .{ .@"64bit", .x87, null, null },
7733 .src_constraints = .{10427 .src_constraints = .{
7734 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },10428 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
7735 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },10429 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
7736 },10430 },
7737 .patterns = &.{10431 .patterns = &.{
7738 .{ .src = .{ .to_mem, .to_mem } },10432 .{ .src = .{ .to_mem, .to_mem } },
7739 },10433 },
7740 .extra_temps = .{10434 .extra_temps = .{
7741 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10435 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7742 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },10436 .{ .type = .f80, .kind = .{ .reg = .st6 } },
7743 .unused,10437 .{ .type = .f80, .kind = .{ .reg = .st7 } },
7744 .unused,10438 .{ .type = .u8, .kind = .{ .reg = .ah } },
7745 .unused,10439 .unused,
7746 .unused,10440 .unused,
7747 .unused,10441 .unused,
...@@ -7752,27 +10446,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7752,27 +10446,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7752 .clobbers = .{ .eflags = true },10446 .clobbers = .{ .eflags = true },
7753 .each = .{ .once = &.{10447 .each = .{ .once = &.{
7754 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10448 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7755 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },10449 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
7756 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10450 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
7757 .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10451 .{ ._, .f_, .xam, ._, ._, ._, ._ },
7758 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },10452 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
7759 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },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), ._, ._ },
7760 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10464 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7761 } },10465 } },
7762 }, .{10466 }, .{
7763 .required_features = .{ .@"64bit", null, null, null },10467 .required_features = .{ .x87, null, null, null },
7764 .src_constraints = .{10468 .src_constraints = .{
7765 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },10469 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
7766 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },10470 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
7767 },10471 },
7768 .patterns = &.{10472 .patterns = &.{
7769 .{ .src = .{ .to_mem, .to_mem } },10473 .{ .src = .{ .to_mem, .to_mem } },
7770 },10474 },
7771 .extra_temps = .{10475 .extra_temps = .{
7772 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10476 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7773 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },10477 .{ .type = .f80, .kind = .{ .reg = .st6 } },
7774 .unused,10478 .{ .type = .f80, .kind = .{ .reg = .st7 } },
7775 .unused,10479 .{ .type = .u8, .kind = .{ .reg = .ah } },
7776 .unused,10480 .unused,
7777 .unused,10481 .unused,
7778 .unused,10482 .unused,
...@@ -7783,64 +10487,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7783,64 +10487,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7783 .clobbers = .{ .eflags = true },10487 .clobbers = .{ .eflags = true },
7784 .each = .{ .once = &.{10488 .each = .{ .once = &.{
7785 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10489 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7786 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },10490 .{ .@"0:", .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
7787 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10491 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
7788 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },10492 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
7789 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10493 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
7790 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },10494 .{ ._, ._, .sahf, ._, ._, ._, ._ },
7791 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },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), ._, ._ },
7792 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10505 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7793 } },10506 } },
7794 }, .{10507 }, .{
7795 .required_features = .{ .@"64bit", .cmov, null, null },10508 .required_features = .{ .sse, null, null, null },
7796 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },10509 .src_constraints = .{
10510 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
10511 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
10512 },
7797 .patterns = &.{10513 .patterns = &.{
7798 .{ .src = .{ .to_mem, .to_mem } },10514 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
7799 },10515 },
10516 .call_frame = .{ .alignment = .@"16" },
7800 .extra_temps = .{10517 .extra_temps = .{
7801 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10518 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
7802 .{ .type = .isize, .kind = .{ .reg = .rsi } },10519 .unused,
7803 .{ .type = .u64, .kind = .{ .reg = .rdi } },10520 .unused,
7804 .{ .type = .u64, .kind = .{ .reg = .rcx } },10521 .unused,
7805 .unused,10522 .unused,
7806 .unused,10523 .unused,
7807 .unused,10524 .unused,
7808 .unused,10525 .unused,
7809 .unused,10526 .unused,
7810 },10527 },
7811 .dst_temps = .{.mem},10528 .dst_temps = .{.{ .ref = .src0 }},
7812 .clobbers = .{ .eflags = true },10529 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
7813 .each = .{ .once = &.{10530 .each = .{ .once = &.{
7814 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10531 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
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", ._, ._, ._ },
7832 } },10532 } },
7833 }, .{10533 }, .{
7834 .required_features = .{ .@"64bit", null, null, null },10534 .required_features = .{ .avx, null, null, null },
7835 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },10535 .src_constraints = .{
10536 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10537 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10538 },
7836 .patterns = &.{10539 .patterns = &.{
7837 .{ .src = .{ .to_mem, .to_mem } },10540 .{ .src = .{ .to_mem, .to_mem } },
7838 },10541 },
10542 .call_frame = .{ .alignment = .@"16" },
7839 .extra_temps = .{10543 .extra_temps = .{
7840 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10544 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7841 .{ .type = .isize, .kind = .{ .reg = .rsi } },10545 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
7842 .{ .type = .u64, .kind = .{ .reg = .rdi } },10546 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
7843 .{ .type = .u64, .kind = .{ .reg = .rcx } },10547 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
7844 .unused,10548 .unused,
7845 .unused,10549 .unused,
7846 .unused,10550 .unused,
...@@ -7848,38 +10552,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7848,38 +10552,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7848 .unused,10552 .unused,
7849 },10553 },
7850 .dst_temps = .{.mem},10554 .dst_temps = .{.mem},
7851 .clobbers = .{ .eflags = true },10555 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
7852 .each = .{ .once = &.{10556 .each = .{ .once = &.{
7853 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10557 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7854 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },10558 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7855 .{ ._, ._c, .cl, ._, ._, ._, ._ },10559 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7856 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },10560 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
7857 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10561 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7858 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },10562 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
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), ._, ._ },
7870 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10563 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7871 } },10564 } },
7872 }, .{10565 }, .{
7873 .required_features = .{ .@"64bit", .cmov, null, null },10566 .required_features = .{ .sse2, null, null, null },
7874 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },10567 .src_constraints = .{
10568 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10569 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10570 },
7875 .patterns = &.{10571 .patterns = &.{
7876 .{ .src = .{ .to_mem, .to_mem } },10572 .{ .src = .{ .to_mem, .to_mem } },
7877 },10573 },
10574 .call_frame = .{ .alignment = .@"16" },
7878 .extra_temps = .{10575 .extra_temps = .{
7879 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10576 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7880 .{ .type = .isize, .kind = .{ .reg = .rsi } },10577 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
7881 .{ .type = .u64, .kind = .{ .reg = .rdi } },10578 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
7882 .{ .type = .u64, .kind = .{ .reg = .rcx } },10579 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
7883 .unused,10580 .unused,
7884 .unused,10581 .unused,
7885 .unused,10582 .unused,
...@@ -7887,36 +10584,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7887,36 +10584,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7887 .unused,10584 .unused,
7888 },10585 },
7889 .dst_temps = .{.mem},10586 .dst_temps = .{.mem},
7890 .clobbers = .{ .eflags = true },10587 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
7891 .each = .{ .once = &.{10588 .each = .{ .once = &.{
7892 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10589 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7893 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },10590 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7894 .{ ._, ._c, .cl, ._, ._, ._, ._ },10591 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7895 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },10592 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
7896 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10593 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7897 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },10594 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
7898 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },10595 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
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", ._, ._, ._ },
7908 } },10596 } },
7909 }, .{10597 }, .{
7910 .required_features = .{ .@"64bit", null, null, null },10598 .required_features = .{ .sse, null, null, null },
7911 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },10599 .src_constraints = .{
10600 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10601 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
10602 },
7912 .patterns = &.{10603 .patterns = &.{
7913 .{ .src = .{ .to_mem, .to_mem } },10604 .{ .src = .{ .to_mem, .to_mem } },
7914 },10605 },
10606 .call_frame = .{ .alignment = .@"16" },
7915 .extra_temps = .{10607 .extra_temps = .{
7916 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10608 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7917 .{ .type = .isize, .kind = .{ .reg = .rsi } },10609 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
7918 .{ .type = .u64, .kind = .{ .reg = .rdi } },10610 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
7919 .{ .type = .u64, .kind = .{ .reg = .rcx } },10611 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
7920 .unused,10612 .unused,
7921 .unused,10613 .unused,
7922 .unused,10614 .unused,
...@@ -7924,24 +10616,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7924,24 +10616,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7924 .unused,10616 .unused,
7925 },10617 },
7926 .dst_temps = .{.mem},10618 .dst_temps = .{.mem},
7927 .clobbers = .{ .eflags = true },10619 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
7928 .each = .{ .once = &.{10620 .each = .{ .once = &.{
7929 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },10621 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
7930 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },10622 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7931 .{ ._, ._c, .cl, ._, ._, ._, ._ },10623 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7932 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },10624 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
7933 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },10625 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7934 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },10626 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
7935 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },10627 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
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", ._, ._, ._ },
7945 } },10628 } },
7946 } }) catch |err| switch (err) {10629 } }) catch |err| switch (err) {
7947 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{10630 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
...@@ -8142,7 +10825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8142,7 +10825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8142 },10825 },
8143 .extra_temps = .{10826 .extra_temps = .{
8144 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10827 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8145 .{ .kind = .{ .rc = .sse } },10828 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
8146 .unused,10829 .unused,
8147 .unused,10830 .unused,
8148 .unused,10831 .unused,
...@@ -8169,7 +10852,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8169,7 +10852,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8169 },10852 },
8170 .extra_temps = .{10853 .extra_temps = .{
8171 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10854 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8172 .{ .kind = .{ .rc = .sse } },10855 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
8173 .unused,10856 .unused,
8174 .unused,10857 .unused,
8175 .unused,10858 .unused,
...@@ -8196,7 +10879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8196,7 +10879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8196 },10879 },
8197 .extra_temps = .{10880 .extra_temps = .{
8198 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10881 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8199 .{ .kind = .{ .rc = .sse } },10882 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
8200 .unused,10883 .unused,
8201 .unused,10884 .unused,
8202 .unused,10885 .unused,
...@@ -8223,7 +10906,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8223,7 +10906,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8223 },10906 },
8224 .extra_temps = .{10907 .extra_temps = .{
8225 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10908 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8226 .{ .kind = .{ .rc = .sse } },10909 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
8227 .unused,10910 .unused,
8228 .unused,10911 .unused,
8229 .unused,10912 .unused,
...@@ -8250,7 +10933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8250,7 +10933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8250 },10933 },
8251 .extra_temps = .{10934 .extra_temps = .{
8252 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },10935 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8253 .{ .kind = .{ .rc = .sse } },10936 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
8254 .unused,10937 .unused,
8255 .unused,10938 .unused,
8256 .unused,10939 .unused,
...@@ -8591,7 +11274,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8591,7 +11274,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8591 },11274 },
8592 .dst_temps = .{.{ .rc = .sse }},11275 .dst_temps = .{.{ .rc = .sse }},
8593 .each = .{ .once = &.{11276 .each = .{ .once = &.{
8594 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },11277 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) },
8595 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },11278 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
8596 } },11279 } },
8597 }, .{11280 }, .{
...@@ -8693,7 +11376,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8693,7 +11376,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8693 .clobbers = .{ .eflags = true },11376 .clobbers = .{ .eflags = true },
8694 .each = .{ .once = &.{11377 .each = .{ .once = &.{
8695 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },11378 .{ ._, ._, .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) },
8697 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },11380 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
8698 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },11381 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
8699 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },11382 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
...@@ -8722,7 +11405,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -8722,7 +11405,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
8722 .clobbers = .{ .eflags = true },11405 .clobbers = .{ .eflags = true },
8723 .each = .{ .once = &.{11406 .each = .{ .once = &.{
8724 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },11407 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8725 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },11408 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) },
8726 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },11409 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
8727 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },11410 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
8728 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },11411 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
...@@ -9406,7 +12089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9406,7 +12089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9406 },12089 },
9407 .dst_temps = .{.{ .rc = .sse }},12090 .dst_temps = .{.{ .rc = .sse }},
9408 .each = .{ .once = &.{12091 .each = .{ .once = &.{
9409 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },12092 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) },
9410 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },12093 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
9411 } },12094 } },
9412 }, .{12095 }, .{
...@@ -9493,12 +12176,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9493,12 +12176,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9493 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);12176 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
9494 },12177 },
949512178
9496 .block => if (use_old) try cg.airBlock(inst) else {12179 .block => {
9497 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;12180 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
9498 const extra = cg.air.extraData(Air.Block, ty_pl.payload);12181 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);
9500 try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));12183 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);
9502 },12185 },
9503 .loop => if (use_old) try cg.airLoop(inst) else {12186 .loop => if (use_old) try cg.airLoop(inst) else {
9504 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;12187 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
...@@ -13852,7 +16535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -13852,7 +16535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
13852 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },16535 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13853 .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ },16536 .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
13854 .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ },16537 .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
13855 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16538 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
13856 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },16539 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
13857 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },16540 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
13858 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16541 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -13884,7 +16567,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -13884,7 +16567,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
13884 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },16567 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13885 .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ },16568 .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
13886 .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ },16569 .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
13887 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16570 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
13888 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },16571 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
13889 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },16572 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
13890 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16573 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -13916,7 +16599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -13916,7 +16599,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
13916 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },16599 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13917 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ },16600 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
13918 .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ },16601 .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
13919 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16602 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
13920 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },16603 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
13921 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },16604 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
13922 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16605 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -13949,7 +16632,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -13949,7 +16632,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
13949 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },16632 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13950 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },16633 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
13951 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },16634 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13952 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16635 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
13953 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },16636 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
13954 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },16637 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
13955 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16638 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -13988,7 +16671,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -13988,7 +16671,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
13988 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },16671 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
13989 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },16672 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
13990 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },16673 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
13991 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16674 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
13992 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },16675 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
13993 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },16676 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
13994 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16677 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14021,7 +16704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14021,7 +16704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14021 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },16704 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14022 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },16705 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
14023 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },16706 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14024 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16707 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14025 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },16708 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14026 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },16709 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14027 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16710 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14054,7 +16737,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14054,7 +16737,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14054 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },16737 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14055 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },16738 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
14056 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },16739 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
14057 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16740 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14058 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },16741 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14059 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },16742 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14060 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16743 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14087,7 +16770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14087,7 +16770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14087 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },16770 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14088 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },16771 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
14089 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },16772 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
14090 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16773 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14091 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },16774 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14092 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },16775 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14093 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16776 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14121,7 +16804,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14121,7 +16804,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14121 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },16804 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14122 .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },16805 .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
14123 .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },16806 .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
14124 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16807 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14125 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },16808 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14126 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },16809 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14127 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16810 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14161,7 +16844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14161,7 +16844,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14161 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },16844 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
14162 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },16845 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14163 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },16846 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
14164 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16847 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14165 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },16848 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14166 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },16849 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14167 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16850 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14195,7 +16878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14195,7 +16878,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14195 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },16878 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14196 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },16879 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
14197 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },16880 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14198 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16881 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14199 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },16882 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14200 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },16883 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14201 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16884 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14228,7 +16911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14228,7 +16911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14228 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },16911 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14229 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },16912 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
14230 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },16913 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
14231 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16914 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14232 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },16915 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14233 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },16916 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14234 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16917 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14262,7 +16945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14262,7 +16945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14262 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },16945 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14263 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },16946 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
14264 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },16947 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
14265 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16948 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14266 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },16949 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14267 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },16950 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14268 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16951 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14296,7 +16979,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14296,7 +16979,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14296 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },16979 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14297 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },16980 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
14298 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },16981 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
14299 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },16982 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14300 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },16983 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14301 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },16984 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14302 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },16985 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14337,7 +17020,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14337,7 +17020,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14337 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },17020 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
14338 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },17021 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14339 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },17022 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
14340 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },17023 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
14341 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },17024 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14342 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },17025 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14343 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },17026 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
...@@ -14369,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14369,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14369 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },17052 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
14370 .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ },17053 .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
14371 .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ },17054 .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14372 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },17055 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
14373 .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },17056 .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
14374 .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },17057 .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
14375 .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },17058 .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
...@@ -14397,7 +17080,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14397,7 +17080,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14397 .{ .src = .{ .to_sse, .to_sse } },17080 .{ .src = .{ .to_sse, .to_sse } },
14398 },17081 },
14399 .extra_temps = .{17082 .extra_temps = .{
14400 .{ .kind = .{ .rc = .sse } },17083 .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
14401 .unused,17084 .unused,
14402 .unused,17085 .unused,
14403 .unused,17086 .unused,
...@@ -14413,12 +17096,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14413,12 +17096,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14413 .info = .{ .kind = .all, .scalar = .dword },17096 .info = .{ .kind = .all, .scalar = .dword },
14414 } }},17097 } }},
14415 .each = .{ .once = &.{17098 .each = .{ .once = &.{
14416 .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ },17099 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
14417 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ },17100 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
14418 .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {17101 .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
14419 else => unreachable,17102 else => unreachable,
14420 .e => 0b00000,17103 .e => .eq,
14421 .ne => 0b00100,17104 .ne => .neq,
14422 }) },17105 }) },
14423 } },17106 } },
14424 }, .{17107 }, .{
...@@ -14452,10 +17135,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14452,10 +17135,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14452 .each = .{ .once = &.{17135 .each = .{ .once = &.{
14453 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },17136 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
14454 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },17137 .{ ._, .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) {
14456 else => unreachable,17139 else => unreachable,
14457 .e => 0b00000,17140 .e => .eq,
14458 .ne => 0b00100,17141 .ne => .neq,
14459 }) },17142 }) },
14460 } },17143 } },
14461 }, .{17144 }, .{
...@@ -14489,10 +17172,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14489,10 +17172,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14489 .each = .{ .once = &.{17172 .each = .{ .once = &.{
14490 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },17173 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
14491 .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },17174 .{ ._, .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) {
14493 else => unreachable,17176 else => unreachable,
14494 .e => 0b00000,17177 .e => .eq,
14495 .ne => 0b00100,17178 .ne => .neq,
14496 }) },17179 }) },
14497 } },17180 } },
14498 }, .{17181 }, .{
...@@ -14512,10 +17195,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14512,10 +17195,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14512 .info = .{ .kind = .all, .scalar = .dword },17195 .info = .{ .kind = .all, .scalar = .dword },
14513 } }},17196 } }},
14514 .each = .{ .once = &.{17197 .each = .{ .once = &.{
14515 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {17198 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
14516 else => unreachable,17199 else => unreachable,
14517 .e => 0b00000,17200 .e => .eq,
14518 .ne => 0b00100,17201 .ne => .neq,
14519 }) },17202 }) },
14520 } },17203 } },
14521 }, .{17204 }, .{
...@@ -14534,10 +17217,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14534,10 +17217,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14534 .info = .{ .kind = .all, .scalar = .dword },17217 .info = .{ .kind = .all, .scalar = .dword },
14535 } }},17218 } }},
14536 .each = .{ .once = &.{17219 .each = .{ .once = &.{
14537 .{ ._, ._ss, .cmp, .dst0x, .src1x, .ui(switch (cc) {17220 .{ ._, ._ss, .cmp, .dst0x, .src1x, .vp(switch (cc) {
14538 else => unreachable,17221 else => unreachable,
14539 .e => 0b00000,17222 .e => .eq,
14540 .ne => 0b00100,17223 .ne => .neq,
14541 }), ._ },17224 }), ._ },
14542 } },17225 } },
14543 }, .{17226 }, .{
...@@ -14557,10 +17240,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14557,10 +17240,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14557 .info = .{ .kind = .all, .scalar = .dword },17240 .info = .{ .kind = .all, .scalar = .dword },
14558 } }},17241 } }},
14559 .each = .{ .once = &.{17242 .each = .{ .once = &.{
14560 .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {17243 .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
14561 else => unreachable,17244 else => unreachable,
14562 .e => 0b00000,17245 .e => .eq,
14563 .ne => 0b00100,17246 .ne => .neq,
14564 }) },17247 }) },
14565 } },17248 } },
14566 }, .{17249 }, .{
...@@ -14579,10 +17262,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14579,10 +17262,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14579 .info = .{ .kind = .all, .scalar = .dword },17262 .info = .{ .kind = .all, .scalar = .dword },
14580 } }},17263 } }},
14581 .each = .{ .once = &.{17264 .each = .{ .once = &.{
14582 .{ ._, ._ps, .cmp, .dst0x, .src1x, .ui(switch (cc) {17265 .{ ._, ._ps, .cmp, .dst0x, .src1x, .vp(switch (cc) {
14583 else => unreachable,17266 else => unreachable,
14584 .e => 0b00000,17267 .e => .eq,
14585 .ne => 0b00100,17268 .ne => .neq,
14586 }), ._ },17269 }), ._ },
14587 } },17270 } },
14588 }, .{17271 }, .{
...@@ -14602,10 +17285,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14602,10 +17285,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14602 .info = .{ .kind = .all, .scalar = .dword },17285 .info = .{ .kind = .all, .scalar = .dword },
14603 } }},17286 } }},
14604 .each = .{ .once = &.{17287 .each = .{ .once = &.{
14605 .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {17288 .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
14606 else => unreachable,17289 else => unreachable,
14607 .e => 0b00000,17290 .e => .eq,
14608 .ne => 0b00100,17291 .ne => .neq,
14609 }) },17292 }) },
14610 } },17293 } },
14611 }, .{17294 }, .{
...@@ -14625,10 +17308,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14625,10 +17308,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14625 .info = .{ .kind = .all, .scalar = .qword },17308 .info = .{ .kind = .all, .scalar = .qword },
14626 } }},17309 } }},
14627 .each = .{ .once = &.{17310 .each = .{ .once = &.{
14628 .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {17311 .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
14629 else => unreachable,17312 else => unreachable,
14630 .e => 0b00000,17313 .e => .eq,
14631 .ne => 0b00100,17314 .ne => .neq,
14632 }) },17315 }) },
14633 } },17316 } },
14634 }, .{17317 }, .{
...@@ -14647,10 +17330,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14647,10 +17330,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14647 .info = .{ .kind = .all, .scalar = .qword },17330 .info = .{ .kind = .all, .scalar = .qword },
14648 } }},17331 } }},
14649 .each = .{ .once = &.{17332 .each = .{ .once = &.{
14650 .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) {17333 .{ ._, ._sd, .cmp, .dst0x, .src1x, .vp(switch (cc) {
14651 else => unreachable,17334 else => unreachable,
14652 .e => 0b00000,17335 .e => .eq,
14653 .ne => 0b00100,17336 .ne => .neq,
14654 }), ._ },17337 }), ._ },
14655 } },17338 } },
14656 }, .{17339 }, .{
...@@ -14670,10 +17353,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14670,10 +17353,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14670 .info = .{ .kind = .all, .scalar = .qword },17353 .info = .{ .kind = .all, .scalar = .qword },
14671 } }},17354 } }},
14672 .each = .{ .once = &.{17355 .each = .{ .once = &.{
14673 .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {17356 .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
14674 else => unreachable,17357 else => unreachable,
14675 .e => 0b00000,17358 .e => .eq,
14676 .ne => 0b00100,17359 .ne => .neq,
14677 }) },17360 }) },
14678 } },17361 } },
14679 }, .{17362 }, .{
...@@ -14692,10 +17375,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14692,10 +17375,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14692 .info = .{ .kind = .all, .scalar = .qword },17375 .info = .{ .kind = .all, .scalar = .qword },
14693 } }},17376 } }},
14694 .each = .{ .once = &.{17377 .each = .{ .once = &.{
14695 .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) {17378 .{ ._, ._pd, .cmp, .dst0x, .src1x, .vp(switch (cc) {
14696 else => unreachable,17379 else => unreachable,
14697 .e => 0b00000,17380 .e => .eq,
14698 .ne => 0b00100,17381 .ne => .neq,
14699 }), ._ },17382 }), ._ },
14700 } },17383 } },
14701 }, .{17384 }, .{
...@@ -14715,10 +17398,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14715,10 +17398,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14715 .info = .{ .kind = .all, .scalar = .qword },17398 .info = .{ .kind = .all, .scalar = .qword },
14716 } }},17399 } }},
14717 .each = .{ .once = &.{17400 .each = .{ .once = &.{
14718 .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {17401 .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
14719 else => unreachable,17402 else => unreachable,
14720 .e => 0b00000,17403 .e => .eq,
14721 .ne => 0b00100,17404 .ne => .neq,
14722 }) },17405 }) },
14723 } },17406 } },
14724 }, .{17407 }, .{
...@@ -14748,10 +17431,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14748,10 +17431,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14748 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },17431 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
14749 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },17432 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
14750 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },17433 .{ ._, .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) {
14752 else => unreachable,17435 else => unreachable,
14753 .e => 0b00000,17436 .e => .eq,
14754 .ne => 0b00100,17437 .ne => .neq,
14755 }) },17438 }) },
14756 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },17439 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
14757 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },17440 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
...@@ -14786,10 +17469,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14786,10 +17469,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14786 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },17469 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
14787 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },17470 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
14788 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },17471 .{ ._, .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) {
14790 else => unreachable,17473 else => unreachable,
14791 .e => 0b00000,17474 .e => .eq,
14792 .ne => 0b00100,17475 .ne => .neq,
14793 }) },17476 }) },
14794 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },17477 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
14795 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },17478 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
...@@ -14834,7 +17517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14834,7 +17517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14834 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },17517 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
14835 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },17518 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
14836 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },17519 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14837 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },17520 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
14838 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },17521 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
14839 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },17522 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
14840 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },17523 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
...@@ -14879,7 +17562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14879,7 +17562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14879 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },17562 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
14880 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },17563 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
14881 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },17564 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14882 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },17565 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
14883 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },17566 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
14884 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },17567 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
14885 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },17568 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
...@@ -14925,7 +17608,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14925,7 +17608,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14925 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },17608 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
14926 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },17609 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
14927 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },17610 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14928 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },17611 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
14929 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },17612 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
14930 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },17613 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
14931 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },17614 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
...@@ -14971,7 +17654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14971,7 +17654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14971 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },17654 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
14972 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },17655 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
14973 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },17656 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14974 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },17657 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
14975 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },17658 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
14976 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },17659 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
14977 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },17660 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
...@@ -15002,7 +17685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15002,7 +17685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15002 .{ .type = .i32, .kind = .{ .reg = .eax } },17685 .{ .type = .i32, .kind = .{ .reg = .eax } },
15003 .{ .type = .u8, .kind = .{ .reg = .cl } },17686 .{ .type = .u8, .kind = .{ .reg = .cl } },
15004 .{ .type = .u32, .kind = .{ .reg = .edx } },17687 .{ .type = .u32, .kind = .{ .reg = .edx } },
15005 .{ .type = .vector_8_f16, .kind = .mem },17688 .{ .type = .f32, .kind = .mem },
15006 .unused,17689 .unused,
15007 },17690 },
15008 .dst_temps = .{.{ .rc = .general_purpose }},17691 .dst_temps = .{.{ .rc = .general_purpose }},
...@@ -15012,14 +17695,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15012,14 +17695,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15012 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },17695 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15013 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },17696 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
15014 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },17697 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15015 .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ },17698 .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
15016 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },17699 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
15017 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },17700 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15018 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ },17701 .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
15019 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },17702 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
15020 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },17703 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
15021 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },17704 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
15022 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },17705 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
15023 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },17706 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15024 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },17707 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
15025 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },17708 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
...@@ -15050,7 +17733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15050,7 +17733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15050 .{ .type = .i32, .kind = .{ .reg = .eax } },17733 .{ .type = .i32, .kind = .{ .reg = .eax } },
15051 .{ .type = .u8, .kind = .{ .reg = .cl } },17734 .{ .type = .u8, .kind = .{ .reg = .cl } },
15052 .{ .type = .u32, .kind = .{ .reg = .edx } },17735 .{ .type = .u32, .kind = .{ .reg = .edx } },
15053 .{ .type = .vector_8_f16, .kind = .mem },17736 .{ .type = .f32, .kind = .mem },
15054 .unused,17737 .unused,
15055 },17738 },
15056 .dst_temps = .{.{ .rc = .general_purpose }},17739 .dst_temps = .{.{ .rc = .general_purpose }},
...@@ -15060,14 +17743,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15060,14 +17743,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15060 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },17743 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15061 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },17744 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
15062 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },17745 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15063 .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ },17746 .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
15064 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },17747 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
15065 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },17748 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15066 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ },17749 .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
15067 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },17750 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
15068 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },17751 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
15069 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },17752 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
15070 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },17753 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
15071 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },17754 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15072 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },17755 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
15073 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },17756 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
...@@ -15111,7 +17794,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15111,7 +17794,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15111 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },17794 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15112 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },17795 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15113 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },17796 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15114 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },17797 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
15115 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },17798 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15116 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },17799 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15117 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },17800 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
...@@ -15166,7 +17849,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15166,7 +17849,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15166 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },17849 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15167 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },17850 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15168 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },17851 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15169 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },17852 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
15170 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },17853 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15171 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },17854 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15172 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },17855 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
...@@ -15222,7 +17905,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15222,7 +17905,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15222 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },17905 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15223 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },17906 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15224 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },17907 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15225 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },17908 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
15226 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },17909 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15227 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },17910 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15228 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },17911 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
...@@ -15278,7 +17961,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15278,7 +17961,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15278 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },17961 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15279 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },17962 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15280 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },17963 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15281 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },17964 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
15282 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },17965 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15283 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },17966 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15284 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },17967 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
...@@ -15320,7 +18003,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15320,7 +18003,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15320 .{ .type = .i32, .kind = .{ .reg = .eax } },18003 .{ .type = .i32, .kind = .{ .reg = .eax } },
15321 .{ .type = .u8, .kind = .{ .reg = .cl } },18004 .{ .type = .u8, .kind = .{ .reg = .cl } },
15322 .{ .type = .u64, .kind = .{ .reg = .rdx } },18005 .{ .type = .u64, .kind = .{ .reg = .rdx } },
15323 .{ .type = .vector_8_f16, .kind = .mem },18006 .{ .type = .f32, .kind = .mem },
15324 },18007 },
15325 .dst_temps = .{.mem},18008 .dst_temps = .{.mem},
15326 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },18009 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
...@@ -15329,14 +18012,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15329,14 +18012,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15329 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },18012 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15330 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },18013 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
15331 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },18014 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15332 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ },18015 .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
15333 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },18016 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
15334 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },18017 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15335 .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ },18018 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
15336 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },18019 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15337 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },18020 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15338 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },18021 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15339 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },18022 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
15340 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },18023 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15341 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },18024 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15342 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },18025 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
...@@ -15378,7 +18061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15378,7 +18061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15378 .{ .type = .i32, .kind = .{ .reg = .eax } },18061 .{ .type = .i32, .kind = .{ .reg = .eax } },
15379 .{ .type = .u8, .kind = .{ .reg = .cl } },18062 .{ .type = .u8, .kind = .{ .reg = .cl } },
15380 .{ .type = .u64, .kind = .{ .reg = .rdx } },18063 .{ .type = .u64, .kind = .{ .reg = .rdx } },
15381 .{ .type = .vector_8_f16, .kind = .mem },18064 .{ .type = .f32, .kind = .mem },
15382 },18065 },
15383 .dst_temps = .{.mem},18066 .dst_temps = .{.mem},
15384 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },18067 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
...@@ -15387,14 +18070,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15387,14 +18070,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15387 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },18070 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15388 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },18071 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
15389 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },18072 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15390 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ },18073 .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
15391 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },18074 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
15392 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },18075 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15393 .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ },18076 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
15394 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },18077 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15395 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },18078 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15396 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },18079 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15397 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },18080 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
15398 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },18081 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15399 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },18082 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15400 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },18083 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
...@@ -15439,10 +18122,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15439,10 +18122,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15439 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },18122 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15440 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },18123 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15441 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },18124 .{ .@"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) {
15443 else => unreachable,18126 else => unreachable,
15444 .e => 0b00000,18127 .e => .eq,
15445 .ne => 0b00100,18128 .ne => .neq,
15446 }) },18129 }) },
15447 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },18130 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
15448 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },18131 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
...@@ -15476,10 +18159,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15476,10 +18159,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15476 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },18159 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15477 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },18160 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15478 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },18161 .{ .@"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) {
15480 else => unreachable,18163 else => unreachable,
15481 .e => 0b00000,18164 .e => .eq,
15482 .ne => 0b00100,18165 .ne => .neq,
15483 }) },18166 }) },
15484 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },18167 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
15485 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },18168 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
...@@ -15514,15 +18197,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15514,15 +18197,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15514 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },18197 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15515 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },18198 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15516 .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },18199 .{ ._, ._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) {
15518 else => unreachable,18201 else => unreachable,
15519 .e => 0b00000,18202 .e => .eq,
15520 .ne => 0b00100,18203 .ne => .neq,
15521 }), ._ },18204 }), ._ },
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) {
15523 else => unreachable,18206 else => unreachable,
15524 .e => 0b00000,18207 .e => .eq,
15525 .ne => 0b00100,18208 .ne => .neq,
15526 }), ._ },18209 }), ._ },
15527 .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },18210 .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
15528 .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },18211 .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
...@@ -15558,17 +18241,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15558,17 +18241,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15558 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },18241 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15559 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },18242 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15560 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },18243 .{ .@"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) {
15562 else => unreachable,18245 else => unreachable,
15563 .e => 0b00000,18246 .e => .eq,
15564 .ne => 0b00100,18247 .ne => .neq,
15565 }), ._ },18248 }), ._ },
15566 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },18249 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
15567 .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },18250 .{ ._, ._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) {
15569 else => unreachable,18252 else => unreachable,
15570 .e => 0b00000,18253 .e => .eq,
15571 .ne => 0b00100,18254 .ne => .neq,
15572 }), ._ },18255 }), ._ },
15573 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },18256 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
15574 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },18257 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
...@@ -15605,10 +18288,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15605,10 +18288,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15605 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },18288 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15606 .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },18289 .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
15607 .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },18290 .{ .@"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) {
15609 else => unreachable,18292 else => unreachable,
15610 .e => 0b00000,18293 .e => .eq,
15611 .ne => 0b00100,18294 .ne => .neq,
15612 }), ._ },18295 }), ._ },
15613 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },18296 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
15614 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },18297 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
...@@ -15616,10 +18299,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15616,10 +18299,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15616 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },18299 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
15617 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },18300 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
15618 .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },18301 .{ .@"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) {
15620 else => unreachable,18303 else => unreachable,
15621 .e => 0b00000,18304 .e => .eq,
15622 .ne => 0b00100,18305 .ne => .neq,
15623 }), ._ },18306 }), ._ },
15624 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },18307 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
15625 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },18308 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
...@@ -15653,15 +18336,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15653,15 +18336,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15653 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },18336 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15654 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },18337 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15655 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },18338 .{ ._, .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) {
15657 else => unreachable,18340 else => unreachable,
15658 .e => 0b00000,18341 .e => .eq,
15659 .ne => 0b00100,18342 .ne => .neq,
15660 }) },18343 }) },
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) {
15662 else => unreachable,18345 else => unreachable,
15663 .e => 0b00000,18346 .e => .eq,
15664 .ne => 0b00100,18347 .ne => .neq,
15665 }) },18348 }) },
15666 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },18349 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
15667 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },18350 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
...@@ -15669,7 +18352,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15669,7 +18352,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15669 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },18352 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
15670 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },18353 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
15671 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },18354 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
15672 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },18355 .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
15673 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },18356 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
15674 } },18357 } },
15675 }, .{18358 }, .{
...@@ -15699,15 +18382,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15699,15 +18382,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15699 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },18382 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15700 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },18383 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15701 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },18384 .{ ._, .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) {
15703 else => unreachable,18386 else => unreachable,
15704 .e => 0b00000,18387 .e => .eq,
15705 .ne => 0b00100,18388 .ne => .neq,
15706 }) },18389 }) },
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) {
15708 else => unreachable,18391 else => unreachable,
15709 .e => 0b00000,18392 .e => .eq,
15710 .ne => 0b00100,18393 .ne => .neq,
15711 }) },18394 }) },
15712 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },18395 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
15713 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },18396 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
...@@ -15715,7 +18398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15715,7 +18398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15715 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },18398 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
15716 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },18399 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
15717 .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },18400 .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
15718 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },18401 .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
15719 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },18402 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
15720 } },18403 } },
15721 }, .{18404 }, .{
...@@ -15745,10 +18428,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15745,10 +18428,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15745 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },18428 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15746 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },18429 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15747 .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },18430 .{ .@"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) {
15749 else => unreachable,18432 else => unreachable,
15750 .e => 0b00000,18433 .e => .eq,
15751 .ne => 0b00100,18434 .ne => .neq,
15752 }) },18435 }) },
15753 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },18436 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
15754 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },18437 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
...@@ -15795,10 +18478,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15795,10 +18478,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15795 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },18478 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15796 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },18479 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15797 .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },18480 .{ .@"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) {
15799 else => unreachable,18482 else => unreachable,
15800 .e => 0b00000,18483 .e => .eq,
15801 .ne => 0b00100,18484 .ne => .neq,
15802 }), ._ },18485 }), ._ },
15803 .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },18486 .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
15804 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },18487 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
...@@ -15850,7 +18533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15850,7 +18533,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15850 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },18533 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
15851 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },18534 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
15852 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },18535 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
15853 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },18536 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
15854 .{ ._, switch (cc) {18537 .{ ._, switch (cc) {
15855 else => unreachable,18538 else => unreachable,
15856 .e => ._np,18539 .e => ._np,
...@@ -15910,7 +18593,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15910,7 +18593,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15910 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },18593 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
15911 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },18594 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
15912 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },18595 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
15913 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },18596 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
15914 .{ ._, switch (cc) {18597 .{ ._, switch (cc) {
15915 else => unreachable,18598 else => unreachable,
15916 .e => ._np,18599 .e => ._np,
...@@ -15971,7 +18654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -15971,7 +18654,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
15971 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },18654 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
15972 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },18655 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
15973 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },18656 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
15974 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },18657 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
15975 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },18658 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
15976 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },18659 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
15977 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },18660 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
...@@ -16021,7 +18704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16021,7 +18704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16021 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },18704 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
16022 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },18705 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
16023 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },18706 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
16024 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },18707 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
16025 .{ ._, switch (cc) {18708 .{ ._, switch (cc) {
16026 else => unreachable,18709 else => unreachable,
16027 .e => ._np,18710 .e => ._np,
...@@ -16081,7 +18764,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16081,7 +18764,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16081 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },18764 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
16082 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },18765 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
16083 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },18766 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
16084 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },18767 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
16085 .{ ._, switch (cc) {18768 .{ ._, switch (cc) {
16086 else => unreachable,18769 else => unreachable,
16087 .e => ._np,18770 .e => ._np,
...@@ -16142,7 +18825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16142,7 +18825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16142 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },18825 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
16143 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },18826 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
16144 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },18827 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
16145 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },18828 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
16146 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },18829 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
16147 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },18830 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
16148 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },18831 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
...@@ -16197,7 +18880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16197,7 +18880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16197 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },18880 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16198 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },18881 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16199 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },18882 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16200 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },18883 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
16201 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },18884 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16202 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },18885 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16203 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },18886 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
...@@ -16242,7 +18925,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16242,7 +18925,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16242 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },18925 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16243 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },18926 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16244 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },18927 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16245 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },18928 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
16246 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },18929 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16247 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },18930 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16248 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },18931 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
...@@ -16287,7 +18970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16287,7 +18970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16287 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },18970 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16288 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },18971 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16289 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },18972 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16290 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },18973 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
16291 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },18974 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16292 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },18975 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16293 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },18976 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
...@@ -16332,7 +19015,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16332,7 +19015,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16332 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },19015 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16333 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },19016 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16334 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },19017 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16335 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },19018 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
16336 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },19019 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16337 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },19020 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16338 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },19021 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
...@@ -16377,7 +19060,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16377,7 +19060,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16377 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },19060 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16378 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },19061 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16379 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },19062 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16380 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },19063 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
16381 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },19064 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16382 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },19065 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16383 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },19066 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
...@@ -16422,7 +19105,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16422,7 +19105,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16422 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },19105 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16423 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },19106 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16424 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },19107 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16425 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },19108 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
16426 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },19109 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16427 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },19110 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16428 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },19111 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
...@@ -16466,7 +19149,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16466,7 +19149,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16466 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },19149 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16467 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },19150 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16468 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },19151 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16469 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },19152 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
16470 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },19153 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16471 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },19154 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16472 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },19155 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
...@@ -16521,7 +19204,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16521,7 +19204,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16521 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },19204 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16522 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },19205 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16523 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },19206 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16524 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },19207 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
16525 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },19208 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16526 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },19209 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16527 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },19210 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
...@@ -16576,7 +19259,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16576,7 +19259,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16576 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },19259 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16577 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },19260 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16578 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },19261 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16579 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },19262 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
16580 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },19263 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16581 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },19264 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16582 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },19265 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
...@@ -16631,7 +19314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16631,7 +19314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16631 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },19314 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16632 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },19315 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16633 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },19316 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16634 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },19317 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
16635 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },19318 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16636 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },19319 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16637 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },19320 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
...@@ -16686,7 +19369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16686,7 +19369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16686 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },19369 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16687 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },19370 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16688 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },19371 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16689 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },19372 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
16690 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },19373 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16691 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },19374 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16692 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },19375 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
...@@ -16741,7 +19424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16741,7 +19424,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16741 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },19424 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16742 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },19425 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16743 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },19426 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16744 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },19427 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
16745 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },19428 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16746 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },19429 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16747 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },19430 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
...@@ -18419,7 +21102,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -18419,7 +21102,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
18419 .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },21102 .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
18420 .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },21103 .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
18421 .{ ._, ._c, .set, .tmp1b, ._, ._, ._ },21104 .{ ._, ._c, .set, .tmp1b, ._, ._, ._ },
18422 .{ ._, .fromCondition(switch (cc) {21105 .{ ._, .fromCond(switch (cc) {
18423 else => unreachable,21106 else => unreachable,
18424 .l, .ge, .b, .ae => cc,21107 .l, .ge, .b, .ae => cc,
18425 .le, .g, .be, .a => cc.commute(),21108 .le, .g, .be, .a => cc.commute(),
...@@ -18979,8 +21662,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -18979,8 +21662,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
18979 .{ .src = .{ .to_sse, .to_sse } },21662 .{ .src = .{ .to_sse, .to_sse } },
18980 },21663 },
18981 .extra_temps = .{21664 .extra_temps = .{
18982 .{ .kind = .{ .rc = .sse } },21665 .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
18983 .{ .kind = .{ .rc = .sse } },21666 .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
18984 .unused,21667 .unused,
18985 .unused,21668 .unused,
18986 .unused,21669 .unused,
...@@ -18996,9 +21679,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -18996,9 +21679,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
18996 } }},21679 } }},
18997 .clobbers = .{ .eflags = true },21680 .clobbers = .{ .eflags = true },
18998 .each = .{ .once = &.{21681 .each = .{ .once = &.{
18999 .{ ._, .vp_, .unpcklwd, .tmp0x, .src0x, .src1x, ._ },21682 .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
19000 .{ ._, .v_ps, .cvtph2, .tmp0x, .tmp0x, ._, ._ },21683 .{ ._, .v_ps, .cvtph2, .tmp1x, .src1q, ._, ._ },
19001 .{ ._, .v_, .movshdup, .tmp1x, .tmp0x, ._, ._ },
19002 .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1x, ._, ._ },21684 .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1x, ._, ._ },
19003 } },21685 } },
19004 }, .{21686 }, .{
...@@ -19197,35 +21879,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -19197,35 +21879,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
19197 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },21879 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
19198 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },21880 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
19199 } },21881 } },
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 } },
19229 }, .{21882 }, .{
19230 .required_features = .{ .x87, .cmov, null, null },21883 .required_features = .{ .x87, .cmov, null, null },
19231 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },21884 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
...@@ -19479,46 +22132,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -19479,46 +22132,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
19479 .switch_dispatch => try cg.airSwitchDispatch(inst),22132 .switch_dispatch => try cg.airSwitchDispatch(inst),
19480 .@"try", .try_cold => try cg.airTry(inst),22133 .@"try", .try_cold => try cg.airTry(inst),
19481 .try_ptr, .try_ptr_cold => try cg.airTryPtr(inst),22134 .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) {
19483 const dbg_stmt = air_datas[@intFromEnum(inst)].dbg_stmt;22136 const dbg_stmt = air_datas[@intFromEnum(inst)].dbg_stmt;
19484 _ = try cg.addInst(.{22137 _ = try cg.addInst(.{
19485 .tag = .pseudo,22138 .tag = .pseudo,
19486 .ops = .pseudo_dbg_line_line_column,22139 .ops = .pseudo_dbg_line_stmt_line_column,
19487 .data = .{ .line_column = .{22140 .data = .{ .line_column = .{
19488 .line = dbg_stmt.line,22141 .line = dbg_stmt.line,
19489 .column = dbg_stmt.column,22142 .column = dbg_stmt.column,
19490 } },22143 } },
19491 });22144 });
19492 },22145 },
19493 .dbg_empty_stmt => if (use_old) try cg.airDbgEmptyStmt() else {22146 .dbg_empty_stmt => if (cg.debug_output != .none) {
19494 if (cg.mir_instructions.len > 0) {22147 if (cg.mir_instructions.len > 0) {
19495 const prev_mir_op = &cg.mir_instructions.items(.ops)[cg.mir_instructions.len - 1];22148 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)22149 if (prev_mir_op.* == .pseudo_dbg_line_line_column)
19497 prev_mir_op.* = .pseudo_dbg_line_line_column;22150 prev_mir_op.* = .pseudo_dbg_line_stmt_line_column;
19498 }22151 }
19499 try cg.asmOpOnly(.{ ._, .nop });22152 try cg.asmOpOnly(.{ ._, .nop });
19500 },22153 },
19501 .dbg_inline_block => if (use_old) try cg.airDbgInlineBlock(inst) else {22154 .dbg_inline_block => {
19502 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;22155 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
19503 const extra = cg.air.extraData(Air.DbgInlineBlock, ty_pl.payload);22156 const extra = cg.air.extraData(Air.DbgInlineBlock, ty_pl.payload);
19504 const old_inline_func = cg.inline_func;22157 const old_inline_func = cg.inline_func;
19505 defer cg.inline_func = old_inline_func;22158 defer cg.inline_func = old_inline_func;
19506 cg.inline_func = extra.data.func;22159 cg.inline_func = extra.data.func;
19507 _ = try cg.addInst(.{22160 if (cg.debug_output != .none) _ = try cg.addInst(.{
19508 .tag = .pseudo,22161 .tag = .pseudo,
19509 .ops = .pseudo_dbg_enter_inline_func,22162 .ops = .pseudo_dbg_enter_inline_func,
19510 .data = .{ .func = extra.data.func },22163 .data = .{ .func = extra.data.func },
19511 });22164 });
19512 try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));22165 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(.{
19514 .tag = .pseudo,22167 .tag = .pseudo,
19515 .ops = .pseudo_dbg_leave_inline_func,22168 .ops = .pseudo_dbg_leave_inline_func,
19516 .data = .{ .func = old_inline_func },22169 .data = .{ .func = old_inline_func },
19517 });22170 });
19518 },22171 },
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) {
19520 const pl_op = air_datas[@intFromEnum(inst)].pl_op;22173 const pl_op = air_datas[@intFromEnum(inst)].pl_op;
19521 var ops = try cg.tempsFromOperands(inst, .{pl_op.operand});22174 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 }
19522 try cg.genLocalDebugInfo(inst, ops[0].tracking(cg).short);22188 try cg.genLocalDebugInfo(inst, ops[0].tracking(cg).short);
19523 try ops[0].die(cg);22189 try ops[0].die(cg);
19524 },22190 },
...@@ -20398,19 +23064,21 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok...@@ -20398,19 +23064,21 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok
20398 };23064 };
2039923065
20400 if (reg_ok) need_mem: {23066 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)) {
20402 .float => switch (ty.floatBits(self.target.*)) {23068 .float => switch (ty.floatBits(self.target.*)) {
20403 16, 32, 64, 128 => 16,23069 16, 32, 64, 128 => 16,
20404 80 => break :need_mem,23070 80 => break :need_mem,
20405 else => unreachable,23071 else => unreachable,
20406 },23072 },
20407 .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) {23073 .vector => {
20408 .float => switch (ty.childType(zcu).floatBits(self.target.*)) {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) {
20409 16, 32, 64, 128 => self.vectorSize(.float),23078 16, 32, 64, 128 => self.vectorSize(.float),
20410 80 => break :need_mem,23079 80 => break :need_mem,
20411 else => unreachable,23080 else => unreachable,
20412 },23081 } else self.vectorSize(.int);
20413 else => self.vectorSize(.int),
20414 },23082 },
20415 else => 8,23083 else => 8,
20416 })) {23084 })) {
...@@ -20427,17 +23095,18 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok...@@ -20427,17 +23095,18 @@ fn allocRegOrMemAdvanced(self: *CodeGen, ty: Type, inst: ?Air.Inst.Index, reg_ok
20427fn regClassForType(self: *CodeGen, ty: Type) Register.Class {23095fn regClassForType(self: *CodeGen, ty: Type) Register.Class {
20428 const pt = self.pt;23096 const pt = self.pt;
20429 const zcu = pt.zcu;23097 const zcu = pt.zcu;
20430 return switch (ty.zigTypeTag(zcu)) {23098 if (self.floatBits(ty)) |float_bits| return switch (float_bits) {
20431 .float => switch (ty.floatBits(self.target.*)) {23099 80 => .x87,
20432 80 => .x87,23100 else => .sse,
20433 else => .sse,
20434 },
20435 .vector => switch (ty.childType(zcu).toIntern()) {
20436 .bool_type => .general_purpose,
20437 else => .sse,
20438 },
20439 else => .general_purpose,
20440 };23101 };
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;
20441}23110}
2044223111
20443fn regSetForRegClass(rc: Register.Class) RegisterManager.RegisterBitSet {23112fn regSetForRegClass(rc: Register.Class) RegisterManager.RegisterBitSet {
...@@ -20725,7 +23394,7 @@ fn airFptrunc(self: *CodeGen, inst: Air.Inst.Index) !void {...@@ -20725,7 +23394,7 @@ fn airFptrunc(self: *CodeGen, inst: Air.Inst.Index) !void {
20725 .{ .v_, .cvtps2ph },23394 .{ .v_, .cvtps2ph },
20726 dst_reg,23395 dst_reg,
20727 mat_src_reg.to128(),23396 mat_src_reg.to128(),
20728 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),23397 bits.RoundMode.imm(.{}),
20729 );23398 );
20730 },23399 },
20731 else => unreachable,23400 else => unreachable,
...@@ -24896,26 +27565,7 @@ fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {...@@ -24896,26 +27565,7 @@ fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
24896 return self.floatSign(inst, tag, un_op, ty);27565 return self.floatSign(inst, tag, un_op, ty);
24897}27566}
2489827567
24899const RoundMode = packed struct(u5) {27568fn airRound(self: *CodeGen, inst: Air.Inst.Index, mode: bits.RoundMode) !void {
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 {
24919 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;27569 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
24920 const ty = self.typeOf(un_op);27570 const ty = self.typeOf(un_op);
2492127571
...@@ -24972,7 +27622,7 @@ fn getRoundTag(self: *CodeGen, ty: Type) ?Mir.Inst.FixedTag {...@@ -24972,7 +27622,7 @@ fn getRoundTag(self: *CodeGen, ty: Type) ?Mir.Inst.FixedTag {
24972 } else null;27622 } else null;
24973}27623}
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 {
24976 const pt = self.pt;27626 const pt = self.pt;
24977 const zcu = pt.zcu;27627 const zcu = pt.zcu;
24978 if (self.getRoundTag(ty)) |_| return .none;27628 if (self.getRoundTag(ty)) |_| return .none;
...@@ -24997,7 +27647,7 @@ fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode)...@@ -24997,7 +27647,7 @@ fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode)
24997 } }, &.{ty}, &.{src_mcv}, .{});27647 } }, &.{ty}, &.{src_mcv}, .{});
24998}27648}
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 {
25001 const pt = self.pt;27651 const pt = self.pt;
25002 const mir_tag = self.getRoundTag(ty) orelse {27652 const mir_tag = self.getRoundTag(ty) orelse {
25003 const result = try self.genRoundLibcall(ty, src_mcv, mode);27653 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:...@@ -25011,7 +27661,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
25011 dst_alias,27661 dst_alias,
25012 dst_alias,27662 dst_alias,
25013 try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }),27663 try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }),
25014 .u(@as(u5, @bitCast(mode))),27664 mode.imm(),
25015 ) else try self.asmRegisterRegisterRegisterImmediate(27665 ) else try self.asmRegisterRegisterRegisterImmediate(
25016 mir_tag,27666 mir_tag,
25017 dst_alias,27667 dst_alias,
...@@ -25020,13 +27670,13 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:...@@ -25020,13 +27670,13 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
25020 src_mcv.getReg().?27670 src_mcv.getReg().?
25021 else27671 else
25022 try self.copyToTmpRegister(ty, src_mcv), abi_size),27672 try self.copyToTmpRegister(ty, src_mcv), abi_size),
25023 .u(@as(u5, @bitCast(mode))),27673 mode.imm(),
25024 ),27674 ),
25025 else => if (src_mcv.isBase()) try self.asmRegisterMemoryImmediate(27675 else => if (src_mcv.isBase()) try self.asmRegisterMemoryImmediate(
25026 mir_tag,27676 mir_tag,
25027 dst_alias,27677 dst_alias,
25028 try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }),27678 try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }),
25029 .u(@as(u5, @bitCast(mode))),27679 mode.imm(),
25030 ) else try self.asmRegisterRegisterImmediate(27680 ) else try self.asmRegisterRegisterImmediate(
25031 mir_tag,27681 mir_tag,
25032 dst_alias,27682 dst_alias,
...@@ -25034,7 +27684,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:...@@ -25034,7 +27684,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
25034 src_mcv.getReg().?27684 src_mcv.getReg().?
25035 else27685 else
25036 try self.copyToTmpRegister(ty, src_mcv), abi_size),27686 try self.copyToTmpRegister(ty, src_mcv), abi_size),
25037 .u(@as(u5, @bitCast(mode))),27687 mode.imm(),
25038 ),27688 ),
25039 }27689 }
25040}27690}
...@@ -25294,7 +27944,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {...@@ -25294,7 +27944,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
25294 .{ .v_, .cvtps2ph },27944 .{ .v_, .cvtps2ph },
25295 dst_reg,27945 dst_reg,
25296 dst_reg,27946 dst_reg,
25297 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),27947 bits.RoundMode.imm(.{}),
25298 );27948 );
25299 break :result dst_mcv;27949 break :result dst_mcv;
25300 },27950 },
...@@ -25324,7 +27974,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {...@@ -25324,7 +27974,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
25324 .{ .v_, .cvtps2ph },27974 .{ .v_, .cvtps2ph },
25325 dst_reg,27975 dst_reg,
25326 dst_reg,27976 dst_reg,
25327 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),27977 bits.RoundMode.imm(.{}),
25328 );27978 );
25329 break :result dst_mcv;27979 break :result dst_mcv;
25330 },27980 },
...@@ -25349,7 +27999,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {...@@ -25349,7 +27999,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
25349 .{ .v_, .cvtps2ph },27999 .{ .v_, .cvtps2ph },
25350 dst_reg,28000 dst_reg,
25351 wide_reg,28001 wide_reg,
25352 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),28002 bits.RoundMode.imm(.{}),
25353 );28003 );
25354 break :result dst_mcv;28004 break :result dst_mcv;
25355 },28005 },
...@@ -27613,7 +30263,7 @@ fn genBinOp(...@@ -27613,7 +30263,7 @@ fn genBinOp(
27613 .{ .v_, .cvtps2ph },30263 .{ .v_, .cvtps2ph },
27614 dst_reg,30264 dst_reg,
27615 dst_reg,30265 dst_reg,
27616 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),30266 bits.RoundMode.imm(.{}),
27617 );30267 );
27618 break :adjusted .{ .register = dst_reg };30268 break :adjusted .{ .register = dst_reg };
27619 },30269 },
...@@ -28086,14 +30736,14 @@ fn genBinOp(...@@ -28086,14 +30736,14 @@ fn genBinOp(
28086 dst_reg,30736 dst_reg,
28087 dst_reg,30737 dst_reg,
28088 dst_reg,30738 dst_reg,
28089 .u(@as(u5, @bitCast(RoundMode{30739 bits.RoundMode.imm(.{
28090 .mode = switch (air_tag) {30740 .mode = switch (air_tag) {
28091 .div_trunc => .zero,30741 .div_trunc => .zero,
28092 .div_floor => .down,30742 .div_floor => .down,
28093 else => unreachable,30743 else => unreachable,
28094 },30744 },
28095 .precision = .inexact,30745 .precision = .inexact,
28096 }))),30746 }),
28097 ),30747 ),
28098 else => {},30748 else => {},
28099 }30749 }
...@@ -28101,7 +30751,7 @@ fn genBinOp(...@@ -28101,7 +30751,7 @@ fn genBinOp(
28101 .{ .v_, .cvtps2ph },30751 .{ .v_, .cvtps2ph },
28102 dst_reg,30752 dst_reg,
28103 dst_reg,30753 dst_reg,
28104 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),30754 bits.RoundMode.imm(.{}),
28105 );30755 );
28106 return dst_mcv;30756 return dst_mcv;
28107 },30757 },
...@@ -28529,7 +31179,7 @@ fn genBinOp(...@@ -28529,7 +31179,7 @@ fn genBinOp(
28529 .{ .v_, .cvtps2ph },31179 .{ .v_, .cvtps2ph },
28530 dst_reg,31180 dst_reg,
28531 dst_reg,31181 dst_reg,
28532 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),31182 bits.RoundMode.imm(.{}),
28533 );31183 );
28534 return dst_mcv;31184 return dst_mcv;
28535 },31185 },
...@@ -28581,7 +31231,7 @@ fn genBinOp(...@@ -28581,7 +31231,7 @@ fn genBinOp(
28581 .{ .v_, .cvtps2ph },31231 .{ .v_, .cvtps2ph },
28582 dst_reg,31232 dst_reg,
28583 dst_reg,31233 dst_reg,
28584 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),31234 bits.RoundMode.imm(.{}),
28585 );31235 );
28586 return dst_mcv;31236 return dst_mcv;
28587 },31237 },
...@@ -28624,7 +31274,7 @@ fn genBinOp(...@@ -28624,7 +31274,7 @@ fn genBinOp(
28624 .{ .v_, .cvtps2ph },31274 .{ .v_, .cvtps2ph },
28625 dst_reg,31275 dst_reg,
28626 dst_reg,31276 dst_reg,
28627 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),31277 bits.RoundMode.imm(.{}),
28628 );31278 );
28629 return dst_mcv;31279 return dst_mcv;
28630 },31280 },
...@@ -28667,7 +31317,7 @@ fn genBinOp(...@@ -28667,7 +31317,7 @@ fn genBinOp(
28667 .{ .v_, .cvtps2ph },31317 .{ .v_, .cvtps2ph },
28668 dst_reg,31318 dst_reg,
28669 dst_reg.to256(),31319 dst_reg.to256(),
28670 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),31320 bits.RoundMode.imm(.{}),
28671 );31321 );
28672 return dst_mcv;31322 return dst_mcv;
28673 },31323 },
...@@ -28932,7 +31582,7 @@ fn genBinOp(...@@ -28932,7 +31582,7 @@ fn genBinOp(
28932 mask_reg,31582 mask_reg,
28933 rhs_copy_reg,31583 rhs_copy_reg,
28934 rhs_copy_reg,31584 rhs_copy_reg,
28935 .u(3), // unord31585 bits.VexFloatPredicate.imm(.unord),
28936 );31586 );
28937 try self.asmRegisterRegisterRegisterRegister(31587 try self.asmRegisterRegisterRegisterRegister(
28938 @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) {31588 @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) {
...@@ -28999,7 +31649,7 @@ fn genBinOp(...@@ -28999,7 +31649,7 @@ fn genBinOp(
28999 }),31649 }),
29000 mask_reg,31650 mask_reg,
29001 mask_reg,31651 mask_reg,
29002 .u(if (has_blend) 3 else 7), // unord, ord31652 bits.SseFloatPredicate.imm(if (has_blend) .unord else .ord),
29003 );31653 );
29004 if (has_blend) try self.asmRegisterRegisterRegister(31654 if (has_blend) try self.asmRegisterRegisterRegister(
29005 @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) {31655 @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) {
...@@ -29836,24 +32486,10 @@ fn airArg(self: *CodeGen, inst: Air.Inst.Index) !void {...@@ -29836,24 +32486,10 @@ fn airArg(self: *CodeGen, inst: Air.Inst.Index) !void {
29836 return self.finishAir(inst, result, .{ .none, .none, .none });32486 return self.finishAir(inst, result, .{ .none, .none, .none });
29837}32487}
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
29855fn airDbgVarArgs(self: *CodeGen) !void {32489fn 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);
29857}32493}
2985832494
29859fn genLocalDebugInfo(32495fn genLocalDebugInfo(
...@@ -30909,44 +33545,6 @@ fn genTry(...@@ -30909,44 +33545,6 @@ fn genTry(
30909 return result;33545 return result;
30910}33546}
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
30950fn airDbgVar(self: *CodeGen, inst: Air.Inst.Index) !void {33548fn airDbgVar(self: *CodeGen, inst: Air.Inst.Index) !void {
30951 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;33549 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
30952 try self.genLocalDebugInfo(inst, try self.resolveInst(pl_op.operand));33550 try self.genLocalDebugInfo(inst, try self.resolveInst(pl_op.operand));
...@@ -31392,14 +33990,6 @@ fn airLoop(self: *CodeGen, inst: Air.Inst.Index) !void {...@@ -31392,14 +33990,6 @@ fn airLoop(self: *CodeGen, inst: Air.Inst.Index) !void {
31392 try self.genBodyBlock(body);33990 try self.genBodyBlock(body);
31393}33991}
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
31403fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index) !void {33993fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index) !void {
31404 // A block is a setup to be able to jump to the end.33994 // A block is a setup to be able to jump to the end.
31405 const inst_tracking_i = self.inst_tracking.count();33995 const inst_tracking_i = self.inst_tracking.count();
...@@ -32653,10 +35243,21 @@ const MoveStrategy = union(enum) {...@@ -32653,10 +35243,21 @@ const MoveStrategy = union(enum) {
32653 else => dst_reg,35243 else => dst_reg,
32654 .lea => if (dst_reg.bitSize() >= 32) dst_reg else dst_reg.to32(),35244 .lea => if (dst_reg.bitSize() >= 32) dst_reg else dst_reg.to32(),
32655 }, src_mem),35245 }, 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);
32657 try self.asmMemory(.{ .f_, .ld }, src_mem);35255 try self.asmMemory(.{ .f_, .ld }, src_mem);
32658 assert(dst_reg != .st7);35256 switch (dst_reg) {
32659 try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1));35257 .st0 => {},
35258 .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, dst_reg),
35259 else => unreachable,
35260 }
32660 },35261 },
32661 .insert_extract => |ie| if (ie.insert[0] != .p_w or self.hasFeature(.sse2))35262 .insert_extract => |ie| if (ie.insert[0] != .p_w or self.hasFeature(.sse2))
32662 try self.asmRegisterMemoryImmediate(ie.insert, dst_reg, src_mem, .u(0))35263 try self.asmRegisterMemoryImmediate(ie.insert, dst_reg, src_mem, .u(0))
...@@ -32688,9 +35289,22 @@ const MoveStrategy = union(enum) {...@@ -32688,9 +35289,22 @@ const MoveStrategy = union(enum) {
32688 pub fn write(strat: MoveStrategy, self: *CodeGen, dst_mem: Memory, src_reg: Register) !void {35289 pub fn write(strat: MoveStrategy, self: *CodeGen, dst_mem: Memory, src_reg: Register) !void {
32689 switch (strat) {35290 switch (strat) {
32690 .move => |tag| try self.asmMemoryRegister(tag, dst_mem, src_reg),35291 .move => |tag| try self.asmMemoryRegister(tag, dst_mem, src_reg),
32691 .x87_load_store => {35292 .x87_load_store => if (self.register_manager.isKnownRegFree(.st7)) {
32692 try self.asmRegister(.{ .f_, .ld }, src_reg);35293 try self.asmRegister(.{ .f_, .ld }, src_reg);
32693 try self.asmMemory(.{ .f_p, .st }, dst_mem);35294 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 }
32694 },35308 },
32695 .insert_extract, .vex_insert_extract => |ie| if (ie.extract[0] != .p_w or self.hasFeature(.sse4_1))35309 .insert_extract, .vex_insert_extract => |ie| if (ie.extract[0] != .p_w or self.hasFeature(.sse4_1))
32696 try self.asmMemoryRegisterImmediate(ie.extract, dst_mem, src_reg, .u(0))35310 try self.asmMemoryRegisterImmediate(ie.extract, dst_mem, src_reg, .u(0))
...@@ -33247,10 +35861,25 @@ fn genSetReg(...@@ -33247,10 +35861,25 @@ fn genSetReg(
33247 .general_purpose, .segment => unreachable,35861 .general_purpose, .segment => unreachable,
33248 .x87 => switch (src_reg) {35862 .x87 => switch (src_reg) {
33249 .st0 => try self.asmRegister(.{ .f_, .st }, dst_reg),35863 .st0 => try self.asmRegister(.{ .f_, .st }, dst_reg),
33250 .st1, .st2, .st3, .st4, .st5, .st6 => {35864 .st1, .st2, .st3, .st4, .st5, .st6 => switch (dst_reg) {
33251 try self.asmRegister(.{ .f_, .ld }, src_reg);35865 .st0 => {
33252 assert(dst_reg != .st7);35866 try self.asmRegister(.{ .f_p, .st }, .st0);
33253 try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1));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,
33254 },35883 },
33255 else => unreachable,35884 else => unreachable,
33256 },35885 },
...@@ -33276,10 +35905,14 @@ fn genSetReg(...@@ -33276,10 +35905,14 @@ fn genSetReg(
33276 .base = .{ .frame = frame_index },35905 .base = .{ .frame = frame_index },
33277 .mod = .{ .rm = .{ .size = .fromSize(abi_size) } },35906 .mod = .{ .rm = .{ .size = .fromSize(abi_size) } },
33278 }, registerAlias(src_reg, abi_size));35907 }, 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 }
33279 try self.asmRegisterMemory(switch (frame_size) {35912 try self.asmRegisterMemory(switch (frame_size) {
33280 4 => .{ ._ss, .mov },35913 4 => .{ ._ss, .mov },
33281 8 => .{ ._ps, .movl },35914 8 => .{ ._ps, .movl },
33282 16 => .{ ._ps, .mov },35915 16 => .{ ._ps, .mova },
33283 else => unreachable,35916 else => unreachable,
33284 }, dst_reg.to128(), .{35917 }, dst_reg.to128(), .{
33285 .base = .{ .frame = frame_index },35918 .base = .{ .frame = frame_index },
...@@ -33292,7 +35925,26 @@ fn genSetReg(...@@ -33292,7 +35925,26 @@ fn genSetReg(
33292 .{ .register = try self.copyToTmpRegister(ty, src_mcv) },35925 .{ .register = try self.copyToTmpRegister(ty, src_mcv) },
33293 opts,35926 opts,
33294 ),35927 ),
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,
33296 .sse => try self.asmRegisterRegister(35948 .sse => try self.asmRegisterRegister(
33297 @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) {35949 @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) {
33298 else => switch (abi_size) {35950 else => switch (abi_size) {
...@@ -37793,7 +40445,7 @@ fn resolveCallingConventionValues(...@@ -37793,7 +40445,7 @@ fn resolveCallingConventionValues(
37793 else if (ret_gpr.len >= 2 and ret_ty.isSliceAtRuntime(zcu))40445 else if (ret_gpr.len >= 2 and ret_ty.isSliceAtRuntime(zcu))
37794 break :return_value .init(.{ .register_pair = ret_gpr[0..2].* }),40446 break :return_value .init(.{ .register_pair = ret_gpr[0..2].* }),
37795 .segment, .mmx, .ip, .cr, .dr => unreachable,40447 .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 }),
37797 .sse => if (ret_size <= self.vectorSize(.float)) break :return_value .init(.{40449 .sse => if (ret_size <= self.vectorSize(.float)) break :return_value .init(.{
37798 .register = registerAlias(abi.getCAbiSseReturnRegs(cc)[0], @max(ret_size, 16)),40450 .register = registerAlias(abi.getCAbiSseReturnRegs(cc)[0], @max(ret_size, 16)),
37799 }),40451 }),
...@@ -37828,7 +40480,7 @@ fn resolveCallingConventionValues(...@@ -37828,7 +40480,7 @@ fn resolveCallingConventionValues(
37828 continue;40480 continue;
37829 },40481 },
37830 .segment, .mmx, .ip, .cr, .dr => unreachable,40482 .segment, .mmx, .ip, .cr, .dr => unreachable,
37831 .x87 => if (param_x87.len >= 1) {40483 .x87 => if (param_x87.len >= 1 and param_size <= 16) {
37832 arg.* = .{ .register = param_x87[0] };40484 arg.* = .{ .register = param_x87[0] };
37833 param_x87 = param_x87[1..];40485 param_x87 = param_x87[1..];
37834 continue;40486 continue;
...@@ -37939,10 +40591,12 @@ fn registerAlias(reg: Register, size_bytes: u32) Register {...@@ -37939,10 +40591,12 @@ fn registerAlias(reg: Register, size_bytes: u32) Register {
3793940591
37940fn memSize(self: *CodeGen, ty: Type) Memory.Size {40592fn memSize(self: *CodeGen, ty: Type) Memory.Size {
37941 const zcu = self.pt.zcu;40593 const zcu = self.pt.zcu;
37942 return switch (ty.zigTypeTag(zcu)) {40594 return if (self.floatBits(ty)) |float_bits|
37943 .float => .fromBitSize(ty.floatBits(self.target.*)),40595 .fromBitSize(float_bits)
37944 else => .fromSize(@intCast(ty.abiSize(zcu))),40596 else if (ty.isVector(zcu) and ty.vectorLen(zcu) == 1 and self.floatBits(ty.childType(zcu)) == 80)
37945 };40597 .tbyte
40598 else
40599 .fromSize(@intCast(ty.abiSize(zcu)));
37946}40600}
3794740601
37948fn splitType(self: *CodeGen, comptime parts_len: usize, ty: Type) ![parts_len]Type {40602fn splitType(self: *CodeGen, comptime parts_len: usize, ty: Type) ![parts_len]Type {
...@@ -39918,46 +42572,46 @@ const Select = struct {...@@ -39918,46 +42572,46 @@ const Select = struct {
39918 inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg),42572 inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg),
39919 }42573 }
39920 }42574 }
39921 };
3992242575
39923 fn pass(spec: TempSpec) u2 {42576 fn pass(kind: Kind) u2 {
39924 return switch (spec.kind) {42577 return switch (kind) {
39925 .unused => 0,42578 .unused => 0,
39926 .reg => 1,42579 .reg => 1,
39927 else => 2,42580 else => 2,
39928 };42581 };
39929 }42582 }
42583 };
3993042584
39931 fn create(spec: TempSpec, s: *Select) !Temp {42585 fn create(spec: TempSpec, s: *Select) !struct { Temp, bool } {
39932 const cg = s.cg;42586 const cg = s.cg;
39933 return switch (spec.kind) {42587 return switch (spec.kind) {
39934 .unused => unreachable,42588 .unused => unreachable,
39935 .any => try cg.tempAlloc(spec.type),42589 .any => .{ try cg.tempAlloc(spec.type), true },
39936 .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }),42590 .cc => |cc| .{ try cg.tempInit(spec.type, .{ .eflags = cc }), true },
39937 .ref => |ref| ref.deref(s),42591 .ref => |ref| .{ ref.deref(s), false },
39938 .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }),42592 .reg => |reg| .{ try cg.tempInit(spec.type, .{ .register = reg }), true },
39939 .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)),42593 .rc => |rc| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), true },
39940 .mut_rc => |ref_rc| {42594 .mut_rc => |ref_rc| {
39941 const temp = ref_rc.ref.deref(s);42595 const temp = ref_rc.ref.deref(s);
39942 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {42596 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
39943 .register => |reg| if (reg.class() == ref_rc.rc) return temp,42597 .register => |reg| if (reg.class() == ref_rc.rc) return .{ temp, false },
39944 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp,42598 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return .{ temp, false },
39945 else => {},42599 else => {},
39946 };42600 };
39947 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc));42601 return .{ try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc)), true };
39948 },42602 },
39949 .ref_mask => |ref_mask| ref_mask.ref.deref(s),42603 .ref_mask => |ref_mask| .{ ref_mask.ref.deref(s), false },
39950 .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)),42604 .rc_mask => |rc_mask| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), true },
39951 .mut_rc_mask => |ref_rc_mask| {42605 .mut_rc_mask => |ref_rc_mask| {
39952 const temp = ref_rc_mask.ref.deref(s);42606 const temp = ref_rc_mask.ref.deref(s);
39953 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {42607 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
39954 .register => |reg| if (reg.class() == ref_rc_mask.rc) return temp,42608 .register => |reg| if (reg.class() == ref_rc_mask.rc) return .{ temp, false },
39955 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return temp,42609 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return .{ temp, false },
39956 else => {},42610 else => {},
39957 };42611 };
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 };
39959 },42613 },
39960 .mem => try cg.tempAllocMem(spec.type),42614 .mem => .{ try cg.tempAllocMem(spec.type), true },
39961 .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| {42615 .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| {
39962 const pt = cg.pt;42616 const pt = cg.pt;
39963 const zcu = pt.zcu;42617 const zcu = pt.zcu;
...@@ -40022,13 +42676,16 @@ const Select = struct {...@@ -40022,13 +42676,16 @@ const Select = struct {
40022 })).toIntern(),42676 })).toIntern(),
40023 .storage = .{ .repeated_elem = res_scalar_val.toIntern() },42677 .storage = .{ .repeated_elem = res_scalar_val.toIntern() },
40024 } })) else res_scalar_val;42678 } })) else res_scalar_val;
40025 return try cg.tempMemFromValue(res_val);42679 return .{ try cg.tempMemFromValue(res_val), true };
40026 },42680 },
40027 .symbol => |symbol| if (cg.bin_file.cast(.elf)) |elf_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{42681 .symbol => |symbol| .{ try cg.tempInit(spec.type, .{ .lea_symbol = .{
40028 .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib),42682 .sym_index = if (cg.bin_file.cast(.elf)) |elf_file|
40029 } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{42683 try elf_file.getGlobalSymbol(symbol.name, symbol.lib)
40030 .sym_index = try macho_file.getGlobalSymbol(symbol.name, symbol.lib),42684 else if (cg.bin_file.cast(.macho)) |macho_file|
40031 } }) else cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}),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 },
40032 };42689 };
40033 }42690 }
40034 };42691 };
...@@ -40042,7 +42699,7 @@ const Select = struct {...@@ -40042,7 +42699,7 @@ const Select = struct {
40042 Select.Operand,42699 Select.Operand,
40043 Select.Operand,42700 Select.Operand,
40044 };42701 };
40045 const Label = enum { @"0:", @"1:", @"_" };42702 const Label = enum { @"0:", @"1:", @"2:", @"_" };
40046 const Operand = struct {42703 const Operand = struct {
40047 tag: Tag,42704 tag: Tag,
40048 base: Ref.Sized = .none,42705 base: Ref.Sized = .none,
...@@ -40272,6 +42929,8 @@ const Select = struct {...@@ -40272,6 +42929,8 @@ const Select = struct {
40272 const @"0f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp0, .size = .none } };42929 const @"0f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp0, .size = .none } };
40273 const @"1b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp1, .size = .none } };42930 const @"1b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp1, .size = .none } };
40274 const @"1f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp1, .size = .none } };42931 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
40276 const tmp0b: Select.Operand = .{ .tag = .ref, .base = .tmp0b };42935 const tmp0b: Select.Operand = .{ .tag = .ref, .base = .tmp0b };
40277 const tmp0w: Select.Operand = .{ .tag = .ref, .base = .tmp0w };42936 const tmp0w: Select.Operand = .{ .tag = .ref, .base = .tmp0w };
...@@ -40390,14 +43049,24 @@ const Select = struct {...@@ -40390,14 +43049,24 @@ const Select = struct {
40390 fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand {43049 fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand {
40391 return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm };43050 return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm };
40392 }43051 }
40393 fn ui(imm: i32) Select.Operand {43052 fn ui(imm: u32) Select.Operand {
40394 return .{ .tag = .uimm, .imm = imm };43053 return .{ .tag = .uimm, .imm = @bitCast(imm) };
40395 }43054 }
40396 fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand {43055 fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand {
40397 return .{ .tag = .uimm, .base = base, .adjust = adjust };43056 return .{ .tag = .uimm, .base = base, .adjust = adjust };
40398 }43057 }
40399 fn uia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand {43058 fn uia(imm: u32, base: Ref.Sized, adjust: Adjust) Select.Operand {
40400 return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = imm };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) };
40401 }43070 }
4040243071
40403 fn lea(size: Memory.Size, base: Ref) Select.Operand {43072 fn lea(size: Memory.Size, base: Ref) Select.Operand {
...@@ -40705,6 +43374,7 @@ fn select(...@@ -40705,6 +43374,7 @@ fn select(
40705 .ccc => cg.target.cCallingConvention().?,43374 .ccc => cg.target.cCallingConvention().?,
40706 .zigcc => .auto,43375 .zigcc => .auto,
40707 };43376 };
43377 assert(case.clobbers.eflags);
40708 const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: {43378 const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: {
40709 const param_gpr = abi.getCAbiIntParamRegs(.auto);43379 const param_gpr = abi.getCAbiIntParamRegs(.auto);
40710 break :err_ret_trace_reg param_gpr[param_gpr.len - 1];43380 break :err_ret_trace_reg param_gpr[param_gpr.len - 1];
...@@ -40722,8 +43392,14 @@ fn select(...@@ -40722,8 +43392,14 @@ fn select(
4072243392
40723 @memcpy(src_slots[0..src_temps.len], src_temps);43393 @memcpy(src_slots[0..src_temps.len], src_temps);
40724 std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]);43394 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()) {43395 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| {
40726 slot.* = try spec.create(&s);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);
40727 };43403 };
4072843404
40729 while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| {43405 while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| {
...@@ -40734,8 +43410,10 @@ fn select(...@@ -40734,8 +43410,10 @@ fn select(
4073443410
40735 if (case.clobbers.eflags) try cg.spillEflagsIfOccupied();43411 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|43413 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));43414 if (dst_kind.pass() != 2) continue;
43415 dst_temp.*, _ = try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s);
43416 }
40739 @memcpy(dst_slots[0..dst_temps.len], dst_temps);43417 @memcpy(dst_slots[0..dst_temps.len], dst_temps);
4074043418
40741 switch (case.each) {43419 switch (case.each) {
...@@ -40765,7 +43443,7 @@ fn select(...@@ -40765,7 +43443,7 @@ fn select(
40765 }43443 }
40766 }43444 }
40767 for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s);43445 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);
40769 return;43447 return;
40770 }43448 }
40771 }43449 }
src/arch/x86_64/Mir.zig+1-1
...@@ -467,7 +467,7 @@ pub const Inst = struct {...@@ -467,7 +467,7 @@ pub const Inst = struct {
467 /// Mask ___ Quadword467 /// Mask ___ Quadword
468 k_q,468 k_q,
469469
470 pub fn fromCondition(cc: bits.Condition) Fixes {470 pub fn fromCond(cc: bits.Condition) Fixes {
471 return switch (cc) {471 return switch (cc) {
472 inline else => |cc_tag| @field(Fixes, "_" ++ @tagName(cc_tag)),472 inline else => |cc_tag| @field(Fixes, "_" ++ @tagName(cc_tag)),
473 .z_and_np, .nz_or_p => unreachable,473 .z_and_np, .nz_or_p => unreachable,
src/arch/x86_64/bits.zig+166
...@@ -177,6 +177,172 @@ pub const Condition = enum(u5) {...@@ -177,6 +177,172 @@ pub const Condition = enum(u5) {
177 }177 }
178};178};
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
180pub const Register = enum(u8) {346pub const Register = enum(u8) {
181 // zig fmt: off347 // zig fmt: off
182 rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi,348 rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi,
test/behavior/maximum_minimum.zig+1-1
...@@ -121,8 +121,8 @@ test "@min/max for floats" {...@@ -121,8 +121,8 @@ test "@min/max for floats" {
121 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO121 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
122 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;122 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
123 if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArm()) return error.SkipZigTest;123 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;
125 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;124 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
127 const S = struct {127 const S = struct {
128 fn doTheTest(comptime T: type) !void {128 fn doTheTest(comptime T: type) !void {
test/behavior/x86_64/build.zig+6
...@@ -35,6 +35,12 @@ pub fn build(b: *std.Build) void {...@@ -35,6 +35,12 @@ pub fn build(b: *std.Build) void {
35 .sse2,35 .sse2,
36 }),36 }),
37 },37 },
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 },
38 //.{44 //.{
39 // .cpu_arch = .x86_64,45 // .cpu_arch = .x86_64,
40 // .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64 },46 // .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) {...@@ -73,14 +73,20 @@ inline fn boolOr(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
73}73}
7474
75// noinline for a more helpful stack trace75// 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 {
77 const info = @typeInfo(@TypeOf(expected));77 const info = @typeInfo(@TypeOf(expected));
78 const unexpected = switch (switch (info) {78 const unexpected = unexpected: switch (switch (info) {
79 else => info,79 else => info,
80 .vector => |vector| @typeInfo(vector.child),80 .vector => |vector| @typeInfo(vector.child),
81 }) {81 }) {
82 else => expected != actual,82 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 },
84 };90 };
85 if (switch (info) {91 if (switch (info) {
86 else => unexpected,92 else => unexpected,
...@@ -88,43 +94,43 @@ noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected)) !void {...@@ -88,43 +94,43 @@ noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected)) !void {
88 }) return error.Unexpected;94 }) return error.Unexpected;
89}95}
90test checkExpected {96test checkExpected {
91 if (checkExpected(nan(f16), nan(f16)) == error.Unexpected) return error.Unexpected;97 if (checkExpected(nan(f16), nan(f16), true) == error.Unexpected) return error.Unexpected;
92 if (checkExpected(nan(f16), -nan(f16)) != error.Unexpected) return error.Unexpected;98 if (checkExpected(nan(f16), -nan(f16), true) != error.Unexpected) return error.Unexpected;
93 if (checkExpected(@as(f16, 0.0), @as(f16, 0.0)) == error.Unexpected) return error.Unexpected;99 if (checkExpected(@as(f16, 0.0), @as(f16, 0.0), true) == error.Unexpected) return error.Unexpected;
94 if (checkExpected(@as(f16, -0.0), @as(f16, -0.0)) == error.Unexpected) return error.Unexpected;100 if (checkExpected(@as(f16, -0.0), @as(f16, -0.0), true) == error.Unexpected) return error.Unexpected;
95 if (checkExpected(@as(f16, -0.0), @as(f16, 0.0)) != error.Unexpected) return error.Unexpected;101 if (checkExpected(@as(f16, -0.0), @as(f16, 0.0), true) != error.Unexpected) return error.Unexpected;
96 if (checkExpected(@as(f16, 0.0), @as(f16, -0.0)) != error.Unexpected) return error.Unexpected;102 if (checkExpected(@as(f16, 0.0), @as(f16, -0.0), true) != error.Unexpected) return error.Unexpected;
97103
98 if (checkExpected(nan(f32), nan(f32)) == error.Unexpected) return error.Unexpected;104 if (checkExpected(nan(f32), nan(f32), true) == error.Unexpected) return error.Unexpected;
99 if (checkExpected(nan(f32), -nan(f32)) != error.Unexpected) return error.Unexpected;105 if (checkExpected(nan(f32), -nan(f32), true) != error.Unexpected) return error.Unexpected;
100 if (checkExpected(@as(f32, 0.0), @as(f32, 0.0)) == error.Unexpected) return error.Unexpected;106 if (checkExpected(@as(f32, 0.0), @as(f32, 0.0), true) == error.Unexpected) return error.Unexpected;
101 if (checkExpected(@as(f32, -0.0), @as(f32, -0.0)) == error.Unexpected) return error.Unexpected;107 if (checkExpected(@as(f32, -0.0), @as(f32, -0.0), true) == error.Unexpected) return error.Unexpected;
102 if (checkExpected(@as(f32, -0.0), @as(f32, 0.0)) != error.Unexpected) return error.Unexpected;108 if (checkExpected(@as(f32, -0.0), @as(f32, 0.0), true) != error.Unexpected) return error.Unexpected;
103 if (checkExpected(@as(f32, 0.0), @as(f32, -0.0)) != error.Unexpected) return error.Unexpected;109 if (checkExpected(@as(f32, 0.0), @as(f32, -0.0), true) != error.Unexpected) return error.Unexpected;
104110
105 if (checkExpected(nan(f64), nan(f64)) == error.Unexpected) return error.Unexpected;111 if (checkExpected(nan(f64), nan(f64), true) == error.Unexpected) return error.Unexpected;
106 if (checkExpected(nan(f64), -nan(f64)) != error.Unexpected) return error.Unexpected;112 if (checkExpected(nan(f64), -nan(f64), true) != error.Unexpected) return error.Unexpected;
107 if (checkExpected(@as(f64, 0.0), @as(f64, 0.0)) == error.Unexpected) return error.Unexpected;113 if (checkExpected(@as(f64, 0.0), @as(f64, 0.0), true) == error.Unexpected) return error.Unexpected;
108 if (checkExpected(@as(f64, -0.0), @as(f64, -0.0)) == error.Unexpected) return error.Unexpected;114 if (checkExpected(@as(f64, -0.0), @as(f64, -0.0), true) == error.Unexpected) return error.Unexpected;
109 if (checkExpected(@as(f64, -0.0), @as(f64, 0.0)) != error.Unexpected) return error.Unexpected;115 if (checkExpected(@as(f64, -0.0), @as(f64, 0.0), true) != error.Unexpected) return error.Unexpected;
110 if (checkExpected(@as(f64, 0.0), @as(f64, -0.0)) != error.Unexpected) return error.Unexpected;116 if (checkExpected(@as(f64, 0.0), @as(f64, -0.0), true) != error.Unexpected) return error.Unexpected;
111117
112 if (checkExpected(nan(f80), nan(f80)) == error.Unexpected) return error.Unexpected;118 if (checkExpected(nan(f80), nan(f80), true) == error.Unexpected) return error.Unexpected;
113 if (checkExpected(nan(f80), -nan(f80)) != error.Unexpected) return error.Unexpected;119 if (checkExpected(nan(f80), -nan(f80), true) != error.Unexpected) return error.Unexpected;
114 if (checkExpected(@as(f80, 0.0), @as(f80, 0.0)) == error.Unexpected) return error.Unexpected;120 if (checkExpected(@as(f80, 0.0), @as(f80, 0.0), true) == error.Unexpected) return error.Unexpected;
115 if (checkExpected(@as(f80, -0.0), @as(f80, -0.0)) == error.Unexpected) return error.Unexpected;121 if (checkExpected(@as(f80, -0.0), @as(f80, -0.0), true) == error.Unexpected) return error.Unexpected;
116 if (checkExpected(@as(f80, -0.0), @as(f80, 0.0)) != error.Unexpected) return error.Unexpected;122 if (checkExpected(@as(f80, -0.0), @as(f80, 0.0), true) != error.Unexpected) return error.Unexpected;
117 if (checkExpected(@as(f80, 0.0), @as(f80, -0.0)) != error.Unexpected) return error.Unexpected;123 if (checkExpected(@as(f80, 0.0), @as(f80, -0.0), true) != error.Unexpected) return error.Unexpected;
118124
119 if (checkExpected(nan(f128), nan(f128)) == error.Unexpected) return error.Unexpected;125 if (checkExpected(nan(f128), nan(f128), true) == error.Unexpected) return error.Unexpected;
120 if (checkExpected(nan(f128), -nan(f128)) != error.Unexpected) return error.Unexpected;126 if (checkExpected(nan(f128), -nan(f128), true) != error.Unexpected) return error.Unexpected;
121 if (checkExpected(@as(f128, 0.0), @as(f128, 0.0)) == error.Unexpected) return error.Unexpected;127 if (checkExpected(@as(f128, 0.0), @as(f128, 0.0), true) == error.Unexpected) return error.Unexpected;
122 if (checkExpected(@as(f128, -0.0), @as(f128, -0.0)) == error.Unexpected) return error.Unexpected;128 if (checkExpected(@as(f128, -0.0), @as(f128, -0.0), true) == error.Unexpected) return error.Unexpected;
123 if (checkExpected(@as(f128, -0.0), @as(f128, 0.0)) != error.Unexpected) return error.Unexpected;129 if (checkExpected(@as(f128, -0.0), @as(f128, 0.0), true) != error.Unexpected) return error.Unexpected;
124 if (checkExpected(@as(f128, 0.0), @as(f128, -0.0)) != error.Unexpected) return error.Unexpected;130 if (checkExpected(@as(f128, 0.0), @as(f128, -0.0), true) != error.Unexpected) return error.Unexpected;
125}131}
126132
127fn Unary(comptime op: anytype) type {133fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) type {
128 return struct {134 return struct {
129 // noinline so that `mem_arg` is on the stack135 // noinline so that `mem_arg` is on the stack
130 noinline fn testArgKinds(136 noinline fn testArgKinds(
...@@ -151,9 +157,9 @@ fn Unary(comptime op: anytype) type {...@@ -151,9 +157,9 @@ fn Unary(comptime op: anytype) type {
151 const expected = comptime op(Type, imm_arg);157 const expected = comptime op(Type, imm_arg);
152 var reg_arg = mem_arg;158 var reg_arg = mem_arg;
153 _ = .{&reg_arg};159 _ = .{&reg_arg};
154 try checkExpected(expected, op(Type, reg_arg));160 try checkExpected(expected, op(Type, reg_arg), opts.strict);
155 try checkExpected(expected, op(Type, mem_arg));161 try checkExpected(expected, op(Type, mem_arg), opts.strict);
156 try checkExpected(expected, op(Type, imm_arg));162 try checkExpected(expected, op(Type, imm_arg), opts.strict);
157 }163 }
158 // noinline for a more helpful stack trace164 // noinline for a more helpful stack trace
159 noinline fn testArgs(comptime Type: type, comptime imm_arg: Type) !void {165 noinline fn testArgs(comptime Type: type, comptime imm_arg: Type) !void {
...@@ -1325,7 +1331,7 @@ fn Unary(comptime op: anytype) type {...@@ -1325,7 +1331,7 @@ fn Unary(comptime op: anytype) type {
1325 };1331 };
1326}1332}
13271333
1328fn Binary(comptime op: anytype) type {1334fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) type {
1329 return struct {1335 return struct {
1330 // noinline so that `mem_lhs` and `mem_rhs` are on the stack1336 // noinline so that `mem_lhs` and `mem_rhs` are on the stack
1331 noinline fn testArgKinds(1337 noinline fn testArgKinds(
...@@ -1355,14 +1361,14 @@ fn Binary(comptime op: anytype) type {...@@ -1355,14 +1361,14 @@ fn Binary(comptime op: anytype) type {
1355 var reg_lhs = mem_lhs;1361 var reg_lhs = mem_lhs;
1356 var reg_rhs = mem_rhs;1362 var reg_rhs = mem_rhs;
1357 _ = .{ &reg_lhs, &reg_rhs };1363 _ = .{ &reg_lhs, &reg_rhs };
1358 try checkExpected(expected, op(Type, reg_lhs, reg_rhs));1364 try checkExpected(expected, op(Type, reg_lhs, reg_rhs), opts.strict);
1359 try checkExpected(expected, op(Type, reg_lhs, mem_rhs));1365 try checkExpected(expected, op(Type, reg_lhs, mem_rhs), opts.strict);
1360 try checkExpected(expected, op(Type, reg_lhs, imm_rhs));1366 try checkExpected(expected, op(Type, reg_lhs, imm_rhs), opts.strict);
1361 try checkExpected(expected, op(Type, mem_lhs, reg_rhs));1367 try checkExpected(expected, op(Type, mem_lhs, reg_rhs), opts.strict);
1362 try checkExpected(expected, op(Type, mem_lhs, mem_rhs));1368 try checkExpected(expected, op(Type, mem_lhs, mem_rhs), opts.strict);
1363 try checkExpected(expected, op(Type, mem_lhs, imm_rhs));1369 try checkExpected(expected, op(Type, mem_lhs, imm_rhs), opts.strict);
1364 try checkExpected(expected, op(Type, imm_lhs, reg_rhs));1370 try checkExpected(expected, op(Type, imm_lhs, reg_rhs), opts.strict);
1365 try checkExpected(expected, op(Type, imm_lhs, mem_rhs));1371 try checkExpected(expected, op(Type, imm_lhs, mem_rhs), opts.strict);
1366 }1372 }
1367 // noinline for a more helpful stack trace1373 // noinline for a more helpful stack trace
1368 noinline fn testArgs(comptime Type: type, comptime imm_lhs: Type, comptime imm_rhs: Type) !void {1374 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 {...@@ -1442,6 +1448,1719 @@ fn Binary(comptime op: anytype) type {
1442 0x8b4bb7c2969e3b121cc1082c442f8b4330f0a50058438fed56447175bb10178607ecfe425cb54dacc25ef26810f3e04681de1844f1aa8d029aca75d658634806,1448 0x8b4bb7c2969e3b121cc1082c442f8b4330f0a50058438fed56447175bb10178607ecfe425cb54dacc25ef26810f3e04681de1844f1aa8d029aca75d658634806,
1443 );1449 );
1444 }1450 }
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 }
1445 fn testIntVectorTypes() !void {3164 fn testIntVectorTypes() !void {
1446 try testArgs(@Vector(1, i8), .{3165 try testArgs(@Vector(1, i8), .{
1447 -0x54,3166 -0x54,
...@@ -2062,6 +3781,396 @@ fn Binary(comptime op: anytype) type {...@@ -2062,6 +3781,396 @@ fn Binary(comptime op: anytype) type {
2062 0xf1e3bbe031d59351770a7a501b6e969b2c00d144f17648db3f944b69dfeb7be72e5ff933a061eba4eaa422f8ca09e5a97d0b0dd740fd4076eba8c72d7a278523f399202dc2d043c4e0eb58a2bcd4066e2146e321810b1ee4d3afdddb4f026bcc7905ce17e033a7727b4e08f33b53c63d8c9f763fc6c31d0523eb38c30d5e40bc,3781 0xf1e3bbe031d59351770a7a501b6e969b2c00d144f17648db3f944b69dfeb7be72e5ff933a061eba4eaa422f8ca09e5a97d0b0dd740fd4076eba8c72d7a278523f399202dc2d043c4e0eb58a2bcd4066e2146e321810b1ee4d3afdddb4f026bcc7905ce17e033a7727b4e08f33b53c63d8c9f763fc6c31d0523eb38c30d5e40bc,
2063 });3782 });
2064 }3783 }
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 }
2065 };4174 };
2066}4175}
20674176
...@@ -2069,64 +4178,76 @@ inline fn bitNot(comptime Type: type, rhs: Type) @TypeOf(~rhs) {...@@ -2069,64 +4178,76 @@ inline fn bitNot(comptime Type: type, rhs: Type) @TypeOf(~rhs) {
2069 return ~rhs;4178 return ~rhs;
2070}4179}
2071test bitNot {4180test bitNot {
2072 try Unary(bitNot).testIntTypes();4181 const t = unary(bitNot, .{});
2073 try Unary(bitNot).testIntVectorTypes();4182 try t.testIntTypes();
4183 try t.testIntVectorTypes();
2074}4184}
20754185
2076inline fn abs(comptime Type: type, rhs: Type) @TypeOf(@abs(rhs)) {4186inline fn abs(comptime Type: type, rhs: Type) @TypeOf(@abs(rhs)) {
2077 return @abs(rhs);4187 return @abs(rhs);
2078}4188}
2079test abs {4189test abs {
2080 try Unary(abs).testIntTypes();4190 const t = unary(abs, .{ .strict = true });
2081 try Unary(abs).testIntVectorTypes();4191 try t.testIntTypes();
2082 try Unary(abs).testFloatTypes();4192 try t.testIntVectorTypes();
2083 try Unary(abs).testFloatVectorTypes();4193 try t.testFloatTypes();
4194 try t.testFloatVectorTypes();
2084}4195}
20854196
2086inline fn clz(comptime Type: type, rhs: Type) @TypeOf(@clz(rhs)) {4197inline fn clz(comptime Type: type, rhs: Type) @TypeOf(@clz(rhs)) {
2087 return @clz(rhs);4198 return @clz(rhs);
2088}4199}
2089test clz {4200test clz {
2090 try Unary(clz).testIntTypes();4201 const t = unary(clz, .{});
2091 try Unary(clz).testIntVectorTypes();4202 try t.testIntTypes();
4203 try t.testIntVectorTypes();
2092}4204}
20934205
2094inline fn bitAnd(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs & rhs) {4206inline fn bitAnd(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs & rhs) {
2095 return lhs & rhs;4207 return lhs & rhs;
2096}4208}
2097test bitAnd {4209test bitAnd {
2098 try Binary(bitAnd).testIntTypes();4210 const t = binary(bitAnd, .{});
2099 try Binary(bitAnd).testIntVectorTypes();4211 try t.testIntTypes();
4212 try t.testIntVectorTypes();
2100}4213}
21014214
2102inline fn bitOr(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs | rhs) {4215inline fn bitOr(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs | rhs) {
2103 return lhs | rhs;4216 return lhs | rhs;
2104}4217}
2105test bitOr {4218test bitOr {
2106 try Binary(bitOr).testIntTypes();4219 const t = binary(bitOr, .{});
2107 try Binary(bitOr).testIntVectorTypes();4220 try t.testIntTypes();
4221 try t.testIntVectorTypes();
2108}4222}
21094223
2110inline fn bitXor(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs ^ rhs) {4224inline fn bitXor(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs ^ rhs) {
2111 return lhs ^ rhs;4225 return lhs ^ rhs;
2112}4226}
2113test bitXor {4227test bitXor {
2114 try Binary(bitXor).testIntTypes();4228 const t = binary(bitXor, .{});
2115 try Binary(bitXor).testIntVectorTypes();4229 try t.testIntTypes();
4230 try t.testIntVectorTypes();
2116}4231}
21174232
2118inline fn min(comptime Type: type, lhs: Type, rhs: Type) Type {4233inline fn min(comptime Type: type, lhs: Type, rhs: Type) Type {
2119 return @min(lhs, rhs);4234 return @min(lhs, rhs);
2120}4235}
2121test min {4236test min {
2122 try Binary(min).testIntTypes();4237 const t = binary(min, .{});
2123 try Binary(min).testIntVectorTypes();4238 try t.testIntTypes();
4239 try t.testIntVectorTypes();
4240 try t.testFloatTypes();
4241 try t.testFloatVectorTypes();
2124}4242}
21254243
2126inline fn max(comptime Type: type, lhs: Type, rhs: Type) Type {4244inline fn max(comptime Type: type, lhs: Type, rhs: Type) Type {
2127 return @max(lhs, rhs);4245 return @max(lhs, rhs);
2128}4246}
2129test max {4247test max {
2130 try Binary(max).testIntTypes();4248 const t = binary(max, .{});
2131 try Binary(max).testIntVectorTypes();4249 try t.testIntTypes();
4250 try t.testIntVectorTypes();
4251 try t.testFloatTypes();
4252 try t.testFloatVectorTypes();
2132}4253}