authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-01-25 15:06:35-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-01-26 06:58:37-05:00
log0c890bb9a4d6729b10d9f2ebd73269bcd5ac853b
tree82eadbad2b7555f16965d894969ced0091e0dfd0
parent92b20e42162675d35ffd27845e66b0f9213c00c2

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


7 files changed, 3054 insertions(+), 421 deletions(-)

lib/compiler_rt/extendxftf2.zig+1-8
......@@ -15,8 +15,6 @@ fn __extendxftf2(a: f80) callconv(.C) f128 {
1515
1616 const dst_bits = @bitSizeOf(f128);
1717
18 const dst_min_normal = @as(u128, 1) << dst_sig_bits;
19
2018 // Break a into a sign and representation of the absolute value
2119 var a_rep = std.math.F80.fromFloat(a);
2220 const sign = a_rep.exp & 0x8000;
......@@ -36,12 +34,7 @@ fn __extendxftf2(a: f80) callconv(.C) f128 {
3634 abs_result |= @as(u128, a_rep.exp) << dst_sig_bits;
3735 } else {
3836 // a is denormal
39 // renormalize the significand and clear the leading bit and integer part,
40 // then insert the correct adjusted exponent in the destination type.
41 const scale: u32 = @clz(a_rep.fraction);
42 abs_result = @as(u128, a_rep.fraction) << @intCast(dst_sig_bits - src_sig_bits + scale + 1);
43 abs_result ^= dst_min_normal;
44 abs_result |= @as(u128, scale + 1) << dst_sig_bits;
37 abs_result = @as(u128, a_rep.fraction) << (dst_sig_bits - src_sig_bits);
4538 }
4639
4740 // Apply the signbit to (dst_t)abs(a).
src/arch/x86_64/CodeGen.zig+1082-343
......@@ -1421,7 +1421,7 @@ fn asmCmovccRegisterRegister(self: *CodeGen, cc: Condition, reg1: Register, reg2
14211421 },
14221422 .data = .{ .rr = .{
14231423 .fixes = switch (cc) {
1424 else => .fromCondition(cc),
1424 else => .fromCond(cc),
14251425 .z_and_np, .nz_or_p => ._,
14261426 },
14271427 .r1 = reg1,
......@@ -1449,7 +1449,7 @@ fn asmCmovccRegisterMemory(self: *CodeGen, cc: Condition, reg: Register, m: Memo
14491449 },
14501450 .data = .{ .rx = .{
14511451 .fixes = switch (cc) {
1452 else => .fromCondition(cc),
1452 else => .fromCond(cc),
14531453 .z_and_np => unreachable,
14541454 .nz_or_p => ._,
14551455 },
......@@ -1476,7 +1476,7 @@ fn asmSetccRegister(self: *CodeGen, cc: Condition, reg: Register) !void {
14761476 },
14771477 .data = switch (cc) {
14781478 else => .{ .r = .{
1479 .fixes = .fromCondition(cc),
1479 .fixes = .fromCond(cc),
14801480 .r1 = reg,
14811481 } },
14821482 .z_and_np, .nz_or_p => .{ .rr = .{
......@@ -1501,7 +1501,7 @@ fn asmSetccMemory(self: *CodeGen, cc: Condition, m: Memory) !void {
15011501 },
15021502 .data = switch (cc) {
15031503 else => .{ .x = .{
1504 .fixes = .fromCondition(cc),
1504 .fixes = .fromCond(cc),
15051505 .payload = payload,
15061506 } },
15071507 .z_and_np, .nz_or_p => .{ .rx = .{
......@@ -1536,7 +1536,7 @@ fn asmJccReloc(self: *CodeGen, cc: Condition, target: Mir.Inst.Index) !Mir.Inst.
15361536 },
15371537 .data = .{ .inst = .{
15381538 .fixes = switch (cc) {
1539 else => .fromCondition(cc),
1539 else => .fromCond(cc),
15401540 .z_and_np, .nz_or_p => ._,
15411541 },
15421542 .inst = target,
......@@ -2224,7 +2224,7 @@ fn gen(self: *CodeGen) InnerError!void {
22242224 else => |cc| return self.fail("{s} does not support var args", .{@tagName(cc)}),
22252225 };
22262226
2227 try self.asmPseudo(.pseudo_dbg_prologue_end_none);
2227 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_prologue_end_none);
22282228
22292229 try self.genBody(self.air.getMainBody());
22302230
......@@ -2235,7 +2235,7 @@ fn gen(self: *CodeGen) InnerError!void {
22352235 break :epilogue_relocs self.epilogue_relocs.items[0..epilogue_relocs_last_index];
22362236 } else self.epilogue_relocs.items) |epilogue_reloc| self.performReloc(epilogue_reloc);
22372237
2238 try self.asmPseudo(.pseudo_dbg_epilogue_begin_none);
2238 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_epilogue_begin_none);
22392239 const backpatch_stack_dealloc = try self.asmPlaceholder();
22402240 const backpatch_pop_callee_preserved_regs = try self.asmPlaceholder();
22412241 try self.asmRegister(.{ ._, .pop }, .rbp);
......@@ -2354,15 +2354,15 @@ fn gen(self: *CodeGen) InnerError!void {
23542354 });
23552355 }
23562356 } else {
2357 try self.asmPseudo(.pseudo_dbg_prologue_end_none);
2357 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_prologue_end_none);
23582358 try self.genBody(self.air.getMainBody());
2359 try self.asmPseudo(.pseudo_dbg_epilogue_begin_none);
2359 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_epilogue_begin_none);
23602360 }
23612361
23622362 // Drop them off at the rbrace.
2363 _ = try self.addInst(.{
2363 if (self.debug_output != .none) _ = try self.addInst(.{
23642364 .tag = .pseudo,
2365 .ops = .pseudo_dbg_line_stmt_line_column,
2365 .ops = .pseudo_dbg_line_line_column,
23662366 .data = .{ .line_column = .{
23672367 .line = self.end_di_line,
23682368 .column = self.end_di_column,
......@@ -2387,13 +2387,13 @@ fn checkInvariantsAfterAirInst(self: *CodeGen) void {
23872387}
23882388
23892389fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2390 try self.asmPseudo(.pseudo_dbg_enter_block_none);
2390 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_enter_block_none);
23912391 try self.genBody(body);
2392 try self.asmPseudo(.pseudo_dbg_leave_block_none);
2392 if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_leave_block_none);
23932393}
23942394
23952395fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2396 @setEvalBranchQuota(3_400);
2396 @setEvalBranchQuota(3_600);
23972397 const pt = cg.pt;
23982398 const zcu = pt.zcu;
23992399 const ip = &zcu.intern_pool;
......@@ -2543,7 +2543,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
25432543 .reduce_optimized => try cg.airReduce(inst),
25442544 .int_from_float_optimized => try cg.airIntFromFloat(inst),
25452545
2546 .arg => try cg.airDbgArg(inst),
2546 .arg => if (cg.debug_output != .none) {
2547 // skip zero-bit arguments as they don't have a corresponding arg instruction
2548 var arg_index = cg.arg_index;
2549 while (cg.args[arg_index] == .none) arg_index += 1;
2550 cg.arg_index = arg_index + 1;
2551
2552 const name = air_datas[@intFromEnum(inst)].arg.name;
2553 if (name != .none) try cg.genLocalDebugInfo(inst, cg.getResolvedInstValue(inst).short);
2554 if (cg.liveness.isUnused(inst)) try cg.processDeath(inst);
2555
2556 for (cg.args[arg_index + 1 ..]) |arg| {
2557 if (arg != .none) break;
2558 } else try cg.airDbgVarArgs();
2559 },
25472560 .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else {
25482561 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
25492562 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
......@@ -2794,7 +2807,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
27942807 },
27952808 .max => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: {
27962809 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
2797 if (cg.typeOf(bin_op.lhs).scalarType(zcu).isRuntimeFloat()) break :fallback try cg.airBinOp(inst, air_tag);
2810 const ty = cg.typeOf(bin_op.lhs);
2811 if (ty.isVector(zcu) and cg.floatBits(ty.childType(zcu)) != null) break :fallback try cg.airBinOp(inst, air_tag);
27982812 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
27992813 var res: [1]Temp = undefined;
28002814 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -5359,6 +5373,409 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
53595373 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
53605374 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
53615375 } },
5376 }, .{
5377 .required_features = .{ .f16c, null, null, null },
5378 .src_constraints = .{
5379 .{ .scalar_float = .{ .of = .word, .is = .word } },
5380 .{ .scalar_float = .{ .of = .word, .is = .word } },
5381 },
5382 .patterns = &.{
5383 .{ .src = .{ .to_sse, .to_sse } },
5384 },
5385 .extra_temps = .{
5386 .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
5387 .{ .kind = .{ .rc = .sse } },
5388 .unused,
5389 .unused,
5390 .unused,
5391 .unused,
5392 .unused,
5393 .unused,
5394 .unused,
5395 },
5396 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5397 .each = .{ .once = &.{
5398 .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ },
5399 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ },
5400 .{ ._, .v_ss, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) },
5401 .{ ._, .v_ss, .max, .dst0x, .tmp0x, .dst0x, ._ },
5402 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x },
5403 .{ ._, .v_, .cvtps2ph, .dst0x, .dst0x, .rm(.{}), ._ },
5404 } },
5405 }, .{
5406 .required_features = .{ .sse, null, null, null },
5407 .src_constraints = .{
5408 .{ .scalar_float = .{ .of = .word, .is = .word } },
5409 .{ .scalar_float = .{ .of = .word, .is = .word } },
5410 },
5411 .patterns = &.{
5412 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
5413 },
5414 .call_frame = .{ .alignment = .@"16" },
5415 .extra_temps = .{
5416 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
5417 .unused,
5418 .unused,
5419 .unused,
5420 .unused,
5421 .unused,
5422 .unused,
5423 .unused,
5424 .unused,
5425 },
5426 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5427 .dst_temps = .{.{ .ref = .src0 }},
5428 .each = .{ .once = &.{
5429 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
5430 } },
5431 }, .{
5432 .required_features = .{ .avx, null, null, null },
5433 .src_constraints = .{
5434 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5435 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5436 },
5437 .patterns = &.{
5438 .{ .src = .{ .to_sse, .to_sse } },
5439 },
5440 .extra_temps = .{
5441 .{ .kind = .{ .rc = .sse } },
5442 .unused,
5443 .unused,
5444 .unused,
5445 .unused,
5446 .unused,
5447 .unused,
5448 .unused,
5449 .unused,
5450 },
5451 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5452 .each = .{ .once = &.{
5453 .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
5454 .{ ._, .v_ss, .max, .dst0x, .src1x, .src0x, ._ },
5455 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
5456 } },
5457 }, .{
5458 .required_features = .{ .sse4_1, null, null, null },
5459 .src_constraints = .{
5460 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5461 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5462 },
5463 .patterns = &.{
5464 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
5465 },
5466 .dst_temps = .{.{ .rc = .sse }},
5467 .each = .{ .once = &.{
5468 .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ },
5469 .{ ._, ._ss, .max, .dst0x, .src0x, ._, ._ },
5470 .{ ._, ._ss, .cmp, .src0x, .src0x, .vp(.unord), ._ },
5471 .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ },
5472 } },
5473 }, .{
5474 .required_features = .{ .sse, null, null, null },
5475 .src_constraints = .{
5476 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5477 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
5478 },
5479 .patterns = &.{
5480 .{ .src = .{ .to_mut_sse, .to_sse } },
5481 },
5482 .extra_temps = .{
5483 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
5484 .unused,
5485 .unused,
5486 .unused,
5487 .unused,
5488 .unused,
5489 .unused,
5490 .unused,
5491 .unused,
5492 },
5493 .dst_temps = .{.{ .ref = .src0 }},
5494 .each = .{ .once = &.{
5495 .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ },
5496 .{ ._, ._ss, .max, .tmp0x, .src0x, ._, ._ },
5497 .{ ._, ._ss, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
5498 .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ },
5499 .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ },
5500 .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
5501 } },
5502 }, .{
5503 .required_features = .{ .avx, null, null, null },
5504 .src_constraints = .{
5505 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5506 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5507 },
5508 .patterns = &.{
5509 .{ .src = .{ .to_sse, .to_sse } },
5510 },
5511 .extra_temps = .{
5512 .{ .kind = .{ .rc = .sse } },
5513 .unused,
5514 .unused,
5515 .unused,
5516 .unused,
5517 .unused,
5518 .unused,
5519 .unused,
5520 .unused,
5521 },
5522 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
5523 .each = .{ .once = &.{
5524 .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
5525 .{ ._, .v_sd, .max, .dst0x, .src1x, .src0x, ._ },
5526 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
5527 } },
5528 }, .{
5529 .required_features = .{ .sse4_1, null, null, null },
5530 .src_constraints = .{
5531 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5532 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5533 },
5534 .patterns = &.{
5535 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
5536 },
5537 .dst_temps = .{.{ .rc = .sse }},
5538 .each = .{ .once = &.{
5539 .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ },
5540 .{ ._, ._sd, .max, .dst0x, .src0x, ._, ._ },
5541 .{ ._, ._sd, .cmp, .src0x, .src0x, .vp(.unord), ._ },
5542 .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ },
5543 } },
5544 }, .{
5545 .required_features = .{ .sse2, null, null, null },
5546 .src_constraints = .{
5547 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5548 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5549 },
5550 .patterns = &.{
5551 .{ .src = .{ .to_mut_sse, .to_sse } },
5552 },
5553 .extra_temps = .{
5554 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
5555 .unused,
5556 .unused,
5557 .unused,
5558 .unused,
5559 .unused,
5560 .unused,
5561 .unused,
5562 .unused,
5563 },
5564 .dst_temps = .{.{ .ref = .src0 }},
5565 .each = .{ .once = &.{
5566 .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ },
5567 .{ ._, ._sd, .max, .tmp0x, .src0x, ._, ._ },
5568 .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
5569 .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ },
5570 .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ },
5571 .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
5572 } },
5573 }, .{
5574 .required_features = .{ .sse, null, null, null },
5575 .src_constraints = .{
5576 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5577 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
5578 },
5579 .patterns = &.{
5580 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
5581 },
5582 .call_frame = .{ .alignment = .@"16" },
5583 .extra_temps = .{
5584 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmax" } } },
5585 .unused,
5586 .unused,
5587 .unused,
5588 .unused,
5589 .unused,
5590 .unused,
5591 .unused,
5592 .unused,
5593 },
5594 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5595 .dst_temps = .{.{ .ref = .src0 }},
5596 .each = .{ .once = &.{
5597 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
5598 } },
5599 }, .{
5600 .required_features = .{ .x87, .cmov, null, null },
5601 .src_constraints = .{
5602 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
5603 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
5604 },
5605 .patterns = &.{
5606 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
5607 .{ .src = .{ .mem, .to_x87 } },
5608 .{ .src = .{ .to_x87, .to_x87 } },
5609 },
5610 .extra_temps = .{
5611 .{ .type = .f80, .kind = .{ .reg = .st7 } },
5612 .unused,
5613 .unused,
5614 .unused,
5615 .unused,
5616 .unused,
5617 .unused,
5618 .unused,
5619 .unused,
5620 },
5621 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
5622 .clobbers = .{ .eflags = true },
5623 .each = .{ .once = &.{
5624 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
5625 .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ },
5626 .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ },
5627 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
5628 .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ },
5629 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
5630 .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ },
5631 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
5632 } },
5633 }, .{
5634 .required_features = .{ .sahf, .x87, null, null },
5635 .src_constraints = .{
5636 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
5637 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
5638 },
5639 .patterns = &.{
5640 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
5641 .{ .src = .{ .mem, .to_x87 } },
5642 .{ .src = .{ .to_x87, .to_x87 } },
5643 },
5644 .extra_temps = .{
5645 .{ .type = .f80, .kind = .{ .reg = .st7 } },
5646 .{ .type = .u8, .kind = .{ .reg = .ah } },
5647 .unused,
5648 .unused,
5649 .unused,
5650 .unused,
5651 .unused,
5652 .unused,
5653 .unused,
5654 },
5655 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
5656 .clobbers = .{ .eflags = true },
5657 .each = .{ .once = &.{
5658 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
5659 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
5660 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
5661 .{ ._, ._, .sahf, ._, ._, ._, ._ },
5662 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
5663 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
5664 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
5665 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
5666 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
5667 .{ ._, ._, .sahf, ._, ._, ._, ._ },
5668 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
5669 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
5670 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
5671 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
5672 } },
5673 }, .{
5674 .required_features = .{ .@"64bit", .x87, null, null },
5675 .src_constraints = .{
5676 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
5677 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
5678 },
5679 .patterns = &.{
5680 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
5681 .{ .src = .{ .mem, .to_x87 } },
5682 .{ .src = .{ .to_x87, .to_x87 } },
5683 },
5684 .extra_temps = .{
5685 .{ .type = .f80, .kind = .{ .reg = .st7 } },
5686 .{ .type = .u8, .kind = .{ .reg = .ah } },
5687 .unused,
5688 .unused,
5689 .unused,
5690 .unused,
5691 .unused,
5692 .unused,
5693 .unused,
5694 },
5695 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
5696 .clobbers = .{ .eflags = true },
5697 .each = .{ .once = &.{
5698 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
5699 .{ ._, .f_, .xam, ._, ._, ._, ._ },
5700 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
5701 .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ },
5702 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
5703 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
5704 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
5705 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
5706 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
5707 .{ ._, ._, .@"test", .tmp1b, .si(0b0_0_000_001), ._, ._ },
5708 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
5709 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
5710 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
5711 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
5712 } },
5713 }, .{
5714 .required_features = .{ .x87, null, null, null },
5715 .src_constraints = .{
5716 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
5717 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
5718 },
5719 .patterns = &.{
5720 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
5721 .{ .src = .{ .mem, .to_x87 } },
5722 .{ .src = .{ .to_x87, .to_x87 } },
5723 },
5724 .extra_temps = .{
5725 .{ .type = .f80, .kind = .{ .reg = .st7 } },
5726 .{ .type = .u8, .kind = .{ .reg = .ah } },
5727 .unused,
5728 .unused,
5729 .unused,
5730 .unused,
5731 .unused,
5732 .unused,
5733 .unused,
5734 },
5735 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
5736 .clobbers = .{ .eflags = true },
5737 .each = .{ .once = &.{
5738 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
5739 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
5740 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
5741 .{ ._, ._, .sahf, ._, ._, ._, ._ },
5742 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
5743 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
5744 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
5745 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
5746 .{ ._, .f_, .xch, .src1t, ._, ._, ._ },
5747 .{ ._, ._, .sahf, ._, ._, ._, ._ },
5748 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
5749 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
5750 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
5751 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
5752 } },
5753 }, .{
5754 .required_features = .{ .sse, null, null, null },
5755 .src_constraints = .{
5756 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
5757 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
5758 },
5759 .patterns = &.{
5760 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
5761 },
5762 .call_frame = .{ .alignment = .@"16" },
5763 .extra_temps = .{
5764 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
5765 .unused,
5766 .unused,
5767 .unused,
5768 .unused,
5769 .unused,
5770 .unused,
5771 .unused,
5772 .unused,
5773 },
5774 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5775 .dst_temps = .{.{ .ref = .src0 }},
5776 .each = .{ .once = &.{
5777 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
5778 } },
53625779 } }) catch |err| switch (err) {
53635780 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
53645781 @tagName(air_tag),
......@@ -5372,7 +5789,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
53725789 },
53735790 .min => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: {
53745791 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);
5792 const ty = cg.typeOf(bin_op.lhs);
5793 if (ty.isVector(zcu) and cg.floatBits(ty.childType(zcu)) != null) break :fallback try cg.airBinOp(inst, air_tag);
53765794 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
53775795 var res: [1]Temp = undefined;
53785796 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
......@@ -7943,6 +8361,401 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
79438361 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
79448362 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
79458363 } },
8364 }, .{
8365 .required_features = .{ .f16c, null, null, null },
8366 .src_constraints = .{
8367 .{ .scalar_float = .{ .of = .word, .is = .word } },
8368 .{ .scalar_float = .{ .of = .word, .is = .word } },
8369 },
8370 .patterns = &.{
8371 .{ .src = .{ .to_sse, .to_sse } },
8372 },
8373 .extra_temps = .{
8374 .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
8375 .{ .kind = .{ .rc = .sse } },
8376 .unused,
8377 .unused,
8378 .unused,
8379 .unused,
8380 .unused,
8381 .unused,
8382 .unused,
8383 },
8384 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
8385 .each = .{ .once = &.{
8386 .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ },
8387 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ },
8388 .{ ._, .v_ss, .cmp, .tmp1x, .dst0x, .dst0x, .vp(.unord) },
8389 .{ ._, .v_ss, .min, .dst0x, .tmp0x, .dst0x, ._ },
8390 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp0x, .tmp1x },
8391 .{ ._, .v_, .cvtps2ph, .dst0x, .dst0x, .rm(.{}), ._ },
8392 } },
8393 }, .{
8394 .required_features = .{ .sse, null, null, null },
8395 .src_constraints = .{
8396 .{ .scalar_float = .{ .of = .word, .is = .word } },
8397 .{ .scalar_float = .{ .of = .word, .is = .word } },
8398 },
8399 .patterns = &.{
8400 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
8401 },
8402 .call_frame = .{ .alignment = .@"16" },
8403 .extra_temps = .{
8404 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
8405 .unused,
8406 .unused,
8407 .unused,
8408 .unused,
8409 .unused,
8410 .unused,
8411 .unused,
8412 .unused,
8413 },
8414 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
8415 .dst_temps = .{.{ .ref = .src0 }},
8416 .each = .{ .once = &.{
8417 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
8418 } },
8419 }, .{
8420 .required_features = .{ .avx, null, null, null },
8421 .src_constraints = .{
8422 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
8423 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
8424 },
8425 .patterns = &.{
8426 .{ .src = .{ .to_sse, .to_sse } },
8427 },
8428 .extra_temps = .{
8429 .{ .kind = .{ .rc = .sse } },
8430 .unused,
8431 .unused,
8432 .unused,
8433 .unused,
8434 .unused,
8435 .unused,
8436 .unused,
8437 .unused,
8438 },
8439 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
8440 .each = .{ .once = &.{
8441 .{ ._, .v_ss, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
8442 .{ ._, .v_ss, .min, .dst0x, .src1x, .src0x, ._ },
8443 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
8444 } },
8445 }, .{
8446 .required_features = .{ .sse4_1, null, null, null },
8447 .src_constraints = .{
8448 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
8449 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
8450 },
8451 .patterns = &.{
8452 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
8453 },
8454 .dst_temps = .{.{ .rc = .sse }},
8455 .each = .{ .once = &.{
8456 .{ ._, ._ps, .mova, .dst0x, .src1x, ._, ._ },
8457 .{ ._, ._ss, .min, .dst0x, .src0x, ._, ._ },
8458 .{ ._, ._ss, .cmp, .src0x, .src0x, .vp(.unord), ._ },
8459 .{ ._, ._ps, .blendv, .dst0x, .src1x, .src0x, ._ },
8460 } },
8461 }, .{
8462 .required_features = .{ .sse, null, null, null },
8463 .src_constraints = .{
8464 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
8465 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
8466 },
8467 .patterns = &.{
8468 .{ .src = .{ .to_mut_sse, .to_sse } },
8469 },
8470 .extra_temps = .{
8471 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
8472 .unused,
8473 .unused,
8474 .unused,
8475 .unused,
8476 .unused,
8477 .unused,
8478 .unused,
8479 .unused,
8480 },
8481 .dst_temps = .{.{ .ref = .src0 }},
8482 .each = .{ .once = &.{
8483 .{ ._, ._ps, .mova, .tmp0x, .src1x, ._, ._ },
8484 .{ ._, ._ss, .min, .tmp0x, .src0x, ._, ._ },
8485 .{ ._, ._ss, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
8486 .{ ._, ._ps, .@"and", .tmp0x, .dst0x, ._, ._ },
8487 .{ ._, ._ps, .andn, .dst0x, .src1x, ._, ._ },
8488 .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
8489 } },
8490 }, .{
8491 .required_features = .{ .avx, null, null, null },
8492 .src_constraints = .{
8493 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
8494 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
8495 },
8496 .patterns = &.{
8497 .{ .src = .{ .to_sse, .to_sse } },
8498 },
8499 .extra_temps = .{
8500 .{ .kind = .{ .rc = .sse } },
8501 .unused,
8502 .unused,
8503 .unused,
8504 .unused,
8505 .unused,
8506 .unused,
8507 .unused,
8508 .unused,
8509 },
8510 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
8511 .each = .{ .once = &.{
8512 .{ ._, .v_sd, .cmp, .tmp0x, .src0x, .src0x, .vp(.unord) },
8513 .{ ._, .v_sd, .min, .dst0x, .src1x, .src0x, ._ },
8514 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .src1x, .tmp0x },
8515 } },
8516 }, .{
8517 .required_features = .{ .sse4_1, null, null, null },
8518 .src_constraints = .{
8519 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
8520 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
8521 },
8522 .patterns = &.{
8523 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse } },
8524 },
8525 .dst_temps = .{.{ .rc = .sse }},
8526 .each = .{ .once = &.{
8527 .{ ._, ._pd, .mova, .dst0x, .src1x, ._, ._ },
8528 .{ ._, ._sd, .min, .dst0x, .src0x, ._, ._ },
8529 .{ ._, ._sd, .cmp, .src0x, .src0x, .vp(.unord), ._ },
8530 .{ ._, ._pd, .blendv, .dst0x, .src1x, .src0x, ._ },
8531 } },
8532 }, .{
8533 .required_features = .{ .sse2, null, null, null },
8534 .src_constraints = .{
8535 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
8536 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
8537 },
8538 .patterns = &.{
8539 .{ .src = .{ .to_mut_sse, .to_sse } },
8540 },
8541 .extra_temps = .{
8542 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
8543 .unused,
8544 .unused,
8545 .unused,
8546 .unused,
8547 .unused,
8548 .unused,
8549 .unused,
8550 .unused,
8551 },
8552 .dst_temps = .{.{ .ref = .src0 }},
8553 .each = .{ .once = &.{
8554 .{ ._, ._pd, .mova, .tmp0x, .src1x, ._, ._ },
8555 .{ ._, ._sd, .min, .tmp0x, .src0x, ._, ._ },
8556 .{ ._, ._sd, .cmp, .dst0x, .src0x, .vp(.ord), ._ },
8557 .{ ._, ._pd, .@"and", .tmp0x, .dst0x, ._, ._ },
8558 .{ ._, ._pd, .andn, .dst0x, .src1x, ._, ._ },
8559 .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
8560 } },
8561 }, .{
8562 .required_features = .{ .sse, null, null, null },
8563 .src_constraints = .{
8564 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
8565 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
8566 },
8567 .patterns = &.{
8568 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
8569 },
8570 .call_frame = .{ .alignment = .@"16" },
8571 .extra_temps = .{
8572 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmin" } } },
8573 .unused,
8574 .unused,
8575 .unused,
8576 .unused,
8577 .unused,
8578 .unused,
8579 .unused,
8580 .unused,
8581 },
8582 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
8583 .dst_temps = .{.{ .ref = .src0 }},
8584 .each = .{ .once = &.{
8585 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
8586 } },
8587 }, .{
8588 .required_features = .{ .x87, .cmov, null, null },
8589 .src_constraints = .{
8590 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
8591 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
8592 },
8593 .patterns = &.{
8594 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
8595 .{ .src = .{ .mem, .to_x87 } },
8596 .{ .src = .{ .to_x87, .to_x87 } },
8597 },
8598 .extra_temps = .{
8599 .{ .type = .f80, .kind = .{ .reg = .st7 } },
8600 .unused,
8601 .unused,
8602 .unused,
8603 .unused,
8604 .unused,
8605 .unused,
8606 .unused,
8607 .unused,
8608 },
8609 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
8610 .clobbers = .{ .eflags = true },
8611 .each = .{ .once = &.{
8612 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
8613 .{ ._, .f_, .ucomi, .tmp0t, .tmp0t, ._, ._ },
8614 .{ ._, .f_u, .cmov, .tmp0t, .src1t, ._, ._ },
8615 .{ ._, .f_, .ucomi, .tmp0t, .src1t, ._, ._ },
8616 .{ ._, .f_nb, .cmov, .tmp0t, .src1t, ._, ._ },
8617 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
8618 } },
8619 }, .{
8620 .required_features = .{ .sahf, .x87, null, null },
8621 .src_constraints = .{
8622 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
8623 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
8624 },
8625 .patterns = &.{
8626 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
8627 .{ .src = .{ .mem, .to_x87 } },
8628 .{ .src = .{ .to_x87, .to_x87 } },
8629 },
8630 .extra_temps = .{
8631 .{ .type = .f80, .kind = .{ .reg = .st7 } },
8632 .{ .type = .u8, .kind = .{ .reg = .ah } },
8633 .unused,
8634 .unused,
8635 .unused,
8636 .unused,
8637 .unused,
8638 .unused,
8639 .unused,
8640 },
8641 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
8642 .clobbers = .{ .eflags = true },
8643 .each = .{ .once = &.{
8644 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
8645 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
8646 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
8647 .{ ._, ._, .sahf, ._, ._, ._, ._ },
8648 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
8649 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
8650 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
8651 .{ ._, ._, .sahf, ._, ._, ._, ._ },
8652 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
8653 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
8654 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
8655 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
8656 } },
8657 }, .{
8658 .required_features = .{ .@"64bit", .x87, null, null },
8659 .src_constraints = .{
8660 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
8661 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
8662 },
8663 .patterns = &.{
8664 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
8665 .{ .src = .{ .mem, .to_x87 } },
8666 .{ .src = .{ .to_x87, .to_x87 } },
8667 },
8668 .extra_temps = .{
8669 .{ .type = .f80, .kind = .{ .reg = .st7 } },
8670 .{ .type = .u8, .kind = .{ .reg = .ah } },
8671 .unused,
8672 .unused,
8673 .unused,
8674 .unused,
8675 .unused,
8676 .unused,
8677 .unused,
8678 },
8679 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
8680 .clobbers = .{ .eflags = true },
8681 .each = .{ .once = &.{
8682 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
8683 .{ ._, .f_, .xam, ._, ._, ._, ._ },
8684 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
8685 .{ ._, ._, .@"test", .tmp1b, .si(0b0_1_000_100), ._, ._ },
8686 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8687 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
8688 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
8689 .{ ._, ._, .@"test", .tmp1b, .si(0b0_0_000_001), ._, ._ },
8690 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8691 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
8692 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
8693 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
8694 } },
8695 }, .{
8696 .required_features = .{ .x87, null, null, null },
8697 .src_constraints = .{
8698 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
8699 .{ .scalar_float = .{ .of = .xword, .is = .tbyte } },
8700 },
8701 .patterns = &.{
8702 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
8703 .{ .src = .{ .mem, .to_x87 } },
8704 .{ .src = .{ .to_x87, .to_x87 } },
8705 },
8706 .extra_temps = .{
8707 .{ .type = .f80, .kind = .{ .reg = .st7 } },
8708 .{ .type = .u8, .kind = .{ .reg = .ah } },
8709 .unused,
8710 .unused,
8711 .unused,
8712 .unused,
8713 .unused,
8714 .unused,
8715 .unused,
8716 },
8717 .dst_temps = .{.{ .mut_rc = .{ .ref = .src1, .rc = .x87 } }},
8718 .clobbers = .{ .eflags = true },
8719 .each = .{ .once = &.{
8720 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
8721 .{ ._, .f_, .ucom, .tmp0t, ._, ._, ._ },
8722 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
8723 .{ ._, ._, .sahf, ._, ._, ._, ._ },
8724 .{ ._, ._p, .j, .@"0f", ._, ._, ._ },
8725 .{ ._, .f_, .ucom, .src1t, ._, ._, ._ },
8726 .{ ._, .fn_sw, .st, .tmp1w, ._, ._, ._ },
8727 .{ ._, ._, .sahf, ._, ._, ._, ._ },
8728 .{ ._, ._b, .j, .@"1f", ._, ._, ._ },
8729 .{ .@"0:", .f_p, .st, .tmp0t, ._, ._, ._ },
8730 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
8731 .{ .@"1:", .f_p, .st, .dst0t, ._, ._, ._ },
8732 } },
8733 }, .{
8734 .required_features = .{ .sse, null, null, null },
8735 .src_constraints = .{
8736 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
8737 .{ .scalar_float = .{ .of = .xword, .is = .xword } },
8738 },
8739 .patterns = &.{
8740 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
8741 },
8742 .call_frame = .{ .alignment = .@"16" },
8743 .extra_temps = .{
8744 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
8745 .unused,
8746 .unused,
8747 .unused,
8748 .unused,
8749 .unused,
8750 .unused,
8751 .unused,
8752 .unused,
8753 },
8754 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
8755 .dst_temps = .{.{ .ref = .src0 }},
8756 .each = .{ .once = &.{
8757 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
8758 } },
79468759 } }) catch |err| switch (err) {
79478760 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
79488761 @tagName(air_tag),
......@@ -8591,7 +9404,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
85919404 },
85929405 .dst_temps = .{.{ .rc = .sse }},
85939406 .each = .{ .once = &.{
8594 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
9407 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) },
85959408 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
85969409 } },
85979410 }, .{
......@@ -8693,7 +9506,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
86939506 .clobbers = .{ .eflags = true },
86949507 .each = .{ .once = &.{
86959508 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
8696 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
9509 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) },
86979510 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
86989511 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
86999512 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
......@@ -8722,7 +9535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
87229535 .clobbers = .{ .eflags = true },
87239536 .each = .{ .once = &.{
87249537 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8725 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
9538 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.true) },
87269539 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
87279540 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
87289541 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
......@@ -9406,7 +10219,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
940610219 },
940710220 .dst_temps = .{.{ .rc = .sse }},
940810221 .each = .{ .once = &.{
9409 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
10222 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .vp(.true) },
941010223 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
941110224 } },
941210225 }, .{
......@@ -9493,12 +10306,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
949310306 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
949410307 },
949510308
9496 .block => if (use_old) try cg.airBlock(inst) else {
10309 .block => {
949710310 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
949810311 const extra = cg.air.extraData(Air.Block, ty_pl.payload);
9499 try cg.asmPseudo(.pseudo_dbg_enter_block_none);
10312 if (cg.debug_output != .none) try cg.asmPseudo(.pseudo_dbg_enter_block_none);
950010313 try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));
9501 try cg.asmPseudo(.pseudo_dbg_leave_block_none);
10314 if (cg.debug_output != .none) try cg.asmPseudo(.pseudo_dbg_leave_block_none);
950210315 },
950310316 .loop => if (use_old) try cg.airLoop(inst) else {
950410317 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
......@@ -13852,7 +14665,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1385214665 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
1385314666 .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
1385414667 .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
13855 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14668 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1385614669 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
1385714670 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
1385814671 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -13884,7 +14697,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1388414697 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
1388514698 .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
1388614699 .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
13887 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14700 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1388814701 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1388914702 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1389014703 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -13916,7 +14729,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1391614729 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
1391714730 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
1391814731 .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
13919 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14732 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1392014733 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
1392114734 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
1392214735 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -13949,7 +14762,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1394914762 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
1395014763 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
1395114764 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13952 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14765 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1395314766 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
1395414767 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
1395514768 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -13988,7 +14801,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1398814801 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
1398914802 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
1399014803 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
13991 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14804 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1399214805 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
1399314806 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
1399414807 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14021,7 +14834,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1402114834 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1402214835 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
1402314836 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14024 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14837 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1402514838 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1402614839 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1402714840 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14054,7 +14867,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1405414867 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1405514868 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
1405614869 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
14057 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14870 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1405814871 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1405914872 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1406014873 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14087,7 +14900,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1408714900 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1408814901 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
1408914902 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
14090 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14903 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1409114904 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1409214905 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1409314906 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14121,7 +14934,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1412114934 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1412214935 .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
1412314936 .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
14124 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14937 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1412514938 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1412614939 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1412714940 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14161,7 +14974,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1416114974 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
1416214975 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1416314976 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
14164 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14977 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1416514978 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
1416614979 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
1416714980 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14195,7 +15008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1419515008 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1419615009 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
1419715010 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14198 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
15011 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1419915012 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1420015013 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1420115014 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14228,7 +15041,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1422815041 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1422915042 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
1423015043 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
14231 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
15044 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1423215045 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1423315046 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1423415047 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14262,7 +15075,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1426215075 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1426315076 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
1426415077 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
14265 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
15078 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1426615079 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1426715080 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1426815081 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14296,7 +15109,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1429615109 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1429715110 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
1429815111 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
14299 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
15112 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1430015113 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1430115114 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1430215115 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14337,7 +15150,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1433715150 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
1433815151 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1433915152 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
14340 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
15153 .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
1434115154 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
1434215155 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
1434315156 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
......@@ -14369,7 +15182,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1436915182 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
1437015183 .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
1437115184 .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14372 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
15185 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1437315186 .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
1437415187 .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
1437515188 .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
......@@ -14397,7 +15210,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1439715210 .{ .src = .{ .to_sse, .to_sse } },
1439815211 },
1439915212 .extra_temps = .{
14400 .{ .kind = .{ .rc = .sse } },
15213 .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
1440115214 .unused,
1440215215 .unused,
1440315216 .unused,
......@@ -14415,10 +15228,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1441515228 .each = .{ .once = &.{
1441615229 .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ },
1441715230 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ },
14418 .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {
15231 .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
1441915232 else => unreachable,
14420 .e => 0b00000,
14421 .ne => 0b00100,
15233 .e => .eq,
15234 .ne => .neq,
1442215235 }) },
1442315236 } },
1442415237 }, .{
......@@ -14452,10 +15265,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1445215265 .each = .{ .once = &.{
1445315266 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
1445415267 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
14455 .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {
15268 .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
1445615269 else => unreachable,
14457 .e => 0b00000,
14458 .ne => 0b00100,
15270 .e => .eq,
15271 .ne => .neq,
1445915272 }) },
1446015273 } },
1446115274 }, .{
......@@ -14489,10 +15302,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1448915302 .each = .{ .once = &.{
1449015303 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
1449115304 .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
14492 .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .ui(switch (cc) {
15305 .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .vp(switch (cc) {
1449315306 else => unreachable,
14494 .e => 0b00000,
14495 .ne => 0b00100,
15307 .e => .eq,
15308 .ne => .neq,
1449615309 }) },
1449715310 } },
1449815311 }, .{
......@@ -14512,10 +15325,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1451215325 .info = .{ .kind = .all, .scalar = .dword },
1451315326 } }},
1451415327 .each = .{ .once = &.{
14515 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
15328 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
1451615329 else => unreachable,
14517 .e => 0b00000,
14518 .ne => 0b00100,
15330 .e => .eq,
15331 .ne => .neq,
1451915332 }) },
1452015333 } },
1452115334 }, .{
......@@ -14534,10 +15347,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1453415347 .info = .{ .kind = .all, .scalar = .dword },
1453515348 } }},
1453615349 .each = .{ .once = &.{
14537 .{ ._, ._ss, .cmp, .dst0x, .src1x, .ui(switch (cc) {
15350 .{ ._, ._ss, .cmp, .dst0x, .src1x, .vp(switch (cc) {
1453815351 else => unreachable,
14539 .e => 0b00000,
14540 .ne => 0b00100,
15352 .e => .eq,
15353 .ne => .neq,
1454115354 }), ._ },
1454215355 } },
1454315356 }, .{
......@@ -14557,10 +15370,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1455715370 .info = .{ .kind = .all, .scalar = .dword },
1455815371 } }},
1455915372 .each = .{ .once = &.{
14560 .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
15373 .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
1456115374 else => unreachable,
14562 .e => 0b00000,
14563 .ne => 0b00100,
15375 .e => .eq,
15376 .ne => .neq,
1456415377 }) },
1456515378 } },
1456615379 }, .{
......@@ -14579,10 +15392,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1457915392 .info = .{ .kind = .all, .scalar = .dword },
1458015393 } }},
1458115394 .each = .{ .once = &.{
14582 .{ ._, ._ps, .cmp, .dst0x, .src1x, .ui(switch (cc) {
15395 .{ ._, ._ps, .cmp, .dst0x, .src1x, .vp(switch (cc) {
1458315396 else => unreachable,
14584 .e => 0b00000,
14585 .ne => 0b00100,
15397 .e => .eq,
15398 .ne => .neq,
1458615399 }), ._ },
1458715400 } },
1458815401 }, .{
......@@ -14602,10 +15415,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1460215415 .info = .{ .kind = .all, .scalar = .dword },
1460315416 } }},
1460415417 .each = .{ .once = &.{
14605 .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {
15418 .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
1460615419 else => unreachable,
14607 .e => 0b00000,
14608 .ne => 0b00100,
15420 .e => .eq,
15421 .ne => .neq,
1460915422 }) },
1461015423 } },
1461115424 }, .{
......@@ -14625,10 +15438,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1462515438 .info = .{ .kind = .all, .scalar = .qword },
1462615439 } }},
1462715440 .each = .{ .once = &.{
14628 .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
15441 .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
1462915442 else => unreachable,
14630 .e => 0b00000,
14631 .ne => 0b00100,
15443 .e => .eq,
15444 .ne => .neq,
1463215445 }) },
1463315446 } },
1463415447 }, .{
......@@ -14647,10 +15460,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1464715460 .info = .{ .kind = .all, .scalar = .qword },
1464815461 } }},
1464915462 .each = .{ .once = &.{
14650 .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) {
15463 .{ ._, ._sd, .cmp, .dst0x, .src1x, .vp(switch (cc) {
1465115464 else => unreachable,
14652 .e => 0b00000,
14653 .ne => 0b00100,
15465 .e => .eq,
15466 .ne => .neq,
1465415467 }), ._ },
1465515468 } },
1465615469 }, .{
......@@ -14670,10 +15483,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1467015483 .info = .{ .kind = .all, .scalar = .qword },
1467115484 } }},
1467215485 .each = .{ .once = &.{
14673 .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
15486 .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
1467415487 else => unreachable,
14675 .e => 0b00000,
14676 .ne => 0b00100,
15488 .e => .eq,
15489 .ne => .neq,
1467715490 }) },
1467815491 } },
1467915492 }, .{
......@@ -14692,10 +15505,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1469215505 .info = .{ .kind = .all, .scalar = .qword },
1469315506 } }},
1469415507 .each = .{ .once = &.{
14695 .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) {
15508 .{ ._, ._pd, .cmp, .dst0x, .src1x, .vp(switch (cc) {
1469615509 else => unreachable,
14697 .e => 0b00000,
14698 .ne => 0b00100,
15510 .e => .eq,
15511 .ne => .neq,
1469915512 }), ._ },
1470015513 } },
1470115514 }, .{
......@@ -14715,10 +15528,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1471515528 .info = .{ .kind = .all, .scalar = .qword },
1471615529 } }},
1471715530 .each = .{ .once = &.{
14718 .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {
15531 .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
1471915532 else => unreachable,
14720 .e => 0b00000,
14721 .ne => 0b00100,
15533 .e => .eq,
15534 .ne => .neq,
1472215535 }) },
1472315536 } },
1472415537 }, .{
......@@ -14748,10 +15561,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1474815561 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1474915562 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1475015563 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
14751 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) {
15564 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
1475215565 else => unreachable,
14753 .e => 0b00000,
14754 .ne => 0b00100,
15566 .e => .eq,
15567 .ne => .neq,
1475515568 }) },
1475615569 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
1475715570 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
......@@ -14786,10 +15599,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1478615599 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1478715600 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1478815601 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
14789 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) {
15602 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
1479015603 else => unreachable,
14791 .e => 0b00000,
14792 .ne => 0b00100,
15604 .e => .eq,
15605 .ne => .neq,
1479315606 }) },
1479415607 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
1479515608 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
......@@ -14834,7 +15647,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1483415647 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1483515648 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1483615649 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14837 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
15650 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1483815651 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1483915652 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1484015653 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -14879,7 +15692,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1487915692 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1488015693 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1488115694 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14882 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
15695 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1488315696 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1488415697 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1488515698 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -14925,7 +15738,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1492515738 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1492615739 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1492715740 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14928 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
15741 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1492915742 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1493015743 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1493115744 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -14971,7 +15784,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1497115784 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1497215785 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1497315786 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14974 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
15787 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1497515788 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1497615789 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1497715790 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -15019,7 +15832,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1501915832 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1502015833 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1502115834 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
15022 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
15835 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1502315836 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1502415837 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1502515838 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -15067,7 +15880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1506715880 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1506815881 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
1506915882 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
15070 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
15883 .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
1507115884 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
1507215885 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
1507315886 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
......@@ -15111,7 +15924,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1511115924 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1511215925 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1511315926 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15114 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
15927 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1511515928 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1511615929 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1511715930 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15166,7 +15979,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1516615979 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1516715980 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1516815981 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15169 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
15982 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1517015983 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1517115984 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1517215985 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15222,7 +16035,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1522216035 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1522316036 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1522416037 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15225 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16038 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1522616039 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1522716040 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1522816041 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15278,7 +16091,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1527816091 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1527916092 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1528016093 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15281 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16094 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1528216095 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1528316096 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1528416097 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15336,7 +16149,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1533616149 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1533716150 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1533816151 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15339 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16152 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1534016153 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1534116154 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1534216155 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15394,7 +16207,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1539416207 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1539516208 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1539616209 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15397 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16210 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1539816211 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
1539916212 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
1540016213 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
......@@ -15439,10 +16252,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1543916252 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1544016253 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1544116254 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15442 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
16255 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1544316256 else => unreachable,
15444 .e => 0b00000,
15445 .ne => 0b00100,
16257 .e => .eq,
16258 .ne => .neq,
1544616259 }) },
1544716260 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
1544816261 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
......@@ -15476,10 +16289,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1547616289 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1547716290 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1547816291 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15479 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
16292 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1548016293 else => unreachable,
15481 .e => 0b00000,
15482 .ne => 0b00100,
16294 .e => .eq,
16295 .ne => .neq,
1548316296 }) },
1548416297 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
1548516298 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
......@@ -15514,15 +16327,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1551416327 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1551516328 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1551616329 .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
15517 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
16330 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) {
1551816331 else => unreachable,
15519 .e => 0b00000,
15520 .ne => 0b00100,
16332 .e => .eq,
16333 .ne => .neq,
1552116334 }), ._ },
15522 .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) {
16335 .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .vp(switch (cc) {
1552316336 else => unreachable,
15524 .e => 0b00000,
15525 .ne => 0b00100,
16337 .e => .eq,
16338 .ne => .neq,
1552616339 }), ._ },
1552716340 .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
1552816341 .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
......@@ -15558,17 +16371,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1555816371 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1555916372 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1556016373 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15561 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
16374 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) {
1556216375 else => unreachable,
15563 .e => 0b00000,
15564 .ne => 0b00100,
16376 .e => .eq,
16377 .ne => .neq,
1556516378 }), ._ },
1556616379 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
1556716380 .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
15568 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) {
16381 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .vp(switch (cc) {
1556916382 else => unreachable,
15570 .e => 0b00000,
15571 .ne => 0b00100,
16383 .e => .eq,
16384 .ne => .neq,
1557216385 }), ._ },
1557316386 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
1557416387 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
......@@ -15605,10 +16418,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1560516418 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1560616419 .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
1560716420 .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },
15608 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .ui(switch (cc) {
16421 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .vp(switch (cc) {
1560916422 else => unreachable,
15610 .e => 0b00000,
15611 .ne => 0b00100,
16423 .e => .eq,
16424 .ne => .neq,
1561216425 }), ._ },
1561316426 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
1561416427 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
......@@ -15616,10 +16429,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1561616429 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
1561716430 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
1561816431 .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15619 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
16432 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) {
1562016433 else => unreachable,
15621 .e => 0b00000,
15622 .ne => 0b00100,
16434 .e => .eq,
16435 .ne => .neq,
1562316436 }), ._ },
1562416437 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
1562516438 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
......@@ -15653,15 +16466,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1565316466 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1565416467 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
1565516468 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
15656 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
16469 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1565716470 else => unreachable,
15658 .e => 0b00000,
15659 .ne => 0b00100,
16471 .e => .eq,
16472 .ne => .neq,
1566016473 }) },
15661 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) {
16474 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
1566216475 else => unreachable,
15663 .e => 0b00000,
15664 .ne => 0b00100,
16476 .e => .eq,
16477 .ne => .neq,
1566516478 }) },
1566616479 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
1566716480 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
......@@ -15699,15 +16512,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1569916512 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
1570016513 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
1570116514 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
15702 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
16515 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1570316516 else => unreachable,
15704 .e => 0b00000,
15705 .ne => 0b00100,
16517 .e => .eq,
16518 .ne => .neq,
1570616519 }) },
15707 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) {
16520 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
1570816521 else => unreachable,
15709 .e => 0b00000,
15710 .ne => 0b00100,
16522 .e => .eq,
16523 .ne => .neq,
1571116524 }) },
1571216525 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
1571316526 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
......@@ -15745,10 +16558,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1574516558 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
1574616559 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1574716560 .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15748 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
16561 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
1574916562 else => unreachable,
15750 .e => 0b00000,
15751 .ne => 0b00100,
16563 .e => .eq,
16564 .ne => .neq,
1575216565 }) },
1575316566 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
1575416567 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
......@@ -15795,10 +16608,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1579516608 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
1579616609 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
1579716610 .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15798 .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
16611 .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) {
1579916612 else => unreachable,
15800 .e => 0b00000,
15801 .ne => 0b00100,
16613 .e => .eq,
16614 .ne => .neq,
1580216615 }), ._ },
1580316616 .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
1580416617 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
......@@ -15850,7 +16663,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1585016663 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
1585116664 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
1585216665 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
15853 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16666 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1585416667 .{ ._, switch (cc) {
1585516668 else => unreachable,
1585616669 .e => ._np,
......@@ -15910,7 +16723,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1591016723 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
1591116724 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
1591216725 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
15913 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16726 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1591416727 .{ ._, switch (cc) {
1591516728 else => unreachable,
1591616729 .e => ._np,
......@@ -15971,7 +16784,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1597116784 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
1597216785 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
1597316786 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
15974 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16787 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1597516788 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
1597616789 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
1597716790 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
......@@ -16021,7 +16834,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1602116834 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
1602216835 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
1602316836 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
16024 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16837 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1602516838 .{ ._, switch (cc) {
1602616839 else => unreachable,
1602716840 .e => ._np,
......@@ -16081,7 +16894,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1608116894 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
1608216895 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
1608316896 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
16084 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16897 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1608516898 .{ ._, switch (cc) {
1608616899 else => unreachable,
1608716900 .e => ._np,
......@@ -16142,7 +16955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1614216955 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
1614316956 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
1614416957 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
16145 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16958 .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
1614616959 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
1614716960 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
1614816961 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
......@@ -16197,7 +17010,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1619717010 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1619817011 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1619917012 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16200 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17013 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1620117014 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1620217015 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1620317016 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16242,7 +17055,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1624217055 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1624317056 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1624417057 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16245 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17058 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1624617059 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1624717060 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1624817061 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16287,7 +17100,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1628717100 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1628817101 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1628917102 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16290 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17103 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1629117104 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1629217105 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1629317106 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16332,7 +17145,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1633217145 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1633317146 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1633417147 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16335 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17148 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1633617149 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1633717150 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1633817151 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16377,7 +17190,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1637717190 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1637817191 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1637917192 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16380 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17193 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1638117194 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1638217195 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1638317196 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16422,7 +17235,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1642217235 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
1642317236 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
1642417237 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16425 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
17238 .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
1642617239 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
1642717240 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
1642817241 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
......@@ -16466,7 +17279,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1646617279 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1646717280 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1646817281 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16469 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
17282 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1647017283 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1647117284 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1647217285 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16521,7 +17334,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1652117334 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1652217335 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1652317336 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16524 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
17337 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1652517338 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1652617339 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1652717340 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16576,7 +17389,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1657617389 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1657717390 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1657817391 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16579 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
17392 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1658017393 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1658117394 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1658217395 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16631,7 +17444,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1663117444 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1663217445 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1663317446 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16634 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
17447 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1663517448 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1663617449 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1663717450 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16686,7 +17499,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1668617499 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1668717500 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1668817501 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16689 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
17502 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1669017503 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1669117504 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1669217505 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -16741,7 +17554,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1674117554 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
1674217555 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
1674317556 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16744 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
17557 .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
1674517558 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
1674617559 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
1674717560 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
......@@ -18419,7 +19232,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1841919232 .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
1842019233 .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
1842119234 .{ ._, ._c, .set, .tmp1b, ._, ._, ._ },
18422 .{ ._, .fromCondition(switch (cc) {
19235 .{ ._, .fromCond(switch (cc) {
1842319236 else => unreachable,
1842419237 .l, .ge, .b, .ae => cc,
1842519238 .le, .g, .be, .a => cc.commute(),
......@@ -18979,8 +19792,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1897919792 .{ .src = .{ .to_sse, .to_sse } },
1898019793 },
1898119794 .extra_temps = .{
18982 .{ .kind = .{ .rc = .sse } },
18983 .{ .kind = .{ .rc = .sse } },
19795 .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
19796 .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
1898419797 .unused,
1898519798 .unused,
1898619799 .unused,
......@@ -18996,9 +19809,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1899619809 } }},
1899719810 .clobbers = .{ .eflags = true },
1899819811 .each = .{ .once = &.{
18999 .{ ._, .vp_, .unpcklwd, .tmp0x, .src0x, .src1x, ._ },
19000 .{ ._, .v_ps, .cvtph2, .tmp0x, .tmp0x, ._, ._ },
19001 .{ ._, .v_, .movshdup, .tmp1x, .tmp0x, ._, ._ },
19812 .{ ._, .v_ps, .cvtph2, .tmp0x, .src0x, ._, ._ },
19813 .{ ._, .v_ps, .cvtph2, .tmp1x, .src1x, ._, ._ },
1900219814 .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1x, ._, ._ },
1900319815 } },
1900419816 }, .{
......@@ -19197,35 +20009,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1919720009 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
1919820010 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1919920011 } },
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 } },
1922920012 }, .{
1923020013 .required_features = .{ .x87, .cmov, null, null },
1923120014 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
......@@ -19479,46 +20262,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1947920262 .switch_dispatch => try cg.airSwitchDispatch(inst),
1948020263 .@"try", .try_cold => try cg.airTry(inst),
1948120264 .try_ptr, .try_ptr_cold => try cg.airTryPtr(inst),
19482 .dbg_stmt => if (use_old) try cg.airDbgStmt(inst) else {
20265 .dbg_stmt => if (cg.debug_output != .none) {
1948320266 const dbg_stmt = air_datas[@intFromEnum(inst)].dbg_stmt;
1948420267 _ = try cg.addInst(.{
1948520268 .tag = .pseudo,
19486 .ops = .pseudo_dbg_line_line_column,
20269 .ops = .pseudo_dbg_line_stmt_line_column,
1948720270 .data = .{ .line_column = .{
1948820271 .line = dbg_stmt.line,
1948920272 .column = dbg_stmt.column,
1949020273 } },
1949120274 });
1949220275 },
19493 .dbg_empty_stmt => if (use_old) try cg.airDbgEmptyStmt() else {
20276 .dbg_empty_stmt => if (cg.debug_output != .none) {
1949420277 if (cg.mir_instructions.len > 0) {
1949520278 const prev_mir_op = &cg.mir_instructions.items(.ops)[cg.mir_instructions.len - 1];
19496 if (prev_mir_op.* == .pseudo_dbg_line_stmt_line_column)
19497 prev_mir_op.* = .pseudo_dbg_line_line_column;
20279 if (prev_mir_op.* == .pseudo_dbg_line_line_column)
20280 prev_mir_op.* = .pseudo_dbg_line_stmt_line_column;
1949820281 }
1949920282 try cg.asmOpOnly(.{ ._, .nop });
1950020283 },
19501 .dbg_inline_block => if (use_old) try cg.airDbgInlineBlock(inst) else {
20284 .dbg_inline_block => {
1950220285 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
1950320286 const extra = cg.air.extraData(Air.DbgInlineBlock, ty_pl.payload);
1950420287 const old_inline_func = cg.inline_func;
1950520288 defer cg.inline_func = old_inline_func;
1950620289 cg.inline_func = extra.data.func;
19507 _ = try cg.addInst(.{
20290 if (cg.debug_output != .none) _ = try cg.addInst(.{
1950820291 .tag = .pseudo,
1950920292 .ops = .pseudo_dbg_enter_inline_func,
1951020293 .data = .{ .func = extra.data.func },
1951120294 });
1951220295 try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));
19513 _ = try cg.addInst(.{
20296 if (cg.debug_output != .none) _ = try cg.addInst(.{
1951420297 .tag = .pseudo,
1951520298 .ops = .pseudo_dbg_leave_inline_func,
1951620299 .data = .{ .func = old_inline_func },
1951720300 });
1951820301 },
19519 .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline => if (use_old) try cg.airDbgVar(inst) else {
20302 .dbg_var_ptr, .dbg_var_val, .dbg_arg_inline => if (use_old) try cg.airDbgVar(inst) else if (cg.debug_output != .none) {
1952020303 const pl_op = air_datas[@intFromEnum(inst)].pl_op;
1952120304 var ops = try cg.tempsFromOperands(inst, .{pl_op.operand});
20305 var mcv = ops[0].tracking(cg).short;
20306 switch (mcv) {
20307 else => {},
20308 .eflags => |cc| switch (cc) {
20309 else => {},
20310 // These values would self destruct. Maybe we make them use their
20311 // turing complete dwarf expression interpreters for once?
20312 .z_and_np, .nz_or_p => {
20313 try cg.spillEflagsIfOccupied();
20314 mcv = ops[0].tracking(cg).short;
20315 },
20316 },
20317 }
1952220318 try cg.genLocalDebugInfo(inst, ops[0].tracking(cg).short);
1952320319 try ops[0].die(cg);
1952420320 },
......@@ -20725,7 +21521,7 @@ fn airFptrunc(self: *CodeGen, inst: Air.Inst.Index) !void {
2072521521 .{ .v_, .cvtps2ph },
2072621522 dst_reg,
2072721523 mat_src_reg.to128(),
20728 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
21524 bits.RoundMode.imm(.{}),
2072921525 );
2073021526 },
2073121527 else => unreachable,
......@@ -24896,26 +25692,7 @@ fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
2489625692 return self.floatSign(inst, tag, un_op, ty);
2489725693}
2489825694
24899const RoundMode = packed struct(u5) {
24900 mode: enum(u4) {
24901 /// Round to nearest (even)
24902 nearest = 0b0_00,
24903 /// Round down (toward -∞)
24904 down = 0b0_01,
24905 /// Round up (toward +∞)
24906 up = 0b0_10,
24907 /// Round toward zero (truncate)
24908 zero = 0b0_11,
24909 /// Use current rounding mode of MXCSR.RC
24910 mxcsr = 0b1_00,
24911 },
24912 precision: enum(u1) {
24913 normal = 0b0,
24914 inexact = 0b1,
24915 } = .normal,
24916};
24917
24918fn airRound(self: *CodeGen, inst: Air.Inst.Index, mode: RoundMode) !void {
25695fn airRound(self: *CodeGen, inst: Air.Inst.Index, mode: bits.RoundMode) !void {
2491925696 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
2492025697 const ty = self.typeOf(un_op);
2492125698
......@@ -24972,7 +25749,7 @@ fn getRoundTag(self: *CodeGen, ty: Type) ?Mir.Inst.FixedTag {
2497225749 } else null;
2497325750}
2497425751
24975fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode) !MCValue {
25752fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: bits.RoundMode) !MCValue {
2497625753 const pt = self.pt;
2497725754 const zcu = pt.zcu;
2497825755 if (self.getRoundTag(ty)) |_| return .none;
......@@ -24997,7 +25774,7 @@ fn genRoundLibcall(self: *CodeGen, ty: Type, src_mcv: MCValue, mode: RoundMode)
2499725774 } }, &.{ty}, &.{src_mcv}, .{});
2499825775}
2499925776
25000fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: RoundMode) !void {
25777fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode: bits.RoundMode) !void {
2500125778 const pt = self.pt;
2500225779 const mir_tag = self.getRoundTag(ty) orelse {
2500325780 const result = try self.genRoundLibcall(ty, src_mcv, mode);
......@@ -25011,7 +25788,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
2501125788 dst_alias,
2501225789 dst_alias,
2501325790 try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }),
25014 .u(@as(u5, @bitCast(mode))),
25791 mode.imm(),
2501525792 ) else try self.asmRegisterRegisterRegisterImmediate(
2501625793 mir_tag,
2501725794 dst_alias,
......@@ -25020,13 +25797,13 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
2502025797 src_mcv.getReg().?
2502125798 else
2502225799 try self.copyToTmpRegister(ty, src_mcv), abi_size),
25023 .u(@as(u5, @bitCast(mode))),
25800 mode.imm(),
2502425801 ),
2502525802 else => if (src_mcv.isBase()) try self.asmRegisterMemoryImmediate(
2502625803 mir_tag,
2502725804 dst_alias,
2502825805 try src_mcv.mem(self, .{ .size = .fromSize(abi_size) }),
25029 .u(@as(u5, @bitCast(mode))),
25806 mode.imm(),
2503025807 ) else try self.asmRegisterRegisterImmediate(
2503125808 mir_tag,
2503225809 dst_alias,
......@@ -25034,7 +25811,7 @@ fn genRound(self: *CodeGen, ty: Type, dst_reg: Register, src_mcv: MCValue, mode:
2503425811 src_mcv.getReg().?
2503525812 else
2503625813 try self.copyToTmpRegister(ty, src_mcv), abi_size),
25037 .u(@as(u5, @bitCast(mode))),
25814 mode.imm(),
2503825815 ),
2503925816 }
2504025817}
......@@ -25294,7 +26071,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
2529426071 .{ .v_, .cvtps2ph },
2529526072 dst_reg,
2529626073 dst_reg,
25297 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
26074 bits.RoundMode.imm(.{}),
2529826075 );
2529926076 break :result dst_mcv;
2530026077 },
......@@ -25324,7 +26101,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
2532426101 .{ .v_, .cvtps2ph },
2532526102 dst_reg,
2532626103 dst_reg,
25327 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
26104 bits.RoundMode.imm(.{}),
2532826105 );
2532926106 break :result dst_mcv;
2533026107 },
......@@ -25349,7 +26126,7 @@ fn airSqrt(self: *CodeGen, inst: Air.Inst.Index) !void {
2534926126 .{ .v_, .cvtps2ph },
2535026127 dst_reg,
2535126128 wide_reg,
25352 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
26129 bits.RoundMode.imm(.{}),
2535326130 );
2535426131 break :result dst_mcv;
2535526132 },
......@@ -27613,7 +28390,7 @@ fn genBinOp(
2761328390 .{ .v_, .cvtps2ph },
2761428391 dst_reg,
2761528392 dst_reg,
27616 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
28393 bits.RoundMode.imm(.{}),
2761728394 );
2761828395 break :adjusted .{ .register = dst_reg };
2761928396 },
......@@ -28086,14 +28863,14 @@ fn genBinOp(
2808628863 dst_reg,
2808728864 dst_reg,
2808828865 dst_reg,
28089 .u(@as(u5, @bitCast(RoundMode{
28866 bits.RoundMode.imm(.{
2809028867 .mode = switch (air_tag) {
2809128868 .div_trunc => .zero,
2809228869 .div_floor => .down,
2809328870 else => unreachable,
2809428871 },
2809528872 .precision = .inexact,
28096 }))),
28873 }),
2809728874 ),
2809828875 else => {},
2809928876 }
......@@ -28101,7 +28878,7 @@ fn genBinOp(
2810128878 .{ .v_, .cvtps2ph },
2810228879 dst_reg,
2810328880 dst_reg,
28104 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
28881 bits.RoundMode.imm(.{}),
2810528882 );
2810628883 return dst_mcv;
2810728884 },
......@@ -28529,7 +29306,7 @@ fn genBinOp(
2852929306 .{ .v_, .cvtps2ph },
2853029307 dst_reg,
2853129308 dst_reg,
28532 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
29309 bits.RoundMode.imm(.{}),
2853329310 );
2853429311 return dst_mcv;
2853529312 },
......@@ -28581,7 +29358,7 @@ fn genBinOp(
2858129358 .{ .v_, .cvtps2ph },
2858229359 dst_reg,
2858329360 dst_reg,
28584 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
29361 bits.RoundMode.imm(.{}),
2858529362 );
2858629363 return dst_mcv;
2858729364 },
......@@ -28624,7 +29401,7 @@ fn genBinOp(
2862429401 .{ .v_, .cvtps2ph },
2862529402 dst_reg,
2862629403 dst_reg,
28627 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
29404 bits.RoundMode.imm(.{}),
2862829405 );
2862929406 return dst_mcv;
2863029407 },
......@@ -28667,7 +29444,7 @@ fn genBinOp(
2866729444 .{ .v_, .cvtps2ph },
2866829445 dst_reg,
2866929446 dst_reg.to256(),
28670 .u(@as(u5, @bitCast(RoundMode{ .mode = .mxcsr }))),
29447 bits.RoundMode.imm(.{}),
2867129448 );
2867229449 return dst_mcv;
2867329450 },
......@@ -28932,7 +29709,7 @@ fn genBinOp(
2893229709 mask_reg,
2893329710 rhs_copy_reg,
2893429711 rhs_copy_reg,
28935 .u(3), // unord
29712 bits.VexFloatPredicate.imm(.unord),
2893629713 );
2893729714 try self.asmRegisterRegisterRegisterRegister(
2893829715 @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) {
......@@ -28999,7 +29776,7 @@ fn genBinOp(
2899929776 }),
2900029777 mask_reg,
2900129778 mask_reg,
29002 .u(if (has_blend) 3 else 7), // unord, ord
29779 bits.SseFloatPredicate.imm(if (has_blend) .unord else .ord),
2900329780 );
2900429781 if (has_blend) try self.asmRegisterRegisterRegister(
2900529782 @as(?Mir.Inst.FixedTag, switch (lhs_ty.zigTypeTag(zcu)) {
......@@ -29836,24 +30613,10 @@ fn airArg(self: *CodeGen, inst: Air.Inst.Index) !void {
2983630613 return self.finishAir(inst, result, .{ .none, .none, .none });
2983730614}
2983830615
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
2985530616fn airDbgVarArgs(self: *CodeGen) !void {
29856 if (self.pt.zcu.typeToFunc(self.fn_type).?.is_var_args) try self.asmPseudo(.pseudo_dbg_var_args_none);
30617 if (self.debug_output == .none) return;
30618 if (!self.pt.zcu.typeToFunc(self.fn_type).?.is_var_args) return;
30619 try self.asmPseudo(.pseudo_dbg_var_args_none);
2985730620}
2985830621
2985930622fn genLocalDebugInfo(
......@@ -30909,44 +31672,6 @@ fn genTry(
3090931672 return result;
3091031673}
3091131674
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
3095031675fn airDbgVar(self: *CodeGen, inst: Air.Inst.Index) !void {
3095131676 const pl_op = self.air.instructions.items(.data)[@intFromEnum(inst)].pl_op;
3095231677 try self.genLocalDebugInfo(inst, try self.resolveInst(pl_op.operand));
......@@ -31392,14 +32117,6 @@ fn airLoop(self: *CodeGen, inst: Air.Inst.Index) !void {
3139232117 try self.genBodyBlock(body);
3139332118}
3139432119
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
3140332120fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index) !void {
3140432121 // A block is a setup to be able to jump to the end.
3140532122 const inst_tracking_i = self.inst_tracking.count();
......@@ -39918,46 +40635,46 @@ const Select = struct {
3991840635 inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg),
3991940636 }
3992040637 }
39921 };
3992240638
39923 fn pass(spec: TempSpec) u2 {
39924 return switch (spec.kind) {
39925 .unused => 0,
39926 .reg => 1,
39927 else => 2,
39928 };
39929 }
40639 fn pass(kind: Kind) u2 {
40640 return switch (kind) {
40641 .unused => 0,
40642 .reg => 1,
40643 else => 2,
40644 };
40645 }
40646 };
3993040647
39931 fn create(spec: TempSpec, s: *Select) !Temp {
40648 fn create(spec: TempSpec, s: *Select) !struct { Temp, bool } {
3993240649 const cg = s.cg;
3993340650 return switch (spec.kind) {
3993440651 .unused => unreachable,
39935 .any => try cg.tempAlloc(spec.type),
39936 .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }),
39937 .ref => |ref| ref.deref(s),
39938 .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }),
39939 .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)),
40652 .any => .{ try cg.tempAlloc(spec.type), true },
40653 .cc => |cc| .{ try cg.tempInit(spec.type, .{ .eflags = cc }), true },
40654 .ref => |ref| .{ ref.deref(s), false },
40655 .reg => |reg| .{ try cg.tempInit(spec.type, .{ .register = reg }), true },
40656 .rc => |rc| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc)), true },
3994040657 .mut_rc => |ref_rc| {
3994140658 const temp = ref_rc.ref.deref(s);
3994240659 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
39943 .register => |reg| if (reg.class() == ref_rc.rc) return temp,
39944 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp,
40660 .register => |reg| if (reg.class() == ref_rc.rc) return .{ temp, false },
40661 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return .{ temp, false },
3994540662 else => {},
3994640663 };
39947 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc));
40664 return .{ try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc)), true };
3994840665 },
39949 .ref_mask => |ref_mask| ref_mask.ref.deref(s),
39950 .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)),
40666 .ref_mask => |ref_mask| .{ ref_mask.ref.deref(s), false },
40667 .rc_mask => |rc_mask| .{ try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)), true },
3995140668 .mut_rc_mask => |ref_rc_mask| {
3995240669 const temp = ref_rc_mask.ref.deref(s);
3995340670 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
39954 .register => |reg| if (reg.class() == ref_rc_mask.rc) return temp,
39955 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return temp,
40671 .register => |reg| if (reg.class() == ref_rc_mask.rc) return .{ temp, false },
40672 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return .{ temp, false },
3995640673 else => {},
3995740674 };
39958 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc));
40675 return .{ try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc)), true };
3995940676 },
39960 .mem => try cg.tempAllocMem(spec.type),
40677 .mem => .{ try cg.tempAllocMem(spec.type), true },
3996140678 .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| {
3996240679 const pt = cg.pt;
3996340680 const zcu = pt.zcu;
......@@ -40022,13 +40739,16 @@ const Select = struct {
4002240739 })).toIntern(),
4002340740 .storage = .{ .repeated_elem = res_scalar_val.toIntern() },
4002440741 } })) else res_scalar_val;
40025 return try cg.tempMemFromValue(res_val);
40742 return .{ try cg.tempMemFromValue(res_val), true };
4002640743 },
40027 .symbol => |symbol| if (cg.bin_file.cast(.elf)) |elf_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
40028 .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib),
40029 } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
40030 .sym_index = try macho_file.getGlobalSymbol(symbol.name, symbol.lib),
40031 } }) else cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}),
40744 .symbol => |symbol| .{ try cg.tempInit(spec.type, .{ .lea_symbol = .{
40745 .sym_index = if (cg.bin_file.cast(.elf)) |elf_file|
40746 try elf_file.getGlobalSymbol(symbol.name, symbol.lib)
40747 else if (cg.bin_file.cast(.macho)) |macho_file|
40748 try macho_file.getGlobalSymbol(symbol.name, symbol.lib)
40749 else
40750 return cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}),
40751 } }), true },
4003240752 };
4003340753 }
4003440754 };
......@@ -40390,14 +41110,24 @@ const Select = struct {
4039041110 fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand {
4039141111 return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm };
4039241112 }
40393 fn ui(imm: i32) Select.Operand {
40394 return .{ .tag = .uimm, .imm = imm };
41113 fn ui(imm: u32) Select.Operand {
41114 return .{ .tag = .uimm, .imm = @bitCast(imm) };
4039541115 }
4039641116 fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand {
4039741117 return .{ .tag = .uimm, .base = base, .adjust = adjust };
4039841118 }
40399 fn uia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand {
40400 return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = imm };
41119 fn uia(imm: u32, base: Ref.Sized, adjust: Adjust) Select.Operand {
41120 return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = @bitCast(imm) };
41121 }
41122
41123 fn rm(mode: bits.RoundMode) Select.Operand {
41124 return .{ .tag = .uimm, .imm = @intCast(mode.imm().unsigned) };
41125 }
41126 fn sp(pred: bits.SseFloatPredicate) Select.Operand {
41127 return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) };
41128 }
41129 fn vp(pred: bits.VexFloatPredicate) Select.Operand {
41130 return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) };
4040141131 }
4040241132
4040341133 fn lea(size: Memory.Size, base: Ref) Select.Operand {
......@@ -40705,6 +41435,7 @@ fn select(
4070541435 .ccc => cg.target.cCallingConvention().?,
4070641436 .zigcc => .auto,
4070741437 };
41438 assert(case.clobbers.eflags);
4070841439 const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: {
4070941440 const param_gpr = abi.getCAbiIntParamRegs(.auto);
4071041441 break :err_ret_trace_reg param_gpr[param_gpr.len - 1];
......@@ -40722,8 +41453,14 @@ fn select(
4072241453
4072341454 @memcpy(src_slots[0..src_temps.len], src_temps);
4072441455 std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]);
40725 for (1..3) |pass| for (tmp_slots, case.extra_temps) |*slot, spec| if (pass == spec.pass()) {
40726 slot.* = try spec.create(&s);
41456 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| {
41457 if (dst_kind.pass() != 1) continue;
41458 dst_temp.*, _ = try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s);
41459 }
41460 var tmp_owned: [tmp_slots.len]bool = @splat(false);
41461 for (1..3) |pass| for (tmp_slots, &tmp_owned, case.extra_temps) |*slot, *owned, spec| {
41462 if (spec.kind.pass() != pass) continue;
41463 slot.*, owned.* = try spec.create(&s);
4072741464 };
4072841465
4072941466 while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| {
......@@ -40734,8 +41471,10 @@ fn select(
4073441471
4073541472 if (case.clobbers.eflags) try cg.spillEflagsIfOccupied();
4073641473
40737 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind|
40738 dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s));
41474 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind| {
41475 if (dst_kind.pass() != 2) continue;
41476 dst_temp.*, _ = try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s);
41477 }
4073941478 @memcpy(dst_slots[0..dst_temps.len], dst_temps);
4074041479
4074141480 switch (case.each) {
......@@ -40765,7 +41504,7 @@ fn select(
4076541504 }
4076641505 }
4076741506 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);
41507 for (tmp_owned, tmp_slots) |owned, temp| if (owned) try temp.die(cg);
4076941508 return;
4077041509 }
4077141510 }
src/arch/x86_64/Mir.zig+1-1
......@@ -467,7 +467,7 @@ pub const Inst = struct {
467467 /// Mask ___ Quadword
468468 k_q,
469469
470 pub fn fromCondition(cc: bits.Condition) Fixes {
470 pub fn fromCond(cc: bits.Condition) Fixes {
471471 return switch (cc) {
472472 inline else => |cc_tag| @field(Fixes, "_" ++ @tagName(cc_tag)),
473473 .z_and_np, .nz_or_p => unreachable,
src/arch/x86_64/bits.zig+166
......@@ -177,6 +177,172 @@ pub const Condition = enum(u5) {
177177 }
178178};
179179
180/// The immediate operand of vcvtps2ph.
181pub const RoundMode = packed struct(u5) {
182 mode: enum(u4) {
183 /// Round to nearest (even)
184 nearest = 0b0_00,
185 /// Round down (toward -∞)
186 down = 0b0_01,
187 /// Round up (toward +∞)
188 up = 0b0_10,
189 /// Round toward zero (truncate)
190 zero = 0b0_11,
191 /// Use current rounding mode of MXCSR.RC
192 mxcsr = 0b1_00,
193 } = .mxcsr,
194 precision: enum(u1) {
195 normal = 0b0,
196 inexact = 0b1,
197 } = .normal,
198
199 pub fn imm(mode: RoundMode) Immediate {
200 return .u(@as(@typeInfo(RoundMode).@"struct".backing_integer.?, @bitCast(mode)));
201 }
202};
203
204/// The immediate operand of cmppd, cmpps, cmpsd, and cmpss.
205pub const SseFloatPredicate = enum(u3) {
206 /// Equal (ordered, non-signaling)
207 eq,
208 /// Less-than (ordered, signaling)
209 lt,
210 /// Less-than-or-equal (ordered, signaling)
211 le,
212 /// Unordered (non-signaling)
213 unord,
214 /// Not-equal (unordered, non-signaling)
215 neq,
216 /// Not-less-than (unordered, signaling)
217 nlt,
218 /// Not-less-than-or-equal (unordered, signaling)
219 nle,
220 /// Ordered (non-signaling)
221 ord,
222
223 /// Equal (ordered, non-signaling)
224 pub const eq_oq: SseFloatPredicate = .eq;
225 /// Less-than (ordered, signaling)
226 pub const lt_os: SseFloatPredicate = .lt;
227 /// Less-than-or-equal (ordered, signaling)
228 pub const le_os: SseFloatPredicate = .le;
229 /// Unordered (non-signaling)
230 pub const unord_q: SseFloatPredicate = .unord;
231 /// Not-equal (unordered, non-signaling)
232 pub const neq_uq: SseFloatPredicate = .neq;
233 /// Not-less-than (unordered, signaling)
234 pub const nlt_us: SseFloatPredicate = .nlt;
235 /// Not-less-than-or-equal (unordered, signaling)
236 pub const nle_us: SseFloatPredicate = .nle;
237 /// Ordered (non-signaling)
238 pub const ord_q: SseFloatPredicate = .ord;
239
240 pub fn imm(pred: SseFloatPredicate) Immediate {
241 return .u(@intFromEnum(pred));
242 }
243};
244
245/// The immediate operand of vcmppd, vcmpps, vcmpsd, and vcmpss.
246pub const VexFloatPredicate = enum(u5) {
247 /// Equal (ordered, non-signaling)
248 eq_oq,
249 /// Less-than (ordered, signaling)
250 lt_os,
251 /// Less-than-or-equal (ordered, signaling)
252 le_os,
253 /// Unordered (non-signaling)
254 unord_q,
255 /// Not-equal (unordered, non-signaling)
256 neq_uq,
257 /// Not-less-than (unordered, signaling)
258 nlt_us,
259 /// Not-less-than-or-equal (unordered, signaling)
260 nle_us,
261 /// Ordered (non-signaling)
262 ord_q,
263 /// Equal (unordered, non-signaling)
264 eq_uq,
265 /// Not-greater-than-or-equal (unordered, signaling)
266 nge_us,
267 /// Not-greater-than (unordered, signaling)
268 ngt_us,
269 /// False (ordered, non-signaling)
270 false_oq,
271 /// Not-equal (ordered, non-signaling)
272 neq_oq,
273 /// Greater-than-or-equal (ordered, signaling)
274 ge_os,
275 /// Greater-than (ordered, signaling)
276 gt_os,
277 /// True (unordered, non-signaling)
278 true_uq,
279 /// Equal (unordered, non-signaling)
280 eq_os,
281 /// Less-than (ordered, non-signaling)
282 lt_oq,
283 /// Less-than-or-equal (ordered, non-signaling)
284 le_oq,
285 /// Unordered (signaling)
286 unord_s,
287 /// Not-equal (unordered, signaling)
288 neq_us,
289 /// Not-less-than (unordered, non-signaling)
290 nlt_uq,
291 /// Not-less-than-or-equal (unordered, non-signaling)
292 nle_uq,
293 /// Ordered (signaling)
294 ord_s,
295 /// Equal (unordered, signaling)
296 eq_us,
297 /// Not-greater-than-or-equal (unordered, non-signaling)
298 nge_uq,
299 /// Not-greater-than (unordered, non-signaling)
300 ngt_uq,
301 /// False (ordered, signaling)
302 false_os,
303 /// Not-equal (ordered, signaling)
304 neq_os,
305 /// Greater-than-or-equal (ordered, non-signaling)
306 ge_oq,
307 /// Greater-than (ordered, non-signaling)
308 gt_oq,
309 /// True (unordered, signaling)
310 true_us,
311
312 /// Equal (ordered, non-signaling)
313 pub const eq: VexFloatPredicate = .eq_oq;
314 /// Less-than (ordered, signaling)
315 pub const lt: VexFloatPredicate = .lt_os;
316 /// Less-than-or-equal (ordered, signaling)
317 pub const le: VexFloatPredicate = .le_os;
318 /// Unordered (non-signaling)
319 pub const unord: VexFloatPredicate = .unord_q;
320 /// Not-equal (unordered, non-signaling)
321 pub const neq: VexFloatPredicate = .neq_uq;
322 /// Not-less-than (unordered, signaling)
323 pub const nlt: VexFloatPredicate = .nlt_us;
324 /// Not-less-than-or-equal (unordered, signaling)
325 pub const nle: VexFloatPredicate = .nle_us;
326 /// Ordered (non-signaling)
327 pub const ord: VexFloatPredicate = .ord_q;
328 /// Not-greater-than-or-equal (unordered, signaling)
329 pub const nge: VexFloatPredicate = .nge_us;
330 /// Not-greater-than (unordered, signaling)
331 pub const ngt: VexFloatPredicate = .ngt_us;
332 /// False (ordered, non-signaling)
333 pub const @"false": VexFloatPredicate = .false_oq;
334 /// Greater-than-or-equal (ordered, signaling)
335 pub const ge: VexFloatPredicate = .ge_os;
336 /// Greater-than (ordered, signaling)
337 pub const gt: VexFloatPredicate = .gt_os;
338 /// True (unordered, non-signaling)
339 pub const @"true": VexFloatPredicate = .true_uq;
340
341 pub fn imm(pred: VexFloatPredicate) Immediate {
342 return .u(@intFromEnum(pred));
343 }
344};
345
180346pub const Register = enum(u8) {
181347 // zig fmt: off
182348 rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi,
test/behavior/maximum_minimum.zig+1-1
......@@ -121,8 +121,8 @@ test "@min/max for floats" {
121121 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
122122 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
123123 if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArm()) return error.SkipZigTest;
124 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
125124 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
125 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
126126
127127 const S = struct {
128128 fn doTheTest(comptime T: type) !void {
test/behavior/x86_64/build.zig+6
......@@ -35,6 +35,12 @@ pub fn build(b: *std.Build) void {
3535 .sse2,
3636 }),
3737 },
38 .{
39 .cpu_arch = .x86_64,
40 .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64 },
41 .cpu_features_add = std.Target.x86.featureSet(&.{.sahf}),
42 .cpu_features_sub = std.Target.x86.featureSet(&.{.cmov}),
43 },
3844 //.{
3945 // .cpu_arch = .x86_64,
4046 // .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64 },
test/behavior/x86_64/math.zig+1797-68
......@@ -73,14 +73,20 @@ inline fn boolOr(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
7373}
7474
7575// noinline for a more helpful stack trace
76noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected)) !void {
76noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected), comptime strict: bool) !void {
7777 const info = @typeInfo(@TypeOf(expected));
78 const unexpected = switch (switch (info) {
78 const unexpected = unexpected: switch (switch (info) {
7979 else => info,
8080 .vector => |vector| @typeInfo(vector.child),
8181 }) {
8282 else => expected != actual,
83 .float => boolOr(boolAnd(expected != actual, boolOr(expected == expected, actual == actual)), sign(expected) != sign(actual)),
83 .float => {
84 const unequal = boolAnd(expected != actual, boolOr(expected == expected, actual == actual));
85 break :unexpected switch (strict) {
86 false => unequal,
87 true => boolOr(unequal, sign(expected) != sign(actual)),
88 };
89 },
8490 };
8591 if (switch (info) {
8692 else => unexpected,
......@@ -88,43 +94,43 @@ noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected)) !void {
8894 }) return error.Unexpected;
8995}
9096test checkExpected {
91 if (checkExpected(nan(f16), nan(f16)) == error.Unexpected) return error.Unexpected;
92 if (checkExpected(nan(f16), -nan(f16)) != error.Unexpected) return error.Unexpected;
93 if (checkExpected(@as(f16, 0.0), @as(f16, 0.0)) == error.Unexpected) return error.Unexpected;
94 if (checkExpected(@as(f16, -0.0), @as(f16, -0.0)) == error.Unexpected) return error.Unexpected;
95 if (checkExpected(@as(f16, -0.0), @as(f16, 0.0)) != error.Unexpected) return error.Unexpected;
96 if (checkExpected(@as(f16, 0.0), @as(f16, -0.0)) != error.Unexpected) return error.Unexpected;
97
98 if (checkExpected(nan(f32), nan(f32)) == error.Unexpected) return error.Unexpected;
99 if (checkExpected(nan(f32), -nan(f32)) != error.Unexpected) return error.Unexpected;
100 if (checkExpected(@as(f32, 0.0), @as(f32, 0.0)) == error.Unexpected) return error.Unexpected;
101 if (checkExpected(@as(f32, -0.0), @as(f32, -0.0)) == error.Unexpected) return error.Unexpected;
102 if (checkExpected(@as(f32, -0.0), @as(f32, 0.0)) != error.Unexpected) return error.Unexpected;
103 if (checkExpected(@as(f32, 0.0), @as(f32, -0.0)) != error.Unexpected) return error.Unexpected;
104
105 if (checkExpected(nan(f64), nan(f64)) == error.Unexpected) return error.Unexpected;
106 if (checkExpected(nan(f64), -nan(f64)) != error.Unexpected) return error.Unexpected;
107 if (checkExpected(@as(f64, 0.0), @as(f64, 0.0)) == error.Unexpected) return error.Unexpected;
108 if (checkExpected(@as(f64, -0.0), @as(f64, -0.0)) == error.Unexpected) return error.Unexpected;
109 if (checkExpected(@as(f64, -0.0), @as(f64, 0.0)) != error.Unexpected) return error.Unexpected;
110 if (checkExpected(@as(f64, 0.0), @as(f64, -0.0)) != error.Unexpected) return error.Unexpected;
111
112 if (checkExpected(nan(f80), nan(f80)) == error.Unexpected) return error.Unexpected;
113 if (checkExpected(nan(f80), -nan(f80)) != error.Unexpected) return error.Unexpected;
114 if (checkExpected(@as(f80, 0.0), @as(f80, 0.0)) == error.Unexpected) return error.Unexpected;
115 if (checkExpected(@as(f80, -0.0), @as(f80, -0.0)) == error.Unexpected) return error.Unexpected;
116 if (checkExpected(@as(f80, -0.0), @as(f80, 0.0)) != error.Unexpected) return error.Unexpected;
117 if (checkExpected(@as(f80, 0.0), @as(f80, -0.0)) != error.Unexpected) return error.Unexpected;
118
119 if (checkExpected(nan(f128), nan(f128)) == error.Unexpected) return error.Unexpected;
120 if (checkExpected(nan(f128), -nan(f128)) != error.Unexpected) return error.Unexpected;
121 if (checkExpected(@as(f128, 0.0), @as(f128, 0.0)) == error.Unexpected) return error.Unexpected;
122 if (checkExpected(@as(f128, -0.0), @as(f128, -0.0)) == error.Unexpected) return error.Unexpected;
123 if (checkExpected(@as(f128, -0.0), @as(f128, 0.0)) != error.Unexpected) return error.Unexpected;
124 if (checkExpected(@as(f128, 0.0), @as(f128, -0.0)) != error.Unexpected) return error.Unexpected;
97 if (checkExpected(nan(f16), nan(f16), true) == error.Unexpected) return error.Unexpected;
98 if (checkExpected(nan(f16), -nan(f16), true) != error.Unexpected) return error.Unexpected;
99 if (checkExpected(@as(f16, 0.0), @as(f16, 0.0), true) == error.Unexpected) return error.Unexpected;
100 if (checkExpected(@as(f16, -0.0), @as(f16, -0.0), true) == error.Unexpected) return error.Unexpected;
101 if (checkExpected(@as(f16, -0.0), @as(f16, 0.0), true) != error.Unexpected) return error.Unexpected;
102 if (checkExpected(@as(f16, 0.0), @as(f16, -0.0), true) != error.Unexpected) return error.Unexpected;
103
104 if (checkExpected(nan(f32), nan(f32), true) == error.Unexpected) return error.Unexpected;
105 if (checkExpected(nan(f32), -nan(f32), true) != error.Unexpected) return error.Unexpected;
106 if (checkExpected(@as(f32, 0.0), @as(f32, 0.0), true) == error.Unexpected) return error.Unexpected;
107 if (checkExpected(@as(f32, -0.0), @as(f32, -0.0), true) == error.Unexpected) return error.Unexpected;
108 if (checkExpected(@as(f32, -0.0), @as(f32, 0.0), true) != error.Unexpected) return error.Unexpected;
109 if (checkExpected(@as(f32, 0.0), @as(f32, -0.0), true) != error.Unexpected) return error.Unexpected;
110
111 if (checkExpected(nan(f64), nan(f64), true) == error.Unexpected) return error.Unexpected;
112 if (checkExpected(nan(f64), -nan(f64), true) != error.Unexpected) return error.Unexpected;
113 if (checkExpected(@as(f64, 0.0), @as(f64, 0.0), true) == error.Unexpected) return error.Unexpected;
114 if (checkExpected(@as(f64, -0.0), @as(f64, -0.0), true) == error.Unexpected) return error.Unexpected;
115 if (checkExpected(@as(f64, -0.0), @as(f64, 0.0), true) != error.Unexpected) return error.Unexpected;
116 if (checkExpected(@as(f64, 0.0), @as(f64, -0.0), true) != error.Unexpected) return error.Unexpected;
117
118 if (checkExpected(nan(f80), nan(f80), true) == error.Unexpected) return error.Unexpected;
119 if (checkExpected(nan(f80), -nan(f80), true) != error.Unexpected) return error.Unexpected;
120 if (checkExpected(@as(f80, 0.0), @as(f80, 0.0), true) == error.Unexpected) return error.Unexpected;
121 if (checkExpected(@as(f80, -0.0), @as(f80, -0.0), true) == error.Unexpected) return error.Unexpected;
122 if (checkExpected(@as(f80, -0.0), @as(f80, 0.0), true) != error.Unexpected) return error.Unexpected;
123 if (checkExpected(@as(f80, 0.0), @as(f80, -0.0), true) != error.Unexpected) return error.Unexpected;
124
125 if (checkExpected(nan(f128), nan(f128), true) == error.Unexpected) return error.Unexpected;
126 if (checkExpected(nan(f128), -nan(f128), true) != error.Unexpected) return error.Unexpected;
127 if (checkExpected(@as(f128, 0.0), @as(f128, 0.0), true) == error.Unexpected) return error.Unexpected;
128 if (checkExpected(@as(f128, -0.0), @as(f128, -0.0), true) == error.Unexpected) return error.Unexpected;
129 if (checkExpected(@as(f128, -0.0), @as(f128, 0.0), true) != error.Unexpected) return error.Unexpected;
130 if (checkExpected(@as(f128, 0.0), @as(f128, -0.0), true) != error.Unexpected) return error.Unexpected;
125131}
126132
127fn Unary(comptime op: anytype) type {
133fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) type {
128134 return struct {
129135 // noinline so that `mem_arg` is on the stack
130136 noinline fn testArgKinds(
......@@ -151,9 +157,9 @@ fn Unary(comptime op: anytype) type {
151157 const expected = comptime op(Type, imm_arg);
152158 var reg_arg = mem_arg;
153159 _ = .{&reg_arg};
154 try checkExpected(expected, op(Type, reg_arg));
155 try checkExpected(expected, op(Type, mem_arg));
156 try checkExpected(expected, op(Type, imm_arg));
160 try checkExpected(expected, op(Type, reg_arg), opts.strict);
161 try checkExpected(expected, op(Type, mem_arg), opts.strict);
162 try checkExpected(expected, op(Type, imm_arg), opts.strict);
157163 }
158164 // noinline for a more helpful stack trace
159165 noinline fn testArgs(comptime Type: type, comptime imm_arg: Type) !void {
......@@ -1325,7 +1331,7 @@ fn Unary(comptime op: anytype) type {
13251331 };
13261332}
13271333
1328fn Binary(comptime op: anytype) type {
1334fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) type {
13291335 return struct {
13301336 // noinline so that `mem_lhs` and `mem_rhs` are on the stack
13311337 noinline fn testArgKinds(
......@@ -1355,14 +1361,14 @@ fn Binary(comptime op: anytype) type {
13551361 var reg_lhs = mem_lhs;
13561362 var reg_rhs = mem_rhs;
13571363 _ = .{ &reg_lhs, &reg_rhs };
1358 try checkExpected(expected, op(Type, reg_lhs, reg_rhs));
1359 try checkExpected(expected, op(Type, reg_lhs, mem_rhs));
1360 try checkExpected(expected, op(Type, reg_lhs, imm_rhs));
1361 try checkExpected(expected, op(Type, mem_lhs, reg_rhs));
1362 try checkExpected(expected, op(Type, mem_lhs, mem_rhs));
1363 try checkExpected(expected, op(Type, mem_lhs, imm_rhs));
1364 try checkExpected(expected, op(Type, imm_lhs, reg_rhs));
1365 try checkExpected(expected, op(Type, imm_lhs, mem_rhs));
1364 try checkExpected(expected, op(Type, reg_lhs, reg_rhs), opts.strict);
1365 try checkExpected(expected, op(Type, reg_lhs, mem_rhs), opts.strict);
1366 try checkExpected(expected, op(Type, reg_lhs, imm_rhs), opts.strict);
1367 try checkExpected(expected, op(Type, mem_lhs, reg_rhs), opts.strict);
1368 try checkExpected(expected, op(Type, mem_lhs, mem_rhs), opts.strict);
1369 try checkExpected(expected, op(Type, mem_lhs, imm_rhs), opts.strict);
1370 try checkExpected(expected, op(Type, imm_lhs, reg_rhs), opts.strict);
1371 try checkExpected(expected, op(Type, imm_lhs, mem_rhs), opts.strict);
13661372 }
13671373 // noinline for a more helpful stack trace
13681374 noinline fn testArgs(comptime Type: type, comptime imm_lhs: Type, comptime imm_rhs: Type) !void {
......@@ -1442,6 +1448,1719 @@ fn Binary(comptime op: anytype) type {
14421448 0x8b4bb7c2969e3b121cc1082c442f8b4330f0a50058438fed56447175bb10178607ecfe425cb54dacc25ef26810f3e04681de1844f1aa8d029aca75d658634806,
14431449 );
14441450 }
1451 fn testFloatTypes() !void {
1452 @setEvalBranchQuota(21_700);
1453
1454 try testArgs(f16, -nan(f16), -nan(f16));
1455 try testArgs(f16, -nan(f16), -inf(f16));
1456 try testArgs(f16, -nan(f16), -fmax(f16));
1457 try testArgs(f16, -nan(f16), -10.0);
1458 try testArgs(f16, -nan(f16), -1.0);
1459 try testArgs(f16, -nan(f16), -0.1);
1460 try testArgs(f16, -nan(f16), -fmin(f16));
1461 try testArgs(f16, -nan(f16), -tmin(f16));
1462 try testArgs(f16, -nan(f16), -0.0);
1463 try testArgs(f16, -nan(f16), 0.0);
1464 try testArgs(f16, -nan(f16), tmin(f16));
1465 try testArgs(f16, -nan(f16), fmin(f16));
1466 try testArgs(f16, -nan(f16), 0.1);
1467 try testArgs(f16, -nan(f16), 1.0);
1468 try testArgs(f16, -nan(f16), 10.0);
1469 try testArgs(f16, -nan(f16), fmax(f16));
1470 try testArgs(f16, -nan(f16), inf(f16));
1471 try testArgs(f16, -nan(f16), nan(f16));
1472
1473 try testArgs(f16, -inf(f16), -nan(f16));
1474 try testArgs(f16, -inf(f16), -inf(f16));
1475 try testArgs(f16, -inf(f16), -fmax(f16));
1476 try testArgs(f16, -inf(f16), -10.0);
1477 try testArgs(f16, -inf(f16), -1.0);
1478 try testArgs(f16, -inf(f16), -0.1);
1479 try testArgs(f16, -inf(f16), -fmin(f16));
1480 try testArgs(f16, -inf(f16), -tmin(f16));
1481 try testArgs(f16, -inf(f16), -0.0);
1482 try testArgs(f16, -inf(f16), 0.0);
1483 try testArgs(f16, -inf(f16), tmin(f16));
1484 try testArgs(f16, -inf(f16), fmin(f16));
1485 try testArgs(f16, -inf(f16), 0.1);
1486 try testArgs(f16, -inf(f16), 1.0);
1487 try testArgs(f16, -inf(f16), 10.0);
1488 try testArgs(f16, -inf(f16), fmax(f16));
1489 try testArgs(f16, -inf(f16), inf(f16));
1490 try testArgs(f16, -inf(f16), nan(f16));
1491
1492 try testArgs(f16, -fmax(f16), -nan(f16));
1493 try testArgs(f16, -fmax(f16), -inf(f16));
1494 try testArgs(f16, -fmax(f16), -fmax(f16));
1495 try testArgs(f16, -fmax(f16), -10.0);
1496 try testArgs(f16, -fmax(f16), -1.0);
1497 try testArgs(f16, -fmax(f16), -0.1);
1498 try testArgs(f16, -fmax(f16), -fmin(f16));
1499 try testArgs(f16, -fmax(f16), -tmin(f16));
1500 try testArgs(f16, -fmax(f16), -0.0);
1501 try testArgs(f16, -fmax(f16), 0.0);
1502 try testArgs(f16, -fmax(f16), tmin(f16));
1503 try testArgs(f16, -fmax(f16), fmin(f16));
1504 try testArgs(f16, -fmax(f16), 0.1);
1505 try testArgs(f16, -fmax(f16), 1.0);
1506 try testArgs(f16, -fmax(f16), 10.0);
1507 try testArgs(f16, -fmax(f16), fmax(f16));
1508 try testArgs(f16, -fmax(f16), inf(f16));
1509 try testArgs(f16, -fmax(f16), nan(f16));
1510
1511 try testArgs(f16, -10.0, -nan(f16));
1512 try testArgs(f16, -10.0, -inf(f16));
1513 try testArgs(f16, -10.0, -fmax(f16));
1514 try testArgs(f16, -10.0, -10.0);
1515 try testArgs(f16, -10.0, -1.0);
1516 try testArgs(f16, -10.0, -0.1);
1517 try testArgs(f16, -10.0, -fmin(f16));
1518 try testArgs(f16, -10.0, -tmin(f16));
1519 try testArgs(f16, -10.0, -0.0);
1520 try testArgs(f16, -10.0, 0.0);
1521 try testArgs(f16, -10.0, tmin(f16));
1522 try testArgs(f16, -10.0, fmin(f16));
1523 try testArgs(f16, -10.0, 0.1);
1524 try testArgs(f16, -10.0, 1.0);
1525 try testArgs(f16, -10.0, 10.0);
1526 try testArgs(f16, -10.0, fmax(f16));
1527 try testArgs(f16, -10.0, inf(f16));
1528 try testArgs(f16, -10.0, nan(f16));
1529
1530 try testArgs(f16, -1.0, -nan(f16));
1531 try testArgs(f16, -1.0, -inf(f16));
1532 try testArgs(f16, -1.0, -fmax(f16));
1533 try testArgs(f16, -1.0, -10.0);
1534 try testArgs(f16, -1.0, -1.0);
1535 try testArgs(f16, -1.0, -0.1);
1536 try testArgs(f16, -1.0, -fmin(f16));
1537 try testArgs(f16, -1.0, -tmin(f16));
1538 try testArgs(f16, -1.0, -0.0);
1539 try testArgs(f16, -1.0, 0.0);
1540 try testArgs(f16, -1.0, tmin(f16));
1541 try testArgs(f16, -1.0, fmin(f16));
1542 try testArgs(f16, -1.0, 0.1);
1543 try testArgs(f16, -1.0, 1.0);
1544 try testArgs(f16, -1.0, 10.0);
1545 try testArgs(f16, -1.0, fmax(f16));
1546 try testArgs(f16, -1.0, inf(f16));
1547 try testArgs(f16, -1.0, nan(f16));
1548
1549 try testArgs(f16, -0.1, -nan(f16));
1550 try testArgs(f16, -0.1, -inf(f16));
1551 try testArgs(f16, -0.1, -fmax(f16));
1552 try testArgs(f16, -0.1, -10.0);
1553 try testArgs(f16, -0.1, -1.0);
1554 try testArgs(f16, -0.1, -0.1);
1555 try testArgs(f16, -0.1, -fmin(f16));
1556 try testArgs(f16, -0.1, -tmin(f16));
1557 try testArgs(f16, -0.1, -0.0);
1558 try testArgs(f16, -0.1, 0.0);
1559 try testArgs(f16, -0.1, tmin(f16));
1560 try testArgs(f16, -0.1, fmin(f16));
1561 try testArgs(f16, -0.1, 0.1);
1562 try testArgs(f16, -0.1, 1.0);
1563 try testArgs(f16, -0.1, 10.0);
1564 try testArgs(f16, -0.1, fmax(f16));
1565 try testArgs(f16, -0.1, inf(f16));
1566 try testArgs(f16, -0.1, nan(f16));
1567
1568 try testArgs(f16, -fmin(f16), -nan(f16));
1569 try testArgs(f16, -fmin(f16), -inf(f16));
1570 try testArgs(f16, -fmin(f16), -fmax(f16));
1571 try testArgs(f16, -fmin(f16), -10.0);
1572 try testArgs(f16, -fmin(f16), -1.0);
1573 try testArgs(f16, -fmin(f16), -0.1);
1574 try testArgs(f16, -fmin(f16), -fmin(f16));
1575 try testArgs(f16, -fmin(f16), -tmin(f16));
1576 try testArgs(f16, -fmin(f16), -0.0);
1577 try testArgs(f16, -fmin(f16), 0.0);
1578 try testArgs(f16, -fmin(f16), tmin(f16));
1579 try testArgs(f16, -fmin(f16), fmin(f16));
1580 try testArgs(f16, -fmin(f16), 0.1);
1581 try testArgs(f16, -fmin(f16), 1.0);
1582 try testArgs(f16, -fmin(f16), 10.0);
1583 try testArgs(f16, -fmin(f16), fmax(f16));
1584 try testArgs(f16, -fmin(f16), inf(f16));
1585 try testArgs(f16, -fmin(f16), nan(f16));
1586
1587 try testArgs(f16, -tmin(f16), -nan(f16));
1588 try testArgs(f16, -tmin(f16), -inf(f16));
1589 try testArgs(f16, -tmin(f16), -fmax(f16));
1590 try testArgs(f16, -tmin(f16), -10.0);
1591 try testArgs(f16, -tmin(f16), -1.0);
1592 try testArgs(f16, -tmin(f16), -0.1);
1593 try testArgs(f16, -tmin(f16), -fmin(f16));
1594 try testArgs(f16, -tmin(f16), -tmin(f16));
1595 try testArgs(f16, -tmin(f16), -0.0);
1596 try testArgs(f16, -tmin(f16), 0.0);
1597 try testArgs(f16, -tmin(f16), tmin(f16));
1598 try testArgs(f16, -tmin(f16), fmin(f16));
1599 try testArgs(f16, -tmin(f16), 0.1);
1600 try testArgs(f16, -tmin(f16), 1.0);
1601 try testArgs(f16, -tmin(f16), 10.0);
1602 try testArgs(f16, -tmin(f16), fmax(f16));
1603 try testArgs(f16, -tmin(f16), inf(f16));
1604 try testArgs(f16, -tmin(f16), nan(f16));
1605
1606 try testArgs(f16, -0.0, -nan(f16));
1607 try testArgs(f16, -0.0, -inf(f16));
1608 try testArgs(f16, -0.0, -fmax(f16));
1609 try testArgs(f16, -0.0, -10.0);
1610 try testArgs(f16, -0.0, -1.0);
1611 try testArgs(f16, -0.0, -0.1);
1612 try testArgs(f16, -0.0, -fmin(f16));
1613 try testArgs(f16, -0.0, -tmin(f16));
1614 try testArgs(f16, -0.0, -0.0);
1615 try testArgs(f16, -0.0, 0.0);
1616 try testArgs(f16, -0.0, tmin(f16));
1617 try testArgs(f16, -0.0, fmin(f16));
1618 try testArgs(f16, -0.0, 0.1);
1619 try testArgs(f16, -0.0, 1.0);
1620 try testArgs(f16, -0.0, 10.0);
1621 try testArgs(f16, -0.0, fmax(f16));
1622 try testArgs(f16, -0.0, inf(f16));
1623 try testArgs(f16, -0.0, nan(f16));
1624
1625 try testArgs(f16, 0.0, -nan(f16));
1626 try testArgs(f16, 0.0, -inf(f16));
1627 try testArgs(f16, 0.0, -fmax(f16));
1628 try testArgs(f16, 0.0, -10.0);
1629 try testArgs(f16, 0.0, -1.0);
1630 try testArgs(f16, 0.0, -0.1);
1631 try testArgs(f16, 0.0, -fmin(f16));
1632 try testArgs(f16, 0.0, -tmin(f16));
1633 try testArgs(f16, 0.0, -0.0);
1634 try testArgs(f16, 0.0, 0.0);
1635 try testArgs(f16, 0.0, tmin(f16));
1636 try testArgs(f16, 0.0, fmin(f16));
1637 try testArgs(f16, 0.0, 0.1);
1638 try testArgs(f16, 0.0, 1.0);
1639 try testArgs(f16, 0.0, 10.0);
1640 try testArgs(f16, 0.0, fmax(f16));
1641 try testArgs(f16, 0.0, inf(f16));
1642 try testArgs(f16, 0.0, nan(f16));
1643
1644 try testArgs(f16, tmin(f16), -nan(f16));
1645 try testArgs(f16, tmin(f16), -inf(f16));
1646 try testArgs(f16, tmin(f16), -fmax(f16));
1647 try testArgs(f16, tmin(f16), -10.0);
1648 try testArgs(f16, tmin(f16), -1.0);
1649 try testArgs(f16, tmin(f16), -0.1);
1650 try testArgs(f16, tmin(f16), -fmin(f16));
1651 try testArgs(f16, tmin(f16), -tmin(f16));
1652 try testArgs(f16, tmin(f16), -0.0);
1653 try testArgs(f16, tmin(f16), 0.0);
1654 try testArgs(f16, tmin(f16), tmin(f16));
1655 try testArgs(f16, tmin(f16), fmin(f16));
1656 try testArgs(f16, tmin(f16), 0.1);
1657 try testArgs(f16, tmin(f16), 1.0);
1658 try testArgs(f16, tmin(f16), 10.0);
1659 try testArgs(f16, tmin(f16), fmax(f16));
1660 try testArgs(f16, tmin(f16), inf(f16));
1661 try testArgs(f16, tmin(f16), nan(f16));
1662
1663 try testArgs(f16, fmin(f16), -nan(f16));
1664 try testArgs(f16, fmin(f16), -inf(f16));
1665 try testArgs(f16, fmin(f16), -fmax(f16));
1666 try testArgs(f16, fmin(f16), -10.0);
1667 try testArgs(f16, fmin(f16), -1.0);
1668 try testArgs(f16, fmin(f16), -0.1);
1669 try testArgs(f16, fmin(f16), -fmin(f16));
1670 try testArgs(f16, fmin(f16), -tmin(f16));
1671 try testArgs(f16, fmin(f16), -0.0);
1672 try testArgs(f16, fmin(f16), 0.0);
1673 try testArgs(f16, fmin(f16), tmin(f16));
1674 try testArgs(f16, fmin(f16), fmin(f16));
1675 try testArgs(f16, fmin(f16), 0.1);
1676 try testArgs(f16, fmin(f16), 1.0);
1677 try testArgs(f16, fmin(f16), 10.0);
1678 try testArgs(f16, fmin(f16), fmax(f16));
1679 try testArgs(f16, fmin(f16), inf(f16));
1680 try testArgs(f16, fmin(f16), nan(f16));
1681
1682 try testArgs(f16, 0.1, -nan(f16));
1683 try testArgs(f16, 0.1, -inf(f16));
1684 try testArgs(f16, 0.1, -fmax(f16));
1685 try testArgs(f16, 0.1, -10.0);
1686 try testArgs(f16, 0.1, -1.0);
1687 try testArgs(f16, 0.1, -0.1);
1688 try testArgs(f16, 0.1, -fmin(f16));
1689 try testArgs(f16, 0.1, -tmin(f16));
1690 try testArgs(f16, 0.1, -0.0);
1691 try testArgs(f16, 0.1, 0.0);
1692 try testArgs(f16, 0.1, tmin(f16));
1693 try testArgs(f16, 0.1, fmin(f16));
1694 try testArgs(f16, 0.1, 0.1);
1695 try testArgs(f16, 0.1, 1.0);
1696 try testArgs(f16, 0.1, 10.0);
1697 try testArgs(f16, 0.1, fmax(f16));
1698 try testArgs(f16, 0.1, inf(f16));
1699 try testArgs(f16, 0.1, nan(f16));
1700
1701 try testArgs(f16, 1.0, -nan(f16));
1702 try testArgs(f16, 1.0, -inf(f16));
1703 try testArgs(f16, 1.0, -fmax(f16));
1704 try testArgs(f16, 1.0, -10.0);
1705 try testArgs(f16, 1.0, -1.0);
1706 try testArgs(f16, 1.0, -0.1);
1707 try testArgs(f16, 1.0, -fmin(f16));
1708 try testArgs(f16, 1.0, -tmin(f16));
1709 try testArgs(f16, 1.0, -0.0);
1710 try testArgs(f16, 1.0, 0.0);
1711 try testArgs(f16, 1.0, tmin(f16));
1712 try testArgs(f16, 1.0, fmin(f16));
1713 try testArgs(f16, 1.0, 0.1);
1714 try testArgs(f16, 1.0, 1.0);
1715 try testArgs(f16, 1.0, 10.0);
1716 try testArgs(f16, 1.0, fmax(f16));
1717 try testArgs(f16, 1.0, inf(f16));
1718 try testArgs(f16, 1.0, nan(f16));
1719
1720 try testArgs(f16, 10.0, -nan(f16));
1721 try testArgs(f16, 10.0, -inf(f16));
1722 try testArgs(f16, 10.0, -fmax(f16));
1723 try testArgs(f16, 10.0, -10.0);
1724 try testArgs(f16, 10.0, -1.0);
1725 try testArgs(f16, 10.0, -0.1);
1726 try testArgs(f16, 10.0, -fmin(f16));
1727 try testArgs(f16, 10.0, -tmin(f16));
1728 try testArgs(f16, 10.0, -0.0);
1729 try testArgs(f16, 10.0, 0.0);
1730 try testArgs(f16, 10.0, tmin(f16));
1731 try testArgs(f16, 10.0, fmin(f16));
1732 try testArgs(f16, 10.0, 0.1);
1733 try testArgs(f16, 10.0, 1.0);
1734 try testArgs(f16, 10.0, 10.0);
1735 try testArgs(f16, 10.0, fmax(f16));
1736 try testArgs(f16, 10.0, inf(f16));
1737 try testArgs(f16, 10.0, nan(f16));
1738
1739 try testArgs(f16, fmax(f16), -nan(f16));
1740 try testArgs(f16, fmax(f16), -inf(f16));
1741 try testArgs(f16, fmax(f16), -fmax(f16));
1742 try testArgs(f16, fmax(f16), -10.0);
1743 try testArgs(f16, fmax(f16), -1.0);
1744 try testArgs(f16, fmax(f16), -0.1);
1745 try testArgs(f16, fmax(f16), -fmin(f16));
1746 try testArgs(f16, fmax(f16), -tmin(f16));
1747 try testArgs(f16, fmax(f16), -0.0);
1748 try testArgs(f16, fmax(f16), 0.0);
1749 try testArgs(f16, fmax(f16), tmin(f16));
1750 try testArgs(f16, fmax(f16), fmin(f16));
1751 try testArgs(f16, fmax(f16), 0.1);
1752 try testArgs(f16, fmax(f16), 1.0);
1753 try testArgs(f16, fmax(f16), 10.0);
1754 try testArgs(f16, fmax(f16), fmax(f16));
1755 try testArgs(f16, fmax(f16), inf(f16));
1756 try testArgs(f16, fmax(f16), nan(f16));
1757
1758 try testArgs(f16, inf(f16), -nan(f16));
1759 try testArgs(f16, inf(f16), -inf(f16));
1760 try testArgs(f16, inf(f16), -fmax(f16));
1761 try testArgs(f16, inf(f16), -10.0);
1762 try testArgs(f16, inf(f16), -1.0);
1763 try testArgs(f16, inf(f16), -0.1);
1764 try testArgs(f16, inf(f16), -fmin(f16));
1765 try testArgs(f16, inf(f16), -tmin(f16));
1766 try testArgs(f16, inf(f16), -0.0);
1767 try testArgs(f16, inf(f16), 0.0);
1768 try testArgs(f16, inf(f16), tmin(f16));
1769 try testArgs(f16, inf(f16), fmin(f16));
1770 try testArgs(f16, inf(f16), 0.1);
1771 try testArgs(f16, inf(f16), 1.0);
1772 try testArgs(f16, inf(f16), 10.0);
1773 try testArgs(f16, inf(f16), fmax(f16));
1774 try testArgs(f16, inf(f16), inf(f16));
1775 try testArgs(f16, inf(f16), nan(f16));
1776
1777 try testArgs(f16, nan(f16), -nan(f16));
1778 try testArgs(f16, nan(f16), -inf(f16));
1779 try testArgs(f16, nan(f16), -fmax(f16));
1780 try testArgs(f16, nan(f16), -10.0);
1781 try testArgs(f16, nan(f16), -1.0);
1782 try testArgs(f16, nan(f16), -0.1);
1783 try testArgs(f16, nan(f16), -fmin(f16));
1784 try testArgs(f16, nan(f16), -tmin(f16));
1785 try testArgs(f16, nan(f16), -0.0);
1786 try testArgs(f16, nan(f16), 0.0);
1787 try testArgs(f16, nan(f16), tmin(f16));
1788 try testArgs(f16, nan(f16), fmin(f16));
1789 try testArgs(f16, nan(f16), 0.1);
1790 try testArgs(f16, nan(f16), 1.0);
1791 try testArgs(f16, nan(f16), 10.0);
1792 try testArgs(f16, nan(f16), fmax(f16));
1793 try testArgs(f16, nan(f16), inf(f16));
1794 try testArgs(f16, nan(f16), nan(f16));
1795
1796 try testArgs(f32, -nan(f32), -nan(f32));
1797 try testArgs(f32, -nan(f32), -inf(f32));
1798 try testArgs(f32, -nan(f32), -fmax(f32));
1799 try testArgs(f32, -nan(f32), -10.0);
1800 try testArgs(f32, -nan(f32), -1.0);
1801 try testArgs(f32, -nan(f32), -0.1);
1802 try testArgs(f32, -nan(f32), -fmin(f32));
1803 try testArgs(f32, -nan(f32), -tmin(f32));
1804 try testArgs(f32, -nan(f32), -0.0);
1805 try testArgs(f32, -nan(f32), 0.0);
1806 try testArgs(f32, -nan(f32), tmin(f32));
1807 try testArgs(f32, -nan(f32), fmin(f32));
1808 try testArgs(f32, -nan(f32), 0.1);
1809 try testArgs(f32, -nan(f32), 1.0);
1810 try testArgs(f32, -nan(f32), 10.0);
1811 try testArgs(f32, -nan(f32), fmax(f32));
1812 try testArgs(f32, -nan(f32), inf(f32));
1813 try testArgs(f32, -nan(f32), nan(f32));
1814
1815 try testArgs(f32, -inf(f32), -nan(f32));
1816 try testArgs(f32, -inf(f32), -inf(f32));
1817 try testArgs(f32, -inf(f32), -fmax(f32));
1818 try testArgs(f32, -inf(f32), -10.0);
1819 try testArgs(f32, -inf(f32), -1.0);
1820 try testArgs(f32, -inf(f32), -0.1);
1821 try testArgs(f32, -inf(f32), -fmin(f32));
1822 try testArgs(f32, -inf(f32), -tmin(f32));
1823 try testArgs(f32, -inf(f32), -0.0);
1824 try testArgs(f32, -inf(f32), 0.0);
1825 try testArgs(f32, -inf(f32), tmin(f32));
1826 try testArgs(f32, -inf(f32), fmin(f32));
1827 try testArgs(f32, -inf(f32), 0.1);
1828 try testArgs(f32, -inf(f32), 1.0);
1829 try testArgs(f32, -inf(f32), 10.0);
1830 try testArgs(f32, -inf(f32), fmax(f32));
1831 try testArgs(f32, -inf(f32), inf(f32));
1832 try testArgs(f32, -inf(f32), nan(f32));
1833
1834 try testArgs(f32, -fmax(f32), -nan(f32));
1835 try testArgs(f32, -fmax(f32), -inf(f32));
1836 try testArgs(f32, -fmax(f32), -fmax(f32));
1837 try testArgs(f32, -fmax(f32), -10.0);
1838 try testArgs(f32, -fmax(f32), -1.0);
1839 try testArgs(f32, -fmax(f32), -0.1);
1840 try testArgs(f32, -fmax(f32), -fmin(f32));
1841 try testArgs(f32, -fmax(f32), -tmin(f32));
1842 try testArgs(f32, -fmax(f32), -0.0);
1843 try testArgs(f32, -fmax(f32), 0.0);
1844 try testArgs(f32, -fmax(f32), tmin(f32));
1845 try testArgs(f32, -fmax(f32), fmin(f32));
1846 try testArgs(f32, -fmax(f32), 0.1);
1847 try testArgs(f32, -fmax(f32), 1.0);
1848 try testArgs(f32, -fmax(f32), 10.0);
1849 try testArgs(f32, -fmax(f32), fmax(f32));
1850 try testArgs(f32, -fmax(f32), inf(f32));
1851 try testArgs(f32, -fmax(f32), nan(f32));
1852
1853 try testArgs(f32, -10.0, -nan(f32));
1854 try testArgs(f32, -10.0, -inf(f32));
1855 try testArgs(f32, -10.0, -fmax(f32));
1856 try testArgs(f32, -10.0, -10.0);
1857 try testArgs(f32, -10.0, -1.0);
1858 try testArgs(f32, -10.0, -0.1);
1859 try testArgs(f32, -10.0, -fmin(f32));
1860 try testArgs(f32, -10.0, -tmin(f32));
1861 try testArgs(f32, -10.0, -0.0);
1862 try testArgs(f32, -10.0, 0.0);
1863 try testArgs(f32, -10.0, tmin(f32));
1864 try testArgs(f32, -10.0, fmin(f32));
1865 try testArgs(f32, -10.0, 0.1);
1866 try testArgs(f32, -10.0, 1.0);
1867 try testArgs(f32, -10.0, 10.0);
1868 try testArgs(f32, -10.0, fmax(f32));
1869 try testArgs(f32, -10.0, inf(f32));
1870 try testArgs(f32, -10.0, nan(f32));
1871
1872 try testArgs(f32, -1.0, -nan(f32));
1873 try testArgs(f32, -1.0, -inf(f32));
1874 try testArgs(f32, -1.0, -fmax(f32));
1875 try testArgs(f32, -1.0, -10.0);
1876 try testArgs(f32, -1.0, -1.0);
1877 try testArgs(f32, -1.0, -0.1);
1878 try testArgs(f32, -1.0, -fmin(f32));
1879 try testArgs(f32, -1.0, -tmin(f32));
1880 try testArgs(f32, -1.0, -0.0);
1881 try testArgs(f32, -1.0, 0.0);
1882 try testArgs(f32, -1.0, tmin(f32));
1883 try testArgs(f32, -1.0, fmin(f32));
1884 try testArgs(f32, -1.0, 0.1);
1885 try testArgs(f32, -1.0, 1.0);
1886 try testArgs(f32, -1.0, 10.0);
1887 try testArgs(f32, -1.0, fmax(f32));
1888 try testArgs(f32, -1.0, inf(f32));
1889 try testArgs(f32, -1.0, nan(f32));
1890
1891 try testArgs(f32, -0.1, -nan(f32));
1892 try testArgs(f32, -0.1, -inf(f32));
1893 try testArgs(f32, -0.1, -fmax(f32));
1894 try testArgs(f32, -0.1, -10.0);
1895 try testArgs(f32, -0.1, -1.0);
1896 try testArgs(f32, -0.1, -0.1);
1897 try testArgs(f32, -0.1, -fmin(f32));
1898 try testArgs(f32, -0.1, -tmin(f32));
1899 try testArgs(f32, -0.1, -0.0);
1900 try testArgs(f32, -0.1, 0.0);
1901 try testArgs(f32, -0.1, tmin(f32));
1902 try testArgs(f32, -0.1, fmin(f32));
1903 try testArgs(f32, -0.1, 0.1);
1904 try testArgs(f32, -0.1, 1.0);
1905 try testArgs(f32, -0.1, 10.0);
1906 try testArgs(f32, -0.1, fmax(f32));
1907 try testArgs(f32, -0.1, inf(f32));
1908 try testArgs(f32, -0.1, nan(f32));
1909
1910 try testArgs(f32, -fmin(f32), -nan(f32));
1911 try testArgs(f32, -fmin(f32), -inf(f32));
1912 try testArgs(f32, -fmin(f32), -fmax(f32));
1913 try testArgs(f32, -fmin(f32), -10.0);
1914 try testArgs(f32, -fmin(f32), -1.0);
1915 try testArgs(f32, -fmin(f32), -0.1);
1916 try testArgs(f32, -fmin(f32), -fmin(f32));
1917 try testArgs(f32, -fmin(f32), -tmin(f32));
1918 try testArgs(f32, -fmin(f32), -0.0);
1919 try testArgs(f32, -fmin(f32), 0.0);
1920 try testArgs(f32, -fmin(f32), tmin(f32));
1921 try testArgs(f32, -fmin(f32), fmin(f32));
1922 try testArgs(f32, -fmin(f32), 0.1);
1923 try testArgs(f32, -fmin(f32), 1.0);
1924 try testArgs(f32, -fmin(f32), 10.0);
1925 try testArgs(f32, -fmin(f32), fmax(f32));
1926 try testArgs(f32, -fmin(f32), inf(f32));
1927 try testArgs(f32, -fmin(f32), nan(f32));
1928
1929 try testArgs(f32, -tmin(f32), -nan(f32));
1930 try testArgs(f32, -tmin(f32), -inf(f32));
1931 try testArgs(f32, -tmin(f32), -fmax(f32));
1932 try testArgs(f32, -tmin(f32), -10.0);
1933 try testArgs(f32, -tmin(f32), -1.0);
1934 try testArgs(f32, -tmin(f32), -0.1);
1935 try testArgs(f32, -tmin(f32), -fmin(f32));
1936 try testArgs(f32, -tmin(f32), -tmin(f32));
1937 try testArgs(f32, -tmin(f32), -0.0);
1938 try testArgs(f32, -tmin(f32), 0.0);
1939 try testArgs(f32, -tmin(f32), tmin(f32));
1940 try testArgs(f32, -tmin(f32), fmin(f32));
1941 try testArgs(f32, -tmin(f32), 0.1);
1942 try testArgs(f32, -tmin(f32), 1.0);
1943 try testArgs(f32, -tmin(f32), 10.0);
1944 try testArgs(f32, -tmin(f32), fmax(f32));
1945 try testArgs(f32, -tmin(f32), inf(f32));
1946 try testArgs(f32, -tmin(f32), nan(f32));
1947
1948 try testArgs(f32, -0.0, -nan(f32));
1949 try testArgs(f32, -0.0, -inf(f32));
1950 try testArgs(f32, -0.0, -fmax(f32));
1951 try testArgs(f32, -0.0, -10.0);
1952 try testArgs(f32, -0.0, -1.0);
1953 try testArgs(f32, -0.0, -0.1);
1954 try testArgs(f32, -0.0, -fmin(f32));
1955 try testArgs(f32, -0.0, -tmin(f32));
1956 try testArgs(f32, -0.0, -0.0);
1957 try testArgs(f32, -0.0, 0.0);
1958 try testArgs(f32, -0.0, tmin(f32));
1959 try testArgs(f32, -0.0, fmin(f32));
1960 try testArgs(f32, -0.0, 0.1);
1961 try testArgs(f32, -0.0, 1.0);
1962 try testArgs(f32, -0.0, 10.0);
1963 try testArgs(f32, -0.0, fmax(f32));
1964 try testArgs(f32, -0.0, inf(f32));
1965 try testArgs(f32, -0.0, nan(f32));
1966
1967 try testArgs(f32, 0.0, -nan(f32));
1968 try testArgs(f32, 0.0, -inf(f32));
1969 try testArgs(f32, 0.0, -fmax(f32));
1970 try testArgs(f32, 0.0, -10.0);
1971 try testArgs(f32, 0.0, -1.0);
1972 try testArgs(f32, 0.0, -0.1);
1973 try testArgs(f32, 0.0, -fmin(f32));
1974 try testArgs(f32, 0.0, -tmin(f32));
1975 try testArgs(f32, 0.0, -0.0);
1976 try testArgs(f32, 0.0, 0.0);
1977 try testArgs(f32, 0.0, tmin(f32));
1978 try testArgs(f32, 0.0, fmin(f32));
1979 try testArgs(f32, 0.0, 0.1);
1980 try testArgs(f32, 0.0, 1.0);
1981 try testArgs(f32, 0.0, 10.0);
1982 try testArgs(f32, 0.0, fmax(f32));
1983 try testArgs(f32, 0.0, inf(f32));
1984 try testArgs(f32, 0.0, nan(f32));
1985
1986 try testArgs(f32, tmin(f32), -nan(f32));
1987 try testArgs(f32, tmin(f32), -inf(f32));
1988 try testArgs(f32, tmin(f32), -fmax(f32));
1989 try testArgs(f32, tmin(f32), -10.0);
1990 try testArgs(f32, tmin(f32), -1.0);
1991 try testArgs(f32, tmin(f32), -0.1);
1992 try testArgs(f32, tmin(f32), -fmin(f32));
1993 try testArgs(f32, tmin(f32), -tmin(f32));
1994 try testArgs(f32, tmin(f32), -0.0);
1995 try testArgs(f32, tmin(f32), 0.0);
1996 try testArgs(f32, tmin(f32), tmin(f32));
1997 try testArgs(f32, tmin(f32), fmin(f32));
1998 try testArgs(f32, tmin(f32), 0.1);
1999 try testArgs(f32, tmin(f32), 1.0);
2000 try testArgs(f32, tmin(f32), 10.0);
2001 try testArgs(f32, tmin(f32), fmax(f32));
2002 try testArgs(f32, tmin(f32), inf(f32));
2003 try testArgs(f32, tmin(f32), nan(f32));
2004
2005 try testArgs(f32, fmin(f32), -nan(f32));
2006 try testArgs(f32, fmin(f32), -inf(f32));
2007 try testArgs(f32, fmin(f32), -fmax(f32));
2008 try testArgs(f32, fmin(f32), -10.0);
2009 try testArgs(f32, fmin(f32), -1.0);
2010 try testArgs(f32, fmin(f32), -0.1);
2011 try testArgs(f32, fmin(f32), -fmin(f32));
2012 try testArgs(f32, fmin(f32), -tmin(f32));
2013 try testArgs(f32, fmin(f32), -0.0);
2014 try testArgs(f32, fmin(f32), 0.0);
2015 try testArgs(f32, fmin(f32), tmin(f32));
2016 try testArgs(f32, fmin(f32), fmin(f32));
2017 try testArgs(f32, fmin(f32), 0.1);
2018 try testArgs(f32, fmin(f32), 1.0);
2019 try testArgs(f32, fmin(f32), 10.0);
2020 try testArgs(f32, fmin(f32), fmax(f32));
2021 try testArgs(f32, fmin(f32), inf(f32));
2022 try testArgs(f32, fmin(f32), nan(f32));
2023
2024 try testArgs(f32, 0.1, -nan(f32));
2025 try testArgs(f32, 0.1, -inf(f32));
2026 try testArgs(f32, 0.1, -fmax(f32));
2027 try testArgs(f32, 0.1, -10.0);
2028 try testArgs(f32, 0.1, -1.0);
2029 try testArgs(f32, 0.1, -0.1);
2030 try testArgs(f32, 0.1, -fmin(f32));
2031 try testArgs(f32, 0.1, -tmin(f32));
2032 try testArgs(f32, 0.1, -0.0);
2033 try testArgs(f32, 0.1, 0.0);
2034 try testArgs(f32, 0.1, tmin(f32));
2035 try testArgs(f32, 0.1, fmin(f32));
2036 try testArgs(f32, 0.1, 0.1);
2037 try testArgs(f32, 0.1, 1.0);
2038 try testArgs(f32, 0.1, 10.0);
2039 try testArgs(f32, 0.1, fmax(f32));
2040 try testArgs(f32, 0.1, inf(f32));
2041 try testArgs(f32, 0.1, nan(f32));
2042
2043 try testArgs(f32, 1.0, -nan(f32));
2044 try testArgs(f32, 1.0, -inf(f32));
2045 try testArgs(f32, 1.0, -fmax(f32));
2046 try testArgs(f32, 1.0, -10.0);
2047 try testArgs(f32, 1.0, -1.0);
2048 try testArgs(f32, 1.0, -0.1);
2049 try testArgs(f32, 1.0, -fmin(f32));
2050 try testArgs(f32, 1.0, -tmin(f32));
2051 try testArgs(f32, 1.0, -0.0);
2052 try testArgs(f32, 1.0, 0.0);
2053 try testArgs(f32, 1.0, tmin(f32));
2054 try testArgs(f32, 1.0, fmin(f32));
2055 try testArgs(f32, 1.0, 0.1);
2056 try testArgs(f32, 1.0, 1.0);
2057 try testArgs(f32, 1.0, 10.0);
2058 try testArgs(f32, 1.0, fmax(f32));
2059 try testArgs(f32, 1.0, inf(f32));
2060 try testArgs(f32, 1.0, nan(f32));
2061
2062 try testArgs(f32, 10.0, -nan(f32));
2063 try testArgs(f32, 10.0, -inf(f32));
2064 try testArgs(f32, 10.0, -fmax(f32));
2065 try testArgs(f32, 10.0, -10.0);
2066 try testArgs(f32, 10.0, -1.0);
2067 try testArgs(f32, 10.0, -0.1);
2068 try testArgs(f32, 10.0, -fmin(f32));
2069 try testArgs(f32, 10.0, -tmin(f32));
2070 try testArgs(f32, 10.0, -0.0);
2071 try testArgs(f32, 10.0, 0.0);
2072 try testArgs(f32, 10.0, tmin(f32));
2073 try testArgs(f32, 10.0, fmin(f32));
2074 try testArgs(f32, 10.0, 0.1);
2075 try testArgs(f32, 10.0, 1.0);
2076 try testArgs(f32, 10.0, 10.0);
2077 try testArgs(f32, 10.0, fmax(f32));
2078 try testArgs(f32, 10.0, inf(f32));
2079 try testArgs(f32, 10.0, nan(f32));
2080
2081 try testArgs(f32, fmax(f32), -nan(f32));
2082 try testArgs(f32, fmax(f32), -inf(f32));
2083 try testArgs(f32, fmax(f32), -fmax(f32));
2084 try testArgs(f32, fmax(f32), -10.0);
2085 try testArgs(f32, fmax(f32), -1.0);
2086 try testArgs(f32, fmax(f32), -0.1);
2087 try testArgs(f32, fmax(f32), -fmin(f32));
2088 try testArgs(f32, fmax(f32), -tmin(f32));
2089 try testArgs(f32, fmax(f32), -0.0);
2090 try testArgs(f32, fmax(f32), 0.0);
2091 try testArgs(f32, fmax(f32), tmin(f32));
2092 try testArgs(f32, fmax(f32), fmin(f32));
2093 try testArgs(f32, fmax(f32), 0.1);
2094 try testArgs(f32, fmax(f32), 1.0);
2095 try testArgs(f32, fmax(f32), 10.0);
2096 try testArgs(f32, fmax(f32), fmax(f32));
2097 try testArgs(f32, fmax(f32), inf(f32));
2098 try testArgs(f32, fmax(f32), nan(f32));
2099
2100 try testArgs(f32, inf(f32), -nan(f32));
2101 try testArgs(f32, inf(f32), -inf(f32));
2102 try testArgs(f32, inf(f32), -fmax(f32));
2103 try testArgs(f32, inf(f32), -10.0);
2104 try testArgs(f32, inf(f32), -1.0);
2105 try testArgs(f32, inf(f32), -0.1);
2106 try testArgs(f32, inf(f32), -fmin(f32));
2107 try testArgs(f32, inf(f32), -tmin(f32));
2108 try testArgs(f32, inf(f32), -0.0);
2109 try testArgs(f32, inf(f32), 0.0);
2110 try testArgs(f32, inf(f32), tmin(f32));
2111 try testArgs(f32, inf(f32), fmin(f32));
2112 try testArgs(f32, inf(f32), 0.1);
2113 try testArgs(f32, inf(f32), 1.0);
2114 try testArgs(f32, inf(f32), 10.0);
2115 try testArgs(f32, inf(f32), fmax(f32));
2116 try testArgs(f32, inf(f32), inf(f32));
2117 try testArgs(f32, inf(f32), nan(f32));
2118
2119 try testArgs(f32, nan(f32), -nan(f32));
2120 try testArgs(f32, nan(f32), -inf(f32));
2121 try testArgs(f32, nan(f32), -fmax(f32));
2122 try testArgs(f32, nan(f32), -10.0);
2123 try testArgs(f32, nan(f32), -1.0);
2124 try testArgs(f32, nan(f32), -0.1);
2125 try testArgs(f32, nan(f32), -fmin(f32));
2126 try testArgs(f32, nan(f32), -tmin(f32));
2127 try testArgs(f32, nan(f32), -0.0);
2128 try testArgs(f32, nan(f32), 0.0);
2129 try testArgs(f32, nan(f32), tmin(f32));
2130 try testArgs(f32, nan(f32), fmin(f32));
2131 try testArgs(f32, nan(f32), 0.1);
2132 try testArgs(f32, nan(f32), 1.0);
2133 try testArgs(f32, nan(f32), 10.0);
2134 try testArgs(f32, nan(f32), fmax(f32));
2135 try testArgs(f32, nan(f32), inf(f32));
2136 try testArgs(f32, nan(f32), nan(f32));
2137
2138 try testArgs(f64, -nan(f64), -nan(f64));
2139 try testArgs(f64, -nan(f64), -inf(f64));
2140 try testArgs(f64, -nan(f64), -fmax(f64));
2141 try testArgs(f64, -nan(f64), -10.0);
2142 try testArgs(f64, -nan(f64), -1.0);
2143 try testArgs(f64, -nan(f64), -0.1);
2144 try testArgs(f64, -nan(f64), -fmin(f64));
2145 try testArgs(f64, -nan(f64), -tmin(f64));
2146 try testArgs(f64, -nan(f64), -0.0);
2147 try testArgs(f64, -nan(f64), 0.0);
2148 try testArgs(f64, -nan(f64), tmin(f64));
2149 try testArgs(f64, -nan(f64), fmin(f64));
2150 try testArgs(f64, -nan(f64), 0.1);
2151 try testArgs(f64, -nan(f64), 1.0);
2152 try testArgs(f64, -nan(f64), 10.0);
2153 try testArgs(f64, -nan(f64), fmax(f64));
2154 try testArgs(f64, -nan(f64), inf(f64));
2155 try testArgs(f64, -nan(f64), nan(f64));
2156
2157 try testArgs(f64, -inf(f64), -nan(f64));
2158 try testArgs(f64, -inf(f64), -inf(f64));
2159 try testArgs(f64, -inf(f64), -fmax(f64));
2160 try testArgs(f64, -inf(f64), -10.0);
2161 try testArgs(f64, -inf(f64), -1.0);
2162 try testArgs(f64, -inf(f64), -0.1);
2163 try testArgs(f64, -inf(f64), -fmin(f64));
2164 try testArgs(f64, -inf(f64), -tmin(f64));
2165 try testArgs(f64, -inf(f64), -0.0);
2166 try testArgs(f64, -inf(f64), 0.0);
2167 try testArgs(f64, -inf(f64), tmin(f64));
2168 try testArgs(f64, -inf(f64), fmin(f64));
2169 try testArgs(f64, -inf(f64), 0.1);
2170 try testArgs(f64, -inf(f64), 1.0);
2171 try testArgs(f64, -inf(f64), 10.0);
2172 try testArgs(f64, -inf(f64), fmax(f64));
2173 try testArgs(f64, -inf(f64), inf(f64));
2174 try testArgs(f64, -inf(f64), nan(f64));
2175
2176 try testArgs(f64, -fmax(f64), -nan(f64));
2177 try testArgs(f64, -fmax(f64), -inf(f64));
2178 try testArgs(f64, -fmax(f64), -fmax(f64));
2179 try testArgs(f64, -fmax(f64), -10.0);
2180 try testArgs(f64, -fmax(f64), -1.0);
2181 try testArgs(f64, -fmax(f64), -0.1);
2182 try testArgs(f64, -fmax(f64), -fmin(f64));
2183 try testArgs(f64, -fmax(f64), -tmin(f64));
2184 try testArgs(f64, -fmax(f64), -0.0);
2185 try testArgs(f64, -fmax(f64), 0.0);
2186 try testArgs(f64, -fmax(f64), tmin(f64));
2187 try testArgs(f64, -fmax(f64), fmin(f64));
2188 try testArgs(f64, -fmax(f64), 0.1);
2189 try testArgs(f64, -fmax(f64), 1.0);
2190 try testArgs(f64, -fmax(f64), 10.0);
2191 try testArgs(f64, -fmax(f64), fmax(f64));
2192 try testArgs(f64, -fmax(f64), inf(f64));
2193 try testArgs(f64, -fmax(f64), nan(f64));
2194
2195 try testArgs(f64, -10.0, -nan(f64));
2196 try testArgs(f64, -10.0, -inf(f64));
2197 try testArgs(f64, -10.0, -fmax(f64));
2198 try testArgs(f64, -10.0, -10.0);
2199 try testArgs(f64, -10.0, -1.0);
2200 try testArgs(f64, -10.0, -0.1);
2201 try testArgs(f64, -10.0, -fmin(f64));
2202 try testArgs(f64, -10.0, -tmin(f64));
2203 try testArgs(f64, -10.0, -0.0);
2204 try testArgs(f64, -10.0, 0.0);
2205 try testArgs(f64, -10.0, tmin(f64));
2206 try testArgs(f64, -10.0, fmin(f64));
2207 try testArgs(f64, -10.0, 0.1);
2208 try testArgs(f64, -10.0, 1.0);
2209 try testArgs(f64, -10.0, 10.0);
2210 try testArgs(f64, -10.0, fmax(f64));
2211 try testArgs(f64, -10.0, inf(f64));
2212 try testArgs(f64, -10.0, nan(f64));
2213
2214 try testArgs(f64, -1.0, -nan(f64));
2215 try testArgs(f64, -1.0, -inf(f64));
2216 try testArgs(f64, -1.0, -fmax(f64));
2217 try testArgs(f64, -1.0, -10.0);
2218 try testArgs(f64, -1.0, -1.0);
2219 try testArgs(f64, -1.0, -0.1);
2220 try testArgs(f64, -1.0, -fmin(f64));
2221 try testArgs(f64, -1.0, -tmin(f64));
2222 try testArgs(f64, -1.0, -0.0);
2223 try testArgs(f64, -1.0, 0.0);
2224 try testArgs(f64, -1.0, tmin(f64));
2225 try testArgs(f64, -1.0, fmin(f64));
2226 try testArgs(f64, -1.0, 0.1);
2227 try testArgs(f64, -1.0, 1.0);
2228 try testArgs(f64, -1.0, 10.0);
2229 try testArgs(f64, -1.0, fmax(f64));
2230 try testArgs(f64, -1.0, inf(f64));
2231 try testArgs(f64, -1.0, nan(f64));
2232
2233 try testArgs(f64, -0.1, -nan(f64));
2234 try testArgs(f64, -0.1, -inf(f64));
2235 try testArgs(f64, -0.1, -fmax(f64));
2236 try testArgs(f64, -0.1, -10.0);
2237 try testArgs(f64, -0.1, -1.0);
2238 try testArgs(f64, -0.1, -0.1);
2239 try testArgs(f64, -0.1, -fmin(f64));
2240 try testArgs(f64, -0.1, -tmin(f64));
2241 try testArgs(f64, -0.1, -0.0);
2242 try testArgs(f64, -0.1, 0.0);
2243 try testArgs(f64, -0.1, tmin(f64));
2244 try testArgs(f64, -0.1, fmin(f64));
2245 try testArgs(f64, -0.1, 0.1);
2246 try testArgs(f64, -0.1, 1.0);
2247 try testArgs(f64, -0.1, 10.0);
2248 try testArgs(f64, -0.1, fmax(f64));
2249 try testArgs(f64, -0.1, inf(f64));
2250 try testArgs(f64, -0.1, nan(f64));
2251
2252 try testArgs(f64, -fmin(f64), -nan(f64));
2253 try testArgs(f64, -fmin(f64), -inf(f64));
2254 try testArgs(f64, -fmin(f64), -fmax(f64));
2255 try testArgs(f64, -fmin(f64), -10.0);
2256 try testArgs(f64, -fmin(f64), -1.0);
2257 try testArgs(f64, -fmin(f64), -0.1);
2258 try testArgs(f64, -fmin(f64), -fmin(f64));
2259 try testArgs(f64, -fmin(f64), -tmin(f64));
2260 try testArgs(f64, -fmin(f64), -0.0);
2261 try testArgs(f64, -fmin(f64), 0.0);
2262 try testArgs(f64, -fmin(f64), tmin(f64));
2263 try testArgs(f64, -fmin(f64), fmin(f64));
2264 try testArgs(f64, -fmin(f64), 0.1);
2265 try testArgs(f64, -fmin(f64), 1.0);
2266 try testArgs(f64, -fmin(f64), 10.0);
2267 try testArgs(f64, -fmin(f64), fmax(f64));
2268 try testArgs(f64, -fmin(f64), inf(f64));
2269 try testArgs(f64, -fmin(f64), nan(f64));
2270
2271 try testArgs(f64, -tmin(f64), -nan(f64));
2272 try testArgs(f64, -tmin(f64), -inf(f64));
2273 try testArgs(f64, -tmin(f64), -fmax(f64));
2274 try testArgs(f64, -tmin(f64), -10.0);
2275 try testArgs(f64, -tmin(f64), -1.0);
2276 try testArgs(f64, -tmin(f64), -0.1);
2277 try testArgs(f64, -tmin(f64), -fmin(f64));
2278 try testArgs(f64, -tmin(f64), -tmin(f64));
2279 try testArgs(f64, -tmin(f64), -0.0);
2280 try testArgs(f64, -tmin(f64), 0.0);
2281 try testArgs(f64, -tmin(f64), tmin(f64));
2282 try testArgs(f64, -tmin(f64), fmin(f64));
2283 try testArgs(f64, -tmin(f64), 0.1);
2284 try testArgs(f64, -tmin(f64), 1.0);
2285 try testArgs(f64, -tmin(f64), 10.0);
2286 try testArgs(f64, -tmin(f64), fmax(f64));
2287 try testArgs(f64, -tmin(f64), inf(f64));
2288 try testArgs(f64, -tmin(f64), nan(f64));
2289
2290 try testArgs(f64, -0.0, -nan(f64));
2291 try testArgs(f64, -0.0, -inf(f64));
2292 try testArgs(f64, -0.0, -fmax(f64));
2293 try testArgs(f64, -0.0, -10.0);
2294 try testArgs(f64, -0.0, -1.0);
2295 try testArgs(f64, -0.0, -0.1);
2296 try testArgs(f64, -0.0, -fmin(f64));
2297 try testArgs(f64, -0.0, -tmin(f64));
2298 try testArgs(f64, -0.0, -0.0);
2299 try testArgs(f64, -0.0, 0.0);
2300 try testArgs(f64, -0.0, tmin(f64));
2301 try testArgs(f64, -0.0, fmin(f64));
2302 try testArgs(f64, -0.0, 0.1);
2303 try testArgs(f64, -0.0, 1.0);
2304 try testArgs(f64, -0.0, 10.0);
2305 try testArgs(f64, -0.0, fmax(f64));
2306 try testArgs(f64, -0.0, inf(f64));
2307 try testArgs(f64, -0.0, nan(f64));
2308
2309 try testArgs(f64, 0.0, -nan(f64));
2310 try testArgs(f64, 0.0, -inf(f64));
2311 try testArgs(f64, 0.0, -fmax(f64));
2312 try testArgs(f64, 0.0, -10.0);
2313 try testArgs(f64, 0.0, -1.0);
2314 try testArgs(f64, 0.0, -0.1);
2315 try testArgs(f64, 0.0, -fmin(f64));
2316 try testArgs(f64, 0.0, -tmin(f64));
2317 try testArgs(f64, 0.0, -0.0);
2318 try testArgs(f64, 0.0, 0.0);
2319 try testArgs(f64, 0.0, tmin(f64));
2320 try testArgs(f64, 0.0, fmin(f64));
2321 try testArgs(f64, 0.0, 0.1);
2322 try testArgs(f64, 0.0, 1.0);
2323 try testArgs(f64, 0.0, 10.0);
2324 try testArgs(f64, 0.0, fmax(f64));
2325 try testArgs(f64, 0.0, inf(f64));
2326 try testArgs(f64, 0.0, nan(f64));
2327
2328 try testArgs(f64, tmin(f64), -nan(f64));
2329 try testArgs(f64, tmin(f64), -inf(f64));
2330 try testArgs(f64, tmin(f64), -fmax(f64));
2331 try testArgs(f64, tmin(f64), -10.0);
2332 try testArgs(f64, tmin(f64), -1.0);
2333 try testArgs(f64, tmin(f64), -0.1);
2334 try testArgs(f64, tmin(f64), -fmin(f64));
2335 try testArgs(f64, tmin(f64), -tmin(f64));
2336 try testArgs(f64, tmin(f64), -0.0);
2337 try testArgs(f64, tmin(f64), 0.0);
2338 try testArgs(f64, tmin(f64), tmin(f64));
2339 try testArgs(f64, tmin(f64), fmin(f64));
2340 try testArgs(f64, tmin(f64), 0.1);
2341 try testArgs(f64, tmin(f64), 1.0);
2342 try testArgs(f64, tmin(f64), 10.0);
2343 try testArgs(f64, tmin(f64), fmax(f64));
2344 try testArgs(f64, tmin(f64), inf(f64));
2345 try testArgs(f64, tmin(f64), nan(f64));
2346
2347 try testArgs(f64, fmin(f64), -nan(f64));
2348 try testArgs(f64, fmin(f64), -inf(f64));
2349 try testArgs(f64, fmin(f64), -fmax(f64));
2350 try testArgs(f64, fmin(f64), -10.0);
2351 try testArgs(f64, fmin(f64), -1.0);
2352 try testArgs(f64, fmin(f64), -0.1);
2353 try testArgs(f64, fmin(f64), -fmin(f64));
2354 try testArgs(f64, fmin(f64), -tmin(f64));
2355 try testArgs(f64, fmin(f64), -0.0);
2356 try testArgs(f64, fmin(f64), 0.0);
2357 try testArgs(f64, fmin(f64), tmin(f64));
2358 try testArgs(f64, fmin(f64), fmin(f64));
2359 try testArgs(f64, fmin(f64), 0.1);
2360 try testArgs(f64, fmin(f64), 1.0);
2361 try testArgs(f64, fmin(f64), 10.0);
2362 try testArgs(f64, fmin(f64), fmax(f64));
2363 try testArgs(f64, fmin(f64), inf(f64));
2364 try testArgs(f64, fmin(f64), nan(f64));
2365
2366 try testArgs(f64, 0.1, -nan(f64));
2367 try testArgs(f64, 0.1, -inf(f64));
2368 try testArgs(f64, 0.1, -fmax(f64));
2369 try testArgs(f64, 0.1, -10.0);
2370 try testArgs(f64, 0.1, -1.0);
2371 try testArgs(f64, 0.1, -0.1);
2372 try testArgs(f64, 0.1, -fmin(f64));
2373 try testArgs(f64, 0.1, -tmin(f64));
2374 try testArgs(f64, 0.1, -0.0);
2375 try testArgs(f64, 0.1, 0.0);
2376 try testArgs(f64, 0.1, tmin(f64));
2377 try testArgs(f64, 0.1, fmin(f64));
2378 try testArgs(f64, 0.1, 0.1);
2379 try testArgs(f64, 0.1, 1.0);
2380 try testArgs(f64, 0.1, 10.0);
2381 try testArgs(f64, 0.1, fmax(f64));
2382 try testArgs(f64, 0.1, inf(f64));
2383 try testArgs(f64, 0.1, nan(f64));
2384
2385 try testArgs(f64, 1.0, -nan(f64));
2386 try testArgs(f64, 1.0, -inf(f64));
2387 try testArgs(f64, 1.0, -fmax(f64));
2388 try testArgs(f64, 1.0, -10.0);
2389 try testArgs(f64, 1.0, -1.0);
2390 try testArgs(f64, 1.0, -0.1);
2391 try testArgs(f64, 1.0, -fmin(f64));
2392 try testArgs(f64, 1.0, -tmin(f64));
2393 try testArgs(f64, 1.0, -0.0);
2394 try testArgs(f64, 1.0, 0.0);
2395 try testArgs(f64, 1.0, tmin(f64));
2396 try testArgs(f64, 1.0, fmin(f64));
2397 try testArgs(f64, 1.0, 0.1);
2398 try testArgs(f64, 1.0, 1.0);
2399 try testArgs(f64, 1.0, 10.0);
2400 try testArgs(f64, 1.0, fmax(f64));
2401 try testArgs(f64, 1.0, inf(f64));
2402 try testArgs(f64, 1.0, nan(f64));
2403
2404 try testArgs(f64, 10.0, -nan(f64));
2405 try testArgs(f64, 10.0, -inf(f64));
2406 try testArgs(f64, 10.0, -fmax(f64));
2407 try testArgs(f64, 10.0, -10.0);
2408 try testArgs(f64, 10.0, -1.0);
2409 try testArgs(f64, 10.0, -0.1);
2410 try testArgs(f64, 10.0, -fmin(f64));
2411 try testArgs(f64, 10.0, -tmin(f64));
2412 try testArgs(f64, 10.0, -0.0);
2413 try testArgs(f64, 10.0, 0.0);
2414 try testArgs(f64, 10.0, tmin(f64));
2415 try testArgs(f64, 10.0, fmin(f64));
2416 try testArgs(f64, 10.0, 0.1);
2417 try testArgs(f64, 10.0, 1.0);
2418 try testArgs(f64, 10.0, 10.0);
2419 try testArgs(f64, 10.0, fmax(f64));
2420 try testArgs(f64, 10.0, inf(f64));
2421 try testArgs(f64, 10.0, nan(f64));
2422
2423 try testArgs(f64, fmax(f64), -nan(f64));
2424 try testArgs(f64, fmax(f64), -inf(f64));
2425 try testArgs(f64, fmax(f64), -fmax(f64));
2426 try testArgs(f64, fmax(f64), -10.0);
2427 try testArgs(f64, fmax(f64), -1.0);
2428 try testArgs(f64, fmax(f64), -0.1);
2429 try testArgs(f64, fmax(f64), -fmin(f64));
2430 try testArgs(f64, fmax(f64), -tmin(f64));
2431 try testArgs(f64, fmax(f64), -0.0);
2432 try testArgs(f64, fmax(f64), 0.0);
2433 try testArgs(f64, fmax(f64), tmin(f64));
2434 try testArgs(f64, fmax(f64), fmin(f64));
2435 try testArgs(f64, fmax(f64), 0.1);
2436 try testArgs(f64, fmax(f64), 1.0);
2437 try testArgs(f64, fmax(f64), 10.0);
2438 try testArgs(f64, fmax(f64), fmax(f64));
2439 try testArgs(f64, fmax(f64), inf(f64));
2440 try testArgs(f64, fmax(f64), nan(f64));
2441
2442 try testArgs(f64, inf(f64), -nan(f64));
2443 try testArgs(f64, inf(f64), -inf(f64));
2444 try testArgs(f64, inf(f64), -fmax(f64));
2445 try testArgs(f64, inf(f64), -10.0);
2446 try testArgs(f64, inf(f64), -1.0);
2447 try testArgs(f64, inf(f64), -0.1);
2448 try testArgs(f64, inf(f64), -fmin(f64));
2449 try testArgs(f64, inf(f64), -tmin(f64));
2450 try testArgs(f64, inf(f64), -0.0);
2451 try testArgs(f64, inf(f64), 0.0);
2452 try testArgs(f64, inf(f64), tmin(f64));
2453 try testArgs(f64, inf(f64), fmin(f64));
2454 try testArgs(f64, inf(f64), 0.1);
2455 try testArgs(f64, inf(f64), 1.0);
2456 try testArgs(f64, inf(f64), 10.0);
2457 try testArgs(f64, inf(f64), fmax(f64));
2458 try testArgs(f64, inf(f64), inf(f64));
2459 try testArgs(f64, inf(f64), nan(f64));
2460
2461 try testArgs(f64, nan(f64), -nan(f64));
2462 try testArgs(f64, nan(f64), -inf(f64));
2463 try testArgs(f64, nan(f64), -fmax(f64));
2464 try testArgs(f64, nan(f64), -10.0);
2465 try testArgs(f64, nan(f64), -1.0);
2466 try testArgs(f64, nan(f64), -0.1);
2467 try testArgs(f64, nan(f64), -fmin(f64));
2468 try testArgs(f64, nan(f64), -tmin(f64));
2469 try testArgs(f64, nan(f64), -0.0);
2470 try testArgs(f64, nan(f64), 0.0);
2471 try testArgs(f64, nan(f64), tmin(f64));
2472 try testArgs(f64, nan(f64), fmin(f64));
2473 try testArgs(f64, nan(f64), 0.1);
2474 try testArgs(f64, nan(f64), 1.0);
2475 try testArgs(f64, nan(f64), 10.0);
2476 try testArgs(f64, nan(f64), fmax(f64));
2477 try testArgs(f64, nan(f64), inf(f64));
2478 try testArgs(f64, nan(f64), nan(f64));
2479
2480 try testArgs(f80, -nan(f80), -nan(f80));
2481 try testArgs(f80, -nan(f80), -inf(f80));
2482 try testArgs(f80, -nan(f80), -fmax(f80));
2483 try testArgs(f80, -nan(f80), -10.0);
2484 try testArgs(f80, -nan(f80), -1.0);
2485 try testArgs(f80, -nan(f80), -0.1);
2486 try testArgs(f80, -nan(f80), -fmin(f80));
2487 try testArgs(f80, -nan(f80), -tmin(f80));
2488 try testArgs(f80, -nan(f80), -0.0);
2489 try testArgs(f80, -nan(f80), 0.0);
2490 try testArgs(f80, -nan(f80), tmin(f80));
2491 try testArgs(f80, -nan(f80), fmin(f80));
2492 try testArgs(f80, -nan(f80), 0.1);
2493 try testArgs(f80, -nan(f80), 1.0);
2494 try testArgs(f80, -nan(f80), 10.0);
2495 try testArgs(f80, -nan(f80), fmax(f80));
2496 try testArgs(f80, -nan(f80), inf(f80));
2497 try testArgs(f80, -nan(f80), nan(f80));
2498
2499 try testArgs(f80, -inf(f80), -nan(f80));
2500 try testArgs(f80, -inf(f80), -inf(f80));
2501 try testArgs(f80, -inf(f80), -fmax(f80));
2502 try testArgs(f80, -inf(f80), -10.0);
2503 try testArgs(f80, -inf(f80), -1.0);
2504 try testArgs(f80, -inf(f80), -0.1);
2505 try testArgs(f80, -inf(f80), -fmin(f80));
2506 try testArgs(f80, -inf(f80), -tmin(f80));
2507 try testArgs(f80, -inf(f80), -0.0);
2508 try testArgs(f80, -inf(f80), 0.0);
2509 try testArgs(f80, -inf(f80), tmin(f80));
2510 try testArgs(f80, -inf(f80), fmin(f80));
2511 try testArgs(f80, -inf(f80), 0.1);
2512 try testArgs(f80, -inf(f80), 1.0);
2513 try testArgs(f80, -inf(f80), 10.0);
2514 try testArgs(f80, -inf(f80), fmax(f80));
2515 try testArgs(f80, -inf(f80), inf(f80));
2516 try testArgs(f80, -inf(f80), nan(f80));
2517
2518 try testArgs(f80, -fmax(f80), -nan(f80));
2519 try testArgs(f80, -fmax(f80), -inf(f80));
2520 try testArgs(f80, -fmax(f80), -fmax(f80));
2521 try testArgs(f80, -fmax(f80), -10.0);
2522 try testArgs(f80, -fmax(f80), -1.0);
2523 try testArgs(f80, -fmax(f80), -0.1);
2524 try testArgs(f80, -fmax(f80), -fmin(f80));
2525 try testArgs(f80, -fmax(f80), -tmin(f80));
2526 try testArgs(f80, -fmax(f80), -0.0);
2527 try testArgs(f80, -fmax(f80), 0.0);
2528 try testArgs(f80, -fmax(f80), tmin(f80));
2529 try testArgs(f80, -fmax(f80), fmin(f80));
2530 try testArgs(f80, -fmax(f80), 0.1);
2531 try testArgs(f80, -fmax(f80), 1.0);
2532 try testArgs(f80, -fmax(f80), 10.0);
2533 try testArgs(f80, -fmax(f80), fmax(f80));
2534 try testArgs(f80, -fmax(f80), inf(f80));
2535 try testArgs(f80, -fmax(f80), nan(f80));
2536
2537 try testArgs(f80, -10.0, -nan(f80));
2538 try testArgs(f80, -10.0, -inf(f80));
2539 try testArgs(f80, -10.0, -fmax(f80));
2540 try testArgs(f80, -10.0, -10.0);
2541 try testArgs(f80, -10.0, -1.0);
2542 try testArgs(f80, -10.0, -0.1);
2543 try testArgs(f80, -10.0, -fmin(f80));
2544 try testArgs(f80, -10.0, -tmin(f80));
2545 try testArgs(f80, -10.0, -0.0);
2546 try testArgs(f80, -10.0, 0.0);
2547 try testArgs(f80, -10.0, tmin(f80));
2548 try testArgs(f80, -10.0, fmin(f80));
2549 try testArgs(f80, -10.0, 0.1);
2550 try testArgs(f80, -10.0, 1.0);
2551 try testArgs(f80, -10.0, 10.0);
2552 try testArgs(f80, -10.0, fmax(f80));
2553 try testArgs(f80, -10.0, inf(f80));
2554 try testArgs(f80, -10.0, nan(f80));
2555
2556 try testArgs(f80, -1.0, -nan(f80));
2557 try testArgs(f80, -1.0, -inf(f80));
2558 try testArgs(f80, -1.0, -fmax(f80));
2559 try testArgs(f80, -1.0, -10.0);
2560 try testArgs(f80, -1.0, -1.0);
2561 try testArgs(f80, -1.0, -0.1);
2562 try testArgs(f80, -1.0, -fmin(f80));
2563 try testArgs(f80, -1.0, -tmin(f80));
2564 try testArgs(f80, -1.0, -0.0);
2565 try testArgs(f80, -1.0, 0.0);
2566 try testArgs(f80, -1.0, tmin(f80));
2567 try testArgs(f80, -1.0, fmin(f80));
2568 try testArgs(f80, -1.0, 0.1);
2569 try testArgs(f80, -1.0, 1.0);
2570 try testArgs(f80, -1.0, 10.0);
2571 try testArgs(f80, -1.0, fmax(f80));
2572 try testArgs(f80, -1.0, inf(f80));
2573 try testArgs(f80, -1.0, nan(f80));
2574
2575 try testArgs(f80, -0.1, -nan(f80));
2576 try testArgs(f80, -0.1, -inf(f80));
2577 try testArgs(f80, -0.1, -fmax(f80));
2578 try testArgs(f80, -0.1, -10.0);
2579 try testArgs(f80, -0.1, -1.0);
2580 try testArgs(f80, -0.1, -0.1);
2581 try testArgs(f80, -0.1, -fmin(f80));
2582 try testArgs(f80, -0.1, -tmin(f80));
2583 try testArgs(f80, -0.1, -0.0);
2584 try testArgs(f80, -0.1, 0.0);
2585 try testArgs(f80, -0.1, tmin(f80));
2586 try testArgs(f80, -0.1, fmin(f80));
2587 try testArgs(f80, -0.1, 0.1);
2588 try testArgs(f80, -0.1, 1.0);
2589 try testArgs(f80, -0.1, 10.0);
2590 try testArgs(f80, -0.1, fmax(f80));
2591 try testArgs(f80, -0.1, inf(f80));
2592 try testArgs(f80, -0.1, nan(f80));
2593
2594 try testArgs(f80, -fmin(f80), -nan(f80));
2595 try testArgs(f80, -fmin(f80), -inf(f80));
2596 try testArgs(f80, -fmin(f80), -fmax(f80));
2597 try testArgs(f80, -fmin(f80), -10.0);
2598 try testArgs(f80, -fmin(f80), -1.0);
2599 try testArgs(f80, -fmin(f80), -0.1);
2600 try testArgs(f80, -fmin(f80), -fmin(f80));
2601 try testArgs(f80, -fmin(f80), -tmin(f80));
2602 try testArgs(f80, -fmin(f80), -0.0);
2603 try testArgs(f80, -fmin(f80), 0.0);
2604 try testArgs(f80, -fmin(f80), tmin(f80));
2605 try testArgs(f80, -fmin(f80), fmin(f80));
2606 try testArgs(f80, -fmin(f80), 0.1);
2607 try testArgs(f80, -fmin(f80), 1.0);
2608 try testArgs(f80, -fmin(f80), 10.0);
2609 try testArgs(f80, -fmin(f80), fmax(f80));
2610 try testArgs(f80, -fmin(f80), inf(f80));
2611 try testArgs(f80, -fmin(f80), nan(f80));
2612
2613 try testArgs(f80, -tmin(f80), -nan(f80));
2614 try testArgs(f80, -tmin(f80), -inf(f80));
2615 try testArgs(f80, -tmin(f80), -fmax(f80));
2616 try testArgs(f80, -tmin(f80), -10.0);
2617 try testArgs(f80, -tmin(f80), -1.0);
2618 try testArgs(f80, -tmin(f80), -0.1);
2619 try testArgs(f80, -tmin(f80), -fmin(f80));
2620 try testArgs(f80, -tmin(f80), -tmin(f80));
2621 try testArgs(f80, -tmin(f80), -0.0);
2622 try testArgs(f80, -tmin(f80), 0.0);
2623 try testArgs(f80, -tmin(f80), tmin(f80));
2624 try testArgs(f80, -tmin(f80), fmin(f80));
2625 try testArgs(f80, -tmin(f80), 0.1);
2626 try testArgs(f80, -tmin(f80), 1.0);
2627 try testArgs(f80, -tmin(f80), 10.0);
2628 try testArgs(f80, -tmin(f80), fmax(f80));
2629 try testArgs(f80, -tmin(f80), inf(f80));
2630 try testArgs(f80, -tmin(f80), nan(f80));
2631
2632 try testArgs(f80, -0.0, -nan(f80));
2633 try testArgs(f80, -0.0, -inf(f80));
2634 try testArgs(f80, -0.0, -fmax(f80));
2635 try testArgs(f80, -0.0, -10.0);
2636 try testArgs(f80, -0.0, -1.0);
2637 try testArgs(f80, -0.0, -0.1);
2638 try testArgs(f80, -0.0, -fmin(f80));
2639 try testArgs(f80, -0.0, -tmin(f80));
2640 try testArgs(f80, -0.0, -0.0);
2641 try testArgs(f80, -0.0, 0.0);
2642 try testArgs(f80, -0.0, tmin(f80));
2643 try testArgs(f80, -0.0, fmin(f80));
2644 try testArgs(f80, -0.0, 0.1);
2645 try testArgs(f80, -0.0, 1.0);
2646 try testArgs(f80, -0.0, 10.0);
2647 try testArgs(f80, -0.0, fmax(f80));
2648 try testArgs(f80, -0.0, inf(f80));
2649 try testArgs(f80, -0.0, nan(f80));
2650
2651 try testArgs(f80, 0.0, -nan(f80));
2652 try testArgs(f80, 0.0, -inf(f80));
2653 try testArgs(f80, 0.0, -fmax(f80));
2654 try testArgs(f80, 0.0, -10.0);
2655 try testArgs(f80, 0.0, -1.0);
2656 try testArgs(f80, 0.0, -0.1);
2657 try testArgs(f80, 0.0, -fmin(f80));
2658 try testArgs(f80, 0.0, -tmin(f80));
2659 try testArgs(f80, 0.0, -0.0);
2660 try testArgs(f80, 0.0, 0.0);
2661 try testArgs(f80, 0.0, tmin(f80));
2662 try testArgs(f80, 0.0, fmin(f80));
2663 try testArgs(f80, 0.0, 0.1);
2664 try testArgs(f80, 0.0, 1.0);
2665 try testArgs(f80, 0.0, 10.0);
2666 try testArgs(f80, 0.0, fmax(f80));
2667 try testArgs(f80, 0.0, inf(f80));
2668 try testArgs(f80, 0.0, nan(f80));
2669
2670 try testArgs(f80, tmin(f80), -nan(f80));
2671 try testArgs(f80, tmin(f80), -inf(f80));
2672 try testArgs(f80, tmin(f80), -fmax(f80));
2673 try testArgs(f80, tmin(f80), -10.0);
2674 try testArgs(f80, tmin(f80), -1.0);
2675 try testArgs(f80, tmin(f80), -0.1);
2676 try testArgs(f80, tmin(f80), -fmin(f80));
2677 try testArgs(f80, tmin(f80), -tmin(f80));
2678 try testArgs(f80, tmin(f80), -0.0);
2679 try testArgs(f80, tmin(f80), 0.0);
2680 try testArgs(f80, tmin(f80), tmin(f80));
2681 try testArgs(f80, tmin(f80), fmin(f80));
2682 try testArgs(f80, tmin(f80), 0.1);
2683 try testArgs(f80, tmin(f80), 1.0);
2684 try testArgs(f80, tmin(f80), 10.0);
2685 try testArgs(f80, tmin(f80), fmax(f80));
2686 try testArgs(f80, tmin(f80), inf(f80));
2687 try testArgs(f80, tmin(f80), nan(f80));
2688
2689 try testArgs(f80, fmin(f80), -nan(f80));
2690 try testArgs(f80, fmin(f80), -inf(f80));
2691 try testArgs(f80, fmin(f80), -fmax(f80));
2692 try testArgs(f80, fmin(f80), -10.0);
2693 try testArgs(f80, fmin(f80), -1.0);
2694 try testArgs(f80, fmin(f80), -0.1);
2695 try testArgs(f80, fmin(f80), -fmin(f80));
2696 try testArgs(f80, fmin(f80), -tmin(f80));
2697 try testArgs(f80, fmin(f80), -0.0);
2698 try testArgs(f80, fmin(f80), 0.0);
2699 try testArgs(f80, fmin(f80), tmin(f80));
2700 try testArgs(f80, fmin(f80), fmin(f80));
2701 try testArgs(f80, fmin(f80), 0.1);
2702 try testArgs(f80, fmin(f80), 1.0);
2703 try testArgs(f80, fmin(f80), 10.0);
2704 try testArgs(f80, fmin(f80), fmax(f80));
2705 try testArgs(f80, fmin(f80), inf(f80));
2706 try testArgs(f80, fmin(f80), nan(f80));
2707
2708 try testArgs(f80, 0.1, -nan(f80));
2709 try testArgs(f80, 0.1, -inf(f80));
2710 try testArgs(f80, 0.1, -fmax(f80));
2711 try testArgs(f80, 0.1, -10.0);
2712 try testArgs(f80, 0.1, -1.0);
2713 try testArgs(f80, 0.1, -0.1);
2714 try testArgs(f80, 0.1, -fmin(f80));
2715 try testArgs(f80, 0.1, -tmin(f80));
2716 try testArgs(f80, 0.1, -0.0);
2717 try testArgs(f80, 0.1, 0.0);
2718 try testArgs(f80, 0.1, tmin(f80));
2719 try testArgs(f80, 0.1, fmin(f80));
2720 try testArgs(f80, 0.1, 0.1);
2721 try testArgs(f80, 0.1, 1.0);
2722 try testArgs(f80, 0.1, 10.0);
2723 try testArgs(f80, 0.1, fmax(f80));
2724 try testArgs(f80, 0.1, inf(f80));
2725 try testArgs(f80, 0.1, nan(f80));
2726
2727 try testArgs(f80, 1.0, -nan(f80));
2728 try testArgs(f80, 1.0, -inf(f80));
2729 try testArgs(f80, 1.0, -fmax(f80));
2730 try testArgs(f80, 1.0, -10.0);
2731 try testArgs(f80, 1.0, -1.0);
2732 try testArgs(f80, 1.0, -0.1);
2733 try testArgs(f80, 1.0, -fmin(f80));
2734 try testArgs(f80, 1.0, -tmin(f80));
2735 try testArgs(f80, 1.0, -0.0);
2736 try testArgs(f80, 1.0, 0.0);
2737 try testArgs(f80, 1.0, tmin(f80));
2738 try testArgs(f80, 1.0, fmin(f80));
2739 try testArgs(f80, 1.0, 0.1);
2740 try testArgs(f80, 1.0, 1.0);
2741 try testArgs(f80, 1.0, 10.0);
2742 try testArgs(f80, 1.0, fmax(f80));
2743 try testArgs(f80, 1.0, inf(f80));
2744 try testArgs(f80, 1.0, nan(f80));
2745
2746 try testArgs(f80, 10.0, -nan(f80));
2747 try testArgs(f80, 10.0, -inf(f80));
2748 try testArgs(f80, 10.0, -fmax(f80));
2749 try testArgs(f80, 10.0, -10.0);
2750 try testArgs(f80, 10.0, -1.0);
2751 try testArgs(f80, 10.0, -0.1);
2752 try testArgs(f80, 10.0, -fmin(f80));
2753 try testArgs(f80, 10.0, -tmin(f80));
2754 try testArgs(f80, 10.0, -0.0);
2755 try testArgs(f80, 10.0, 0.0);
2756 try testArgs(f80, 10.0, tmin(f80));
2757 try testArgs(f80, 10.0, fmin(f80));
2758 try testArgs(f80, 10.0, 0.1);
2759 try testArgs(f80, 10.0, 1.0);
2760 try testArgs(f80, 10.0, 10.0);
2761 try testArgs(f80, 10.0, fmax(f80));
2762 try testArgs(f80, 10.0, inf(f80));
2763 try testArgs(f80, 10.0, nan(f80));
2764
2765 try testArgs(f80, fmax(f80), -nan(f80));
2766 try testArgs(f80, fmax(f80), -inf(f80));
2767 try testArgs(f80, fmax(f80), -fmax(f80));
2768 try testArgs(f80, fmax(f80), -10.0);
2769 try testArgs(f80, fmax(f80), -1.0);
2770 try testArgs(f80, fmax(f80), -0.1);
2771 try testArgs(f80, fmax(f80), -fmin(f80));
2772 try testArgs(f80, fmax(f80), -tmin(f80));
2773 try testArgs(f80, fmax(f80), -0.0);
2774 try testArgs(f80, fmax(f80), 0.0);
2775 try testArgs(f80, fmax(f80), tmin(f80));
2776 try testArgs(f80, fmax(f80), fmin(f80));
2777 try testArgs(f80, fmax(f80), 0.1);
2778 try testArgs(f80, fmax(f80), 1.0);
2779 try testArgs(f80, fmax(f80), 10.0);
2780 try testArgs(f80, fmax(f80), fmax(f80));
2781 try testArgs(f80, fmax(f80), inf(f80));
2782 try testArgs(f80, fmax(f80), nan(f80));
2783
2784 try testArgs(f80, inf(f80), -nan(f80));
2785 try testArgs(f80, inf(f80), -inf(f80));
2786 try testArgs(f80, inf(f80), -fmax(f80));
2787 try testArgs(f80, inf(f80), -10.0);
2788 try testArgs(f80, inf(f80), -1.0);
2789 try testArgs(f80, inf(f80), -0.1);
2790 try testArgs(f80, inf(f80), -fmin(f80));
2791 try testArgs(f80, inf(f80), -tmin(f80));
2792 try testArgs(f80, inf(f80), -0.0);
2793 try testArgs(f80, inf(f80), 0.0);
2794 try testArgs(f80, inf(f80), tmin(f80));
2795 try testArgs(f80, inf(f80), fmin(f80));
2796 try testArgs(f80, inf(f80), 0.1);
2797 try testArgs(f80, inf(f80), 1.0);
2798 try testArgs(f80, inf(f80), 10.0);
2799 try testArgs(f80, inf(f80), fmax(f80));
2800 try testArgs(f80, inf(f80), inf(f80));
2801 try testArgs(f80, inf(f80), nan(f80));
2802
2803 try testArgs(f80, nan(f80), -nan(f80));
2804 try testArgs(f80, nan(f80), -inf(f80));
2805 try testArgs(f80, nan(f80), -fmax(f80));
2806 try testArgs(f80, nan(f80), -10.0);
2807 try testArgs(f80, nan(f80), -1.0);
2808 try testArgs(f80, nan(f80), -0.1);
2809 try testArgs(f80, nan(f80), -fmin(f80));
2810 try testArgs(f80, nan(f80), -tmin(f80));
2811 try testArgs(f80, nan(f80), -0.0);
2812 try testArgs(f80, nan(f80), 0.0);
2813 try testArgs(f80, nan(f80), tmin(f80));
2814 try testArgs(f80, nan(f80), fmin(f80));
2815 try testArgs(f80, nan(f80), 0.1);
2816 try testArgs(f80, nan(f80), 1.0);
2817 try testArgs(f80, nan(f80), 10.0);
2818 try testArgs(f80, nan(f80), fmax(f80));
2819 try testArgs(f80, nan(f80), inf(f80));
2820 try testArgs(f80, nan(f80), nan(f80));
2821
2822 try testArgs(f128, -nan(f128), -nan(f128));
2823 try testArgs(f128, -nan(f128), -inf(f128));
2824 try testArgs(f128, -nan(f128), -fmax(f128));
2825 try testArgs(f128, -nan(f128), -10.0);
2826 try testArgs(f128, -nan(f128), -1.0);
2827 try testArgs(f128, -nan(f128), -0.1);
2828 try testArgs(f128, -nan(f128), -fmin(f128));
2829 try testArgs(f128, -nan(f128), -tmin(f128));
2830 try testArgs(f128, -nan(f128), -0.0);
2831 try testArgs(f128, -nan(f128), 0.0);
2832 try testArgs(f128, -nan(f128), tmin(f128));
2833 try testArgs(f128, -nan(f128), fmin(f128));
2834 try testArgs(f128, -nan(f128), 0.1);
2835 try testArgs(f128, -nan(f128), 1.0);
2836 try testArgs(f128, -nan(f128), 10.0);
2837 try testArgs(f128, -nan(f128), fmax(f128));
2838 try testArgs(f128, -nan(f128), inf(f128));
2839 try testArgs(f128, -nan(f128), nan(f128));
2840
2841 try testArgs(f128, -inf(f128), -nan(f128));
2842 try testArgs(f128, -inf(f128), -inf(f128));
2843 try testArgs(f128, -inf(f128), -fmax(f128));
2844 try testArgs(f128, -inf(f128), -10.0);
2845 try testArgs(f128, -inf(f128), -1.0);
2846 try testArgs(f128, -inf(f128), -0.1);
2847 try testArgs(f128, -inf(f128), -fmin(f128));
2848 try testArgs(f128, -inf(f128), -tmin(f128));
2849 try testArgs(f128, -inf(f128), -0.0);
2850 try testArgs(f128, -inf(f128), 0.0);
2851 try testArgs(f128, -inf(f128), tmin(f128));
2852 try testArgs(f128, -inf(f128), fmin(f128));
2853 try testArgs(f128, -inf(f128), 0.1);
2854 try testArgs(f128, -inf(f128), 1.0);
2855 try testArgs(f128, -inf(f128), 10.0);
2856 try testArgs(f128, -inf(f128), fmax(f128));
2857 try testArgs(f128, -inf(f128), inf(f128));
2858 try testArgs(f128, -inf(f128), nan(f128));
2859
2860 try testArgs(f128, -fmax(f128), -nan(f128));
2861 try testArgs(f128, -fmax(f128), -inf(f128));
2862 try testArgs(f128, -fmax(f128), -fmax(f128));
2863 try testArgs(f128, -fmax(f128), -10.0);
2864 try testArgs(f128, -fmax(f128), -1.0);
2865 try testArgs(f128, -fmax(f128), -0.1);
2866 try testArgs(f128, -fmax(f128), -fmin(f128));
2867 try testArgs(f128, -fmax(f128), -tmin(f128));
2868 try testArgs(f128, -fmax(f128), -0.0);
2869 try testArgs(f128, -fmax(f128), 0.0);
2870 try testArgs(f128, -fmax(f128), tmin(f128));
2871 try testArgs(f128, -fmax(f128), fmin(f128));
2872 try testArgs(f128, -fmax(f128), 0.1);
2873 try testArgs(f128, -fmax(f128), 1.0);
2874 try testArgs(f128, -fmax(f128), 10.0);
2875 try testArgs(f128, -fmax(f128), fmax(f128));
2876 try testArgs(f128, -fmax(f128), inf(f128));
2877 try testArgs(f128, -fmax(f128), nan(f128));
2878
2879 try testArgs(f128, -10.0, -nan(f128));
2880 try testArgs(f128, -10.0, -inf(f128));
2881 try testArgs(f128, -10.0, -fmax(f128));
2882 try testArgs(f128, -10.0, -10.0);
2883 try testArgs(f128, -10.0, -1.0);
2884 try testArgs(f128, -10.0, -0.1);
2885 try testArgs(f128, -10.0, -fmin(f128));
2886 try testArgs(f128, -10.0, -tmin(f128));
2887 try testArgs(f128, -10.0, -0.0);
2888 try testArgs(f128, -10.0, 0.0);
2889 try testArgs(f128, -10.0, tmin(f128));
2890 try testArgs(f128, -10.0, fmin(f128));
2891 try testArgs(f128, -10.0, 0.1);
2892 try testArgs(f128, -10.0, 1.0);
2893 try testArgs(f128, -10.0, 10.0);
2894 try testArgs(f128, -10.0, fmax(f128));
2895 try testArgs(f128, -10.0, inf(f128));
2896 try testArgs(f128, -10.0, nan(f128));
2897
2898 try testArgs(f128, -1.0, -nan(f128));
2899 try testArgs(f128, -1.0, -inf(f128));
2900 try testArgs(f128, -1.0, -fmax(f128));
2901 try testArgs(f128, -1.0, -10.0);
2902 try testArgs(f128, -1.0, -1.0);
2903 try testArgs(f128, -1.0, -0.1);
2904 try testArgs(f128, -1.0, -fmin(f128));
2905 try testArgs(f128, -1.0, -tmin(f128));
2906 try testArgs(f128, -1.0, -0.0);
2907 try testArgs(f128, -1.0, 0.0);
2908 try testArgs(f128, -1.0, tmin(f128));
2909 try testArgs(f128, -1.0, fmin(f128));
2910 try testArgs(f128, -1.0, 0.1);
2911 try testArgs(f128, -1.0, 1.0);
2912 try testArgs(f128, -1.0, 10.0);
2913 try testArgs(f128, -1.0, fmax(f128));
2914 try testArgs(f128, -1.0, inf(f128));
2915 try testArgs(f128, -1.0, nan(f128));
2916
2917 try testArgs(f128, -0.1, -nan(f128));
2918 try testArgs(f128, -0.1, -inf(f128));
2919 try testArgs(f128, -0.1, -fmax(f128));
2920 try testArgs(f128, -0.1, -10.0);
2921 try testArgs(f128, -0.1, -1.0);
2922 try testArgs(f128, -0.1, -0.1);
2923 try testArgs(f128, -0.1, -fmin(f128));
2924 try testArgs(f128, -0.1, -tmin(f128));
2925 try testArgs(f128, -0.1, -0.0);
2926 try testArgs(f128, -0.1, 0.0);
2927 try testArgs(f128, -0.1, tmin(f128));
2928 try testArgs(f128, -0.1, fmin(f128));
2929 try testArgs(f128, -0.1, 0.1);
2930 try testArgs(f128, -0.1, 1.0);
2931 try testArgs(f128, -0.1, 10.0);
2932 try testArgs(f128, -0.1, fmax(f128));
2933 try testArgs(f128, -0.1, inf(f128));
2934 try testArgs(f128, -0.1, nan(f128));
2935
2936 try testArgs(f128, -fmin(f128), -nan(f128));
2937 try testArgs(f128, -fmin(f128), -inf(f128));
2938 try testArgs(f128, -fmin(f128), -fmax(f128));
2939 try testArgs(f128, -fmin(f128), -10.0);
2940 try testArgs(f128, -fmin(f128), -1.0);
2941 try testArgs(f128, -fmin(f128), -0.1);
2942 try testArgs(f128, -fmin(f128), -fmin(f128));
2943 try testArgs(f128, -fmin(f128), -tmin(f128));
2944 try testArgs(f128, -fmin(f128), -0.0);
2945 try testArgs(f128, -fmin(f128), 0.0);
2946 try testArgs(f128, -fmin(f128), tmin(f128));
2947 try testArgs(f128, -fmin(f128), fmin(f128));
2948 try testArgs(f128, -fmin(f128), 0.1);
2949 try testArgs(f128, -fmin(f128), 1.0);
2950 try testArgs(f128, -fmin(f128), 10.0);
2951 try testArgs(f128, -fmin(f128), fmax(f128));
2952 try testArgs(f128, -fmin(f128), inf(f128));
2953 try testArgs(f128, -fmin(f128), nan(f128));
2954
2955 try testArgs(f128, -tmin(f128), -nan(f128));
2956 try testArgs(f128, -tmin(f128), -inf(f128));
2957 try testArgs(f128, -tmin(f128), -fmax(f128));
2958 try testArgs(f128, -tmin(f128), -10.0);
2959 try testArgs(f128, -tmin(f128), -1.0);
2960 try testArgs(f128, -tmin(f128), -0.1);
2961 try testArgs(f128, -tmin(f128), -fmin(f128));
2962 try testArgs(f128, -tmin(f128), -tmin(f128));
2963 try testArgs(f128, -tmin(f128), -0.0);
2964 try testArgs(f128, -tmin(f128), 0.0);
2965 try testArgs(f128, -tmin(f128), tmin(f128));
2966 try testArgs(f128, -tmin(f128), fmin(f128));
2967 try testArgs(f128, -tmin(f128), 0.1);
2968 try testArgs(f128, -tmin(f128), 1.0);
2969 try testArgs(f128, -tmin(f128), 10.0);
2970 try testArgs(f128, -tmin(f128), fmax(f128));
2971 try testArgs(f128, -tmin(f128), inf(f128));
2972 try testArgs(f128, -tmin(f128), nan(f128));
2973
2974 try testArgs(f128, -0.0, -nan(f128));
2975 try testArgs(f128, -0.0, -inf(f128));
2976 try testArgs(f128, -0.0, -fmax(f128));
2977 try testArgs(f128, -0.0, -10.0);
2978 try testArgs(f128, -0.0, -1.0);
2979 try testArgs(f128, -0.0, -0.1);
2980 try testArgs(f128, -0.0, -fmin(f128));
2981 try testArgs(f128, -0.0, -tmin(f128));
2982 try testArgs(f128, -0.0, -0.0);
2983 try testArgs(f128, -0.0, 0.0);
2984 try testArgs(f128, -0.0, tmin(f128));
2985 try testArgs(f128, -0.0, fmin(f128));
2986 try testArgs(f128, -0.0, 0.1);
2987 try testArgs(f128, -0.0, 1.0);
2988 try testArgs(f128, -0.0, 10.0);
2989 try testArgs(f128, -0.0, fmax(f128));
2990 try testArgs(f128, -0.0, inf(f128));
2991 try testArgs(f128, -0.0, nan(f128));
2992
2993 try testArgs(f128, 0.0, -nan(f128));
2994 try testArgs(f128, 0.0, -inf(f128));
2995 try testArgs(f128, 0.0, -fmax(f128));
2996 try testArgs(f128, 0.0, -10.0);
2997 try testArgs(f128, 0.0, -1.0);
2998 try testArgs(f128, 0.0, -0.1);
2999 try testArgs(f128, 0.0, -fmin(f128));
3000 try testArgs(f128, 0.0, -tmin(f128));
3001 try testArgs(f128, 0.0, -0.0);
3002 try testArgs(f128, 0.0, 0.0);
3003 try testArgs(f128, 0.0, tmin(f128));
3004 try testArgs(f128, 0.0, fmin(f128));
3005 try testArgs(f128, 0.0, 0.1);
3006 try testArgs(f128, 0.0, 1.0);
3007 try testArgs(f128, 0.0, 10.0);
3008 try testArgs(f128, 0.0, fmax(f128));
3009 try testArgs(f128, 0.0, inf(f128));
3010 try testArgs(f128, 0.0, nan(f128));
3011
3012 try testArgs(f128, tmin(f128), -nan(f128));
3013 try testArgs(f128, tmin(f128), -inf(f128));
3014 try testArgs(f128, tmin(f128), -fmax(f128));
3015 try testArgs(f128, tmin(f128), -10.0);
3016 try testArgs(f128, tmin(f128), -1.0);
3017 try testArgs(f128, tmin(f128), -0.1);
3018 try testArgs(f128, tmin(f128), -fmin(f128));
3019 try testArgs(f128, tmin(f128), -tmin(f128));
3020 try testArgs(f128, tmin(f128), -0.0);
3021 try testArgs(f128, tmin(f128), 0.0);
3022 try testArgs(f128, tmin(f128), tmin(f128));
3023 try testArgs(f128, tmin(f128), fmin(f128));
3024 try testArgs(f128, tmin(f128), 0.1);
3025 try testArgs(f128, tmin(f128), 1.0);
3026 try testArgs(f128, tmin(f128), 10.0);
3027 try testArgs(f128, tmin(f128), fmax(f128));
3028 try testArgs(f128, tmin(f128), inf(f128));
3029 try testArgs(f128, tmin(f128), nan(f128));
3030
3031 try testArgs(f128, fmin(f128), -nan(f128));
3032 try testArgs(f128, fmin(f128), -inf(f128));
3033 try testArgs(f128, fmin(f128), -fmax(f128));
3034 try testArgs(f128, fmin(f128), -10.0);
3035 try testArgs(f128, fmin(f128), -1.0);
3036 try testArgs(f128, fmin(f128), -0.1);
3037 try testArgs(f128, fmin(f128), -fmin(f128));
3038 try testArgs(f128, fmin(f128), -tmin(f128));
3039 try testArgs(f128, fmin(f128), -0.0);
3040 try testArgs(f128, fmin(f128), 0.0);
3041 try testArgs(f128, fmin(f128), tmin(f128));
3042 try testArgs(f128, fmin(f128), fmin(f128));
3043 try testArgs(f128, fmin(f128), 0.1);
3044 try testArgs(f128, fmin(f128), 1.0);
3045 try testArgs(f128, fmin(f128), 10.0);
3046 try testArgs(f128, fmin(f128), fmax(f128));
3047 try testArgs(f128, fmin(f128), inf(f128));
3048 try testArgs(f128, fmin(f128), nan(f128));
3049
3050 try testArgs(f128, 0.1, -nan(f128));
3051 try testArgs(f128, 0.1, -inf(f128));
3052 try testArgs(f128, 0.1, -fmax(f128));
3053 try testArgs(f128, 0.1, -10.0);
3054 try testArgs(f128, 0.1, -1.0);
3055 try testArgs(f128, 0.1, -0.1);
3056 try testArgs(f128, 0.1, -fmin(f128));
3057 try testArgs(f128, 0.1, -tmin(f128));
3058 try testArgs(f128, 0.1, -0.0);
3059 try testArgs(f128, 0.1, 0.0);
3060 try testArgs(f128, 0.1, tmin(f128));
3061 try testArgs(f128, 0.1, fmin(f128));
3062 try testArgs(f128, 0.1, 0.1);
3063 try testArgs(f128, 0.1, 1.0);
3064 try testArgs(f128, 0.1, 10.0);
3065 try testArgs(f128, 0.1, fmax(f128));
3066 try testArgs(f128, 0.1, inf(f128));
3067 try testArgs(f128, 0.1, nan(f128));
3068
3069 try testArgs(f128, 1.0, -nan(f128));
3070 try testArgs(f128, 1.0, -inf(f128));
3071 try testArgs(f128, 1.0, -fmax(f128));
3072 try testArgs(f128, 1.0, -10.0);
3073 try testArgs(f128, 1.0, -1.0);
3074 try testArgs(f128, 1.0, -0.1);
3075 try testArgs(f128, 1.0, -fmin(f128));
3076 try testArgs(f128, 1.0, -tmin(f128));
3077 try testArgs(f128, 1.0, -0.0);
3078 try testArgs(f128, 1.0, 0.0);
3079 try testArgs(f128, 1.0, tmin(f128));
3080 try testArgs(f128, 1.0, fmin(f128));
3081 try testArgs(f128, 1.0, 0.1);
3082 try testArgs(f128, 1.0, 1.0);
3083 try testArgs(f128, 1.0, 10.0);
3084 try testArgs(f128, 1.0, fmax(f128));
3085 try testArgs(f128, 1.0, inf(f128));
3086 try testArgs(f128, 1.0, nan(f128));
3087
3088 try testArgs(f128, 10.0, -nan(f128));
3089 try testArgs(f128, 10.0, -inf(f128));
3090 try testArgs(f128, 10.0, -fmax(f128));
3091 try testArgs(f128, 10.0, -10.0);
3092 try testArgs(f128, 10.0, -1.0);
3093 try testArgs(f128, 10.0, -0.1);
3094 try testArgs(f128, 10.0, -fmin(f128));
3095 try testArgs(f128, 10.0, -tmin(f128));
3096 try testArgs(f128, 10.0, -0.0);
3097 try testArgs(f128, 10.0, 0.0);
3098 try testArgs(f128, 10.0, tmin(f128));
3099 try testArgs(f128, 10.0, fmin(f128));
3100 try testArgs(f128, 10.0, 0.1);
3101 try testArgs(f128, 10.0, 1.0);
3102 try testArgs(f128, 10.0, 10.0);
3103 try testArgs(f128, 10.0, fmax(f128));
3104 try testArgs(f128, 10.0, inf(f128));
3105 try testArgs(f128, 10.0, nan(f128));
3106
3107 try testArgs(f128, fmax(f128), -nan(f128));
3108 try testArgs(f128, fmax(f128), -inf(f128));
3109 try testArgs(f128, fmax(f128), -fmax(f128));
3110 try testArgs(f128, fmax(f128), -10.0);
3111 try testArgs(f128, fmax(f128), -1.0);
3112 try testArgs(f128, fmax(f128), -0.1);
3113 try testArgs(f128, fmax(f128), -fmin(f128));
3114 try testArgs(f128, fmax(f128), -tmin(f128));
3115 try testArgs(f128, fmax(f128), -0.0);
3116 try testArgs(f128, fmax(f128), 0.0);
3117 try testArgs(f128, fmax(f128), tmin(f128));
3118 try testArgs(f128, fmax(f128), fmin(f128));
3119 try testArgs(f128, fmax(f128), 0.1);
3120 try testArgs(f128, fmax(f128), 1.0);
3121 try testArgs(f128, fmax(f128), 10.0);
3122 try testArgs(f128, fmax(f128), fmax(f128));
3123 try testArgs(f128, fmax(f128), inf(f128));
3124 try testArgs(f128, fmax(f128), nan(f128));
3125
3126 try testArgs(f128, inf(f128), -nan(f128));
3127 try testArgs(f128, inf(f128), -inf(f128));
3128 try testArgs(f128, inf(f128), -fmax(f128));
3129 try testArgs(f128, inf(f128), -10.0);
3130 try testArgs(f128, inf(f128), -1.0);
3131 try testArgs(f128, inf(f128), -0.1);
3132 try testArgs(f128, inf(f128), -fmin(f128));
3133 try testArgs(f128, inf(f128), -tmin(f128));
3134 try testArgs(f128, inf(f128), -0.0);
3135 try testArgs(f128, inf(f128), 0.0);
3136 try testArgs(f128, inf(f128), tmin(f128));
3137 try testArgs(f128, inf(f128), fmin(f128));
3138 try testArgs(f128, inf(f128), 0.1);
3139 try testArgs(f128, inf(f128), 1.0);
3140 try testArgs(f128, inf(f128), 10.0);
3141 try testArgs(f128, inf(f128), fmax(f128));
3142 try testArgs(f128, inf(f128), inf(f128));
3143 try testArgs(f128, inf(f128), nan(f128));
3144
3145 try testArgs(f128, nan(f128), -nan(f128));
3146 try testArgs(f128, nan(f128), -inf(f128));
3147 try testArgs(f128, nan(f128), -fmax(f128));
3148 try testArgs(f128, nan(f128), -10.0);
3149 try testArgs(f128, nan(f128), -1.0);
3150 try testArgs(f128, nan(f128), -0.1);
3151 try testArgs(f128, nan(f128), -fmin(f128));
3152 try testArgs(f128, nan(f128), -tmin(f128));
3153 try testArgs(f128, nan(f128), -0.0);
3154 try testArgs(f128, nan(f128), 0.0);
3155 try testArgs(f128, nan(f128), tmin(f128));
3156 try testArgs(f128, nan(f128), fmin(f128));
3157 try testArgs(f128, nan(f128), 0.1);
3158 try testArgs(f128, nan(f128), 1.0);
3159 try testArgs(f128, nan(f128), 10.0);
3160 try testArgs(f128, nan(f128), fmax(f128));
3161 try testArgs(f128, nan(f128), inf(f128));
3162 try testArgs(f128, nan(f128), nan(f128));
3163 }
14453164 fn testIntVectorTypes() !void {
14463165 try testArgs(@Vector(1, i8), .{
14473166 -0x54,
......@@ -2069,64 +3788,74 @@ inline fn bitNot(comptime Type: type, rhs: Type) @TypeOf(~rhs) {
20693788 return ~rhs;
20703789}
20713790test bitNot {
2072 try Unary(bitNot).testIntTypes();
2073 try Unary(bitNot).testIntVectorTypes();
3791 const t = unary(bitNot, .{});
3792 try t.testIntTypes();
3793 try t.testIntVectorTypes();
20743794}
20753795
20763796inline fn abs(comptime Type: type, rhs: Type) @TypeOf(@abs(rhs)) {
20773797 return @abs(rhs);
20783798}
20793799test abs {
2080 try Unary(abs).testIntTypes();
2081 try Unary(abs).testIntVectorTypes();
2082 try Unary(abs).testFloatTypes();
2083 try Unary(abs).testFloatVectorTypes();
3800 const t = unary(abs, .{ .strict = true });
3801 try t.testIntTypes();
3802 try t.testIntVectorTypes();
3803 try t.testFloatTypes();
3804 try t.testFloatVectorTypes();
20843805}
20853806
20863807inline fn clz(comptime Type: type, rhs: Type) @TypeOf(@clz(rhs)) {
20873808 return @clz(rhs);
20883809}
20893810test clz {
2090 try Unary(clz).testIntTypes();
2091 try Unary(clz).testIntVectorTypes();
3811 const t = unary(clz, .{});
3812 try t.testIntTypes();
3813 try t.testIntVectorTypes();
20923814}
20933815
20943816inline fn bitAnd(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs & rhs) {
20953817 return lhs & rhs;
20963818}
20973819test bitAnd {
2098 try Binary(bitAnd).testIntTypes();
2099 try Binary(bitAnd).testIntVectorTypes();
3820 const t = binary(bitAnd, .{});
3821 try t.testIntTypes();
3822 try t.testIntVectorTypes();
21003823}
21013824
21023825inline fn bitOr(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs | rhs) {
21033826 return lhs | rhs;
21043827}
21053828test bitOr {
2106 try Binary(bitOr).testIntTypes();
2107 try Binary(bitOr).testIntVectorTypes();
3829 const t = binary(bitOr, .{});
3830 try t.testIntTypes();
3831 try t.testIntVectorTypes();
21083832}
21093833
21103834inline fn bitXor(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs ^ rhs) {
21113835 return lhs ^ rhs;
21123836}
21133837test bitXor {
2114 try Binary(bitXor).testIntTypes();
2115 try Binary(bitXor).testIntVectorTypes();
3838 const t = binary(bitXor, .{});
3839 try t.testIntTypes();
3840 try t.testIntVectorTypes();
21163841}
21173842
21183843inline fn min(comptime Type: type, lhs: Type, rhs: Type) Type {
21193844 return @min(lhs, rhs);
21203845}
21213846test min {
2122 try Binary(min).testIntTypes();
2123 try Binary(min).testIntVectorTypes();
3847 const t = binary(min, .{});
3848 try t.testIntTypes();
3849 try t.testIntVectorTypes();
3850 try t.testFloatTypes();
21243851}
21253852
21263853inline fn max(comptime Type: type, lhs: Type, rhs: Type) Type {
21273854 return @max(lhs, rhs);
21283855}
21293856test max {
2130 try Binary(max).testIntTypes();
2131 try Binary(max).testIntVectorTypes();
3857 const t = binary(max, .{});
3858 try t.testIntTypes();
3859 try t.testIntVectorTypes();
3860 try t.testFloatTypes();
21323861}