authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-27 22:23:51-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-28 15:10:22-04:00
log114a4eaf5c7f1a65943f3b1d41a55fd84c281efc
treedc62c17c0be0ca9caab039313ef6932f869c0281
parent8bacf3e75703b312c345a79e9bd995d186d63b7d

x86_64: implement optimized float `@reduce(.Min)`


3 files changed, 1953 insertions(+), 250 deletions(-)

src/arch/x86_64/CodeGen.zig+1940-246
...@@ -2389,7 +2389,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -2389,7 +2389,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2389}2389}
23902390
2391fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {2391fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2392 @setEvalBranchQuota(26_500);2392 @setEvalBranchQuota(26_800);
2393 const pt = cg.pt;2393 const pt = cg.pt;
2394 const zcu = pt.zcu;2394 const zcu = pt.zcu;
2395 const ip = &zcu.intern_pool;2395 const ip = &zcu.intern_pool;
...@@ -142846,14 +142846,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -142846,14 +142846,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
142846 }, .{142846 }, .{
142847 .required_features = .{ .x87, null, null, null },142847 .required_features = .{ .x87, null, null, null },
142848 .dst_constraints = .{ .{ .float = .tbyte }, .any },142848 .dst_constraints = .{ .{ .float = .tbyte }, .any },
142849 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .tbyte } }, .any, .any },142849 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
142850 .patterns = &.{142850 .patterns = &.{
142851 .{ .src = .{ .to_mem, .none, .none } },142851 .{ .src = .{ .to_mem, .none, .none } },
142852 },142852 },
142853 .extra_temps = .{142853 .extra_temps = .{
142854 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },142854 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
142855 .{ .type = .f80, .kind = .{ .reg = .st6 } },
142856 .{ .type = .f80, .kind = .{ .reg = .st7 } },142855 .{ .type = .f80, .kind = .{ .reg = .st7 } },
142856 .{ .type = .f80, .kind = .{ .reg = .st6 } },
142857 .unused,142857 .unused,
142858 .unused,142858 .unused,
142859 .unused,142859 .unused,
...@@ -142863,7 +142863,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -142863,7 +142863,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
142863 .unused,142863 .unused,
142864 .unused,142864 .unused,
142865 },142865 },
142866 .dst_temps = .{ .mem, .unused },142866 .dst_temps = .{ .{ .rc = .x87 }, .unused },
142867 .clobbers = .{ .eflags = true },142867 .clobbers = .{ .eflags = true },
142868 .each = .{ .once = &.{142868 .each = .{ .once = &.{
142869 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },142869 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
...@@ -146385,14 +146385,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146385,14 +146385,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146385 }, .{146385 }, .{
146386 .required_features = .{ .x87, null, null, null },146386 .required_features = .{ .x87, null, null, null },
146387 .dst_constraints = .{ .{ .float = .tbyte }, .any },146387 .dst_constraints = .{ .{ .float = .tbyte }, .any },
146388 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .tbyte } }, .any, .any },146388 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
146389 .patterns = &.{146389 .patterns = &.{
146390 .{ .src = .{ .to_mem, .none, .none } },146390 .{ .src = .{ .to_mem, .none, .none } },
146391 },146391 },
146392 .extra_temps = .{146392 .extra_temps = .{
146393 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },146393 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
146394 .{ .type = .f80, .kind = .{ .reg = .st6 } },
146395 .{ .type = .f80, .kind = .{ .reg = .st7 } },146394 .{ .type = .f80, .kind = .{ .reg = .st7 } },
146395 .{ .type = .f80, .kind = .{ .reg = .st6 } },
146396 .unused,146396 .unused,
146397 .unused,146397 .unused,
146398 .unused,146398 .unused,
...@@ -146402,7 +146402,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146402,7 +146402,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146402 .unused,146402 .unused,
146403 .unused,146403 .unused,
146404 },146404 },
146405 .dst_temps = .{ .mem, .unused },146405 .dst_temps = .{ .{ .rc = .x87 }, .unused },
146406 .clobbers = .{ .eflags = true },146406 .clobbers = .{ .eflags = true },
146407 .each = .{ .once = &.{146407 .each = .{ .once = &.{
146408 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },146408 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
...@@ -146531,32 +146531,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146531,32 +146531,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146531 try res[0].finish(inst, &.{reduce.operand}, &ops, cg);146531 try res[0].finish(inst, &.{reduce.operand}, &ops, cg);
146532 },146532 },
146533 .reduce_optimized => |air_tag| if (use_old) try cg.airReduce(inst) else fallback: {146533 .reduce_optimized => |air_tag| if (use_old) try cg.airReduce(inst) else fallback: {
146534 const inf = std.math.inf(f16);
146534 const reduce = air_datas[@intFromEnum(inst)].reduce;146535 const reduce = air_datas[@intFromEnum(inst)].reduce;
146535 switch (reduce.operation) {146536 switch (reduce.operation) {
146536 .And, .Or, .Xor => unreachable,146537 .And, .Or, .Xor => unreachable,
146537 .Min, .Max => break :fallback try cg.airReduce(inst),146538 .Min => {},
146539 .Max => break :fallback try cg.airReduce(inst),
146538 .Add, .Mul => {},146540 .Add, .Mul => {},
146539 }146541 }
146540 var ops = try cg.tempsFromOperands(inst, .{reduce.operand});146542 var ops = try cg.tempsFromOperands(inst, .{reduce.operand});
146541 var res: [1]Temp = undefined;146543 var res: [1]Temp = undefined;
146542 cg.select(&res, &.{cg.typeOfIndex(inst)}, &ops, switch (reduce.operation) {146544 cg.select(&res, &.{cg.typeOfIndex(inst)}, &ops, switch (reduce.operation) {
146543 .And, .Or, .Xor => unreachable,146545 .And, .Or, .Xor => unreachable,
146544 .Min, .Max => unreachable,146546 .Min => comptime &.{ .{
146545 .Add => comptime &.{ .{
146546 .required_features = .{ .f16c, .fast_hops, null, null },
146547 .dst_constraints = .{ .{ .float = .word }, .any },
146548 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },
146549 .patterns = &.{
146550 .{ .src = .{ .mem, .none, .none } },
146551 .{ .src = .{ .to_sse, .none, .none } },
146552 },
146553 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146554 .each = .{ .once = &.{
146555 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
146556 .{ ._, .vh_ps, .add, .dst0x, .dst0x, .dst0x, ._ },
146557 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146558 } },
146559 }, .{
146560 .required_features = .{ .f16c, null, null, null },146547 .required_features = .{ .f16c, null, null, null },
146561 .dst_constraints = .{ .{ .float = .word }, .any },146548 .dst_constraints = .{ .{ .float = .word }, .any },
146562 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },146549 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },
...@@ -146581,36 +146568,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146581,36 +146568,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146581 .each = .{ .once = &.{146568 .each = .{ .once = &.{
146582 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },146569 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
146583 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },146570 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
146584 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },146571 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp0x, ._ },
146585 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146586 } },
146587 }, .{
146588 .required_features = .{ .f16c, .fast_hops, null, null },
146589 .dst_constraints = .{ .{ .float = .word }, .any },
146590 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
146591 .patterns = &.{
146592 .{ .src = .{ .mem, .none, .none } },
146593 .{ .src = .{ .to_sse, .none, .none } },
146594 },
146595 .extra_temps = .{
146596 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
146597 .unused,
146598 .unused,
146599 .unused,
146600 .unused,
146601 .unused,
146602 .unused,
146603 .unused,
146604 .unused,
146605 .unused,
146606 .unused,
146607 },
146608 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146609 .each = .{ .once = &.{
146610 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
146611 .{ ._, .vh_ps, .add, .tmp0x, .dst0x, .dst0x, ._ },
146612 .{ ._, .v_ps, .shuf, .dst0x, .dst0x, .dst0x, .ui(0b11_10) },
146613 .{ ._, .v_ss, .add, .dst0x, .tmp0x, .dst0x, ._ },
146614 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },146572 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146615 } },146573 } },
146616 }, .{146574 }, .{
...@@ -146638,24 +146596,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146638,24 +146596,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146638 .each = .{ .once = &.{146596 .each = .{ .once = &.{
146639 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },146597 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
146640 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },146598 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
146641 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },146599 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp0x, ._ },
146642 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },146600 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
146643 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },146601 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp0x, ._ },
146644 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146645 } },
146646 }, .{
146647 .required_features = .{ .f16c, .fast_hops, null, null },
146648 .dst_constraints = .{ .{ .float = .word }, .any },
146649 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
146650 .patterns = &.{
146651 .{ .src = .{ .mem, .none, .none } },
146652 .{ .src = .{ .to_sse, .none, .none } },
146653 },
146654 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146655 .each = .{ .once = &.{
146656 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
146657 .{ ._, .vh_ps, .add, .dst0x, .dst0x, .dst0x, ._ },
146658 .{ ._, .vh_ps, .add, .dst0x, .dst0x, .dst0x, ._ },
146659 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },146602 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146660 } },146603 } },
146661 }, .{146604 }, .{
...@@ -146683,40 +146626,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146683,40 +146626,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146683 .each = .{ .once = &.{146626 .each = .{ .once = &.{
146684 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },146627 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
146685 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },146628 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
146686 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },146629 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp0x, ._ },
146687 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },146630 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
146688 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },146631 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp0x, ._ },
146689 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146690 } },
146691 }, .{
146692 .required_features = .{ .f16c, .fast_hops, null, null },
146693 .dst_constraints = .{ .{ .float = .word }, .any },
146694 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
146695 .patterns = &.{
146696 .{ .src = .{ .to_sse, .none, .none } },
146697 },
146698 .extra_temps = .{
146699 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
146700 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
146701 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146702 .unused,
146703 .unused,
146704 .unused,
146705 .unused,
146706 .unused,
146707 .unused,
146708 .unused,
146709 .unused,
146710 },
146711 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146712 .each = .{ .once = &.{
146713 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
146714 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
146715 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
146716 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
146717 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
146718 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
146719 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },
146720 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },146632 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146721 } },146633 } },
146722 }, .{146634 }, .{
...@@ -146729,6 +146641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146729,6 +146641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146729 .extra_temps = .{146641 .extra_temps = .{
146730 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },146642 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
146731 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },146643 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
146644 .{ .type = .vector_8_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
146732 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },146645 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146733 .unused,146646 .unused,
146734 .unused,146647 .unused,
...@@ -146737,49 +146650,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146737,49 +146650,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146737 .unused,146650 .unused,
146738 .unused,146651 .unused,
146739 .unused,146652 .unused,
146740 .unused,
146741 },146653 },
146742 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },146654 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146743 .each = .{ .once = &.{146655 .each = .{ .once = &.{
146744 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },146656 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
146745 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },146657 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
146658 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
146659 .{ ._, .v_ps, .@"or", .dst0x, .src0x, .lea(.tmp0x), ._ },
146746 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },146660 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
146747 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },146661 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
146748 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },146662 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146749 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b11_10) },146663 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
146750 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },146664 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146751 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b01) },146665 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
146752 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },146666 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
146753 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146754 } },
146755 }, .{
146756 .required_features = .{ .f16c, .fast_hops, null, null },
146757 .dst_constraints = .{ .{ .float = .word }, .any },
146758 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
146759 .patterns = &.{
146760 .{ .src = .{ .mem, .none, .none } },
146761 .{ .src = .{ .to_sse, .none, .none } },
146762 },
146763 .extra_temps = .{
146764 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146765 .unused,
146766 .unused,
146767 .unused,
146768 .unused,
146769 .unused,
146770 .unused,
146771 .unused,
146772 .unused,
146773 .unused,
146774 .unused,
146775 },
146776 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146777 .each = .{ .once = &.{
146778 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
146779 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
146780 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
146781 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
146782 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
146783 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },146667 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146784 } },146668 } },
146785 }, .{146669 }, .{
...@@ -146807,45 +146691,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146807,45 +146691,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146807 .each = .{ .once = &.{146691 .each = .{ .once = &.{
146808 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },146692 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
146809 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },146693 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
146810 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },146694 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp0x, ._ },
146811 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },146695 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
146812 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },146696 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp0x, ._ },
146813 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },146697 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
146814 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },146698 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp0x, ._ },
146815 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146816 } },
146817 }, .{
146818 .required_features = .{ .f16c, .fast_hops, null, null },
146819 .dst_constraints = .{ .{ .float = .word }, .any },
146820 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
146821 .patterns = &.{
146822 .{ .src = .{ .to_sse, .none, .none } },
146823 },
146824 .extra_temps = .{
146825 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
146826 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
146827 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146828 .unused,
146829 .unused,
146830 .unused,
146831 .unused,
146832 .unused,
146833 .unused,
146834 .unused,
146835 .unused,
146836 },
146837 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146838 .each = .{ .once = &.{
146839 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
146840 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
146841 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
146842 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
146843 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },
146844 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp2y, ._ },
146845 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
146846 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
146847 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
146848 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },
146849 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },146699 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146850 } },146700 } },
146851 }, .{146701 }, .{
...@@ -146858,6 +146708,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146858,6 +146708,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146858 .extra_temps = .{146708 .extra_temps = .{
146859 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },146709 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
146860 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },146710 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
146711 .{ .type = .vector_16_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
146861 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },146712 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146862 .unused,146713 .unused,
146863 .unused,146714 .unused,
...@@ -146866,54 +146717,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146866,54 +146717,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146866 .unused,146717 .unused,
146867 .unused,146718 .unused,
146868 .unused,146719 .unused,
146869 .unused,
146870 },146720 },
146871 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },146721 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146872 .each = .{ .once = &.{146722 .each = .{ .once = &.{
146873 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },146723 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
146874 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },146724 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
146875 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },146725 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
146726 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
146727 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
146876 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },146728 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
146877 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },146729 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
146878 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp2y, ._ },146730 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp3y, ._ },
146879 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },146731 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
146880 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },146732 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146881 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b11_10) },146733 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
146882 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },146734 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146883 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b01) },146735 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
146884 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },146736 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
146885 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146886 } },
146887 }, .{
146888 .required_features = .{ .f16c, .fast_hops, null, null },
146889 .dst_constraints = .{ .{ .float = .word }, .any },
146890 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
146891 .patterns = &.{
146892 .{ .src = .{ .to_sse, .none, .none } },
146893 },
146894 .extra_temps = .{
146895 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146896 .unused,
146897 .unused,
146898 .unused,
146899 .unused,
146900 .unused,
146901 .unused,
146902 .unused,
146903 .unused,
146904 .unused,
146905 .unused,
146906 },
146907 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
146908 .each = .{ .once = &.{
146909 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
146910 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
146911 .{ ._, .v_ps, .cvtph2, .tmp0y, .tmp0x, ._, ._ },
146912 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp0y, ._ },
146913 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
146914 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
146915 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
146916 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
146917 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },146737 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146918 } },146738 } },
146919 }, .{146739 }, .{
...@@ -146941,13 +146761,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146941,13 +146761,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146941 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },146761 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
146942 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },146762 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
146943 .{ ._, .v_ps, .cvtph2, .tmp0y, .tmp0x, ._, ._ },146763 .{ ._, .v_ps, .cvtph2, .tmp0y, .tmp0x, ._, ._ },
146944 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp0y, ._ },146764 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp0y, ._ },
146945 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },146765 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
146946 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },146766 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp0x, ._ },
146947 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },146767 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
146948 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },146768 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp0x, ._ },
146949 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },146769 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
146950 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },146770 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp0x, ._ },
146951 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },146771 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146952 } },146772 } },
146953 }, .{146773 }, .{
...@@ -146960,6 +146780,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146960,6 +146780,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146960 .extra_temps = .{146780 .extra_temps = .{
146961 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },146781 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
146962 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },146782 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
146783 .{ .type = .vector_32_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
146963 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },146784 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146964 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },146785 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146965 .unused,146786 .unused,
...@@ -146968,30 +146789,1903 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -146968,30 +146789,1903 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
146968 .unused,146789 .unused,
146969 .unused,146790 .unused,
146970 .unused,146791 .unused,
146971 .unused,
146972 },146792 },
146973 .dst_temps = .{ .{ .rc = .sse }, .unused },146793 .dst_temps = .{ .{ .rc = .sse }, .unused },
146974 .each = .{ .once = &.{146794 .each = .{ .once = &.{
146975 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },146795 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
146976 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },146796 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
146977 .{ ._, .v_ps, .mova, .tmp2y, .lead(.tmp0y, 32), ._, ._ },146797 .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
146978 .{ ._, .v_ps, .@"and", .tmp2y, .tmp2y, .memd(.src0y, 32), ._ },146798 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
146799 .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
146979 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },146800 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
146980 .{ ._, .v_f128, .extract, .tmp3x, .tmp2y, .ui(1), ._ },146801 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
146981 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },146802 .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
146803 .{ ._, .v_f128, .extract, .tmp4x, .tmp3y, .ui(1), ._ },
146982 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },146804 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
146983 .{ ._, .v_ps, .add, .tmp2y, .tmp2y, .tmp3y, ._ },146805 .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
146984 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },146806 .{ ._, .v_ps, .min, .tmp3y, .tmp3y, .tmp4y, ._ },
146807 .{ ._, .v_f128, .extract, .tmp4x, .dst0y, .ui(1), ._ },
146985 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },146808 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
146986 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },146809 .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
146987 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp3y, ._ },146810 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp4y, ._ },
146988 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp2y, ._ },146811 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp3y, ._ },
146989 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },146812 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
146990 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },146813 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146991 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b11_10) },146814 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
146992 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },146815 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146993 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b01) },146816 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
146994 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },146817 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
146818 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146819 } },
146820 }, .{
146821 .required_features = .{ .avx512f, null, null, null },
146822 .dst_constraints = .{ .{ .float = .word }, .any },
146823 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .word } }, .any, .any },
146824 .patterns = &.{
146825 .{ .src = .{ .to_mem, .none, .none } },
146826 },
146827 .extra_temps = .{
146828 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
146829 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146830 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146831 .unused,
146832 .unused,
146833 .unused,
146834 .unused,
146835 .unused,
146836 .unused,
146837 .unused,
146838 .unused,
146839 },
146840 .dst_temps = .{ .{ .rc = .sse }, .unused },
146841 .each = .{ .once = &.{
146842 .{ ._, .v_ps, .mova, .tmp1y, .memd(.src0y, 32), ._, ._ },
146843 .{ ._, .v_ps, .mova, .dst0y, .mem(.src0y), ._, ._ },
146844 .{ ._, .v_f128, .extract, .tmp2x, .tmp1y, .ui(1), ._ },
146845 .{ ._, .v_ps, .cvtph2, .tmp1y, .tmp1x, ._, ._ },
146846 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },
146847 .{ ._, .v_ps, .min, .tmp1y, .tmp1y, .tmp2y, ._ },
146848 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
146849 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
146850 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },
146851 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp2y, ._ },
146852 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp1y, ._ },
146853 .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
146854 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp1x, ._ },
146855 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b11_10) },
146856 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp1x, ._ },
146857 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
146858 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp1x, ._ },
146859 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146860 } },
146861 }, .{
146862 .required_features = .{ .f16c, null, null, null },
146863 .dst_constraints = .{ .{ .float = .word }, .any },
146864 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
146865 .patterns = &.{
146866 .{ .src = .{ .to_mem, .none, .none } },
146867 },
146868 .extra_temps = .{
146869 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
146870 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146871 .unused,
146872 .unused,
146873 .unused,
146874 .unused,
146875 .unused,
146876 .unused,
146877 .unused,
146878 .unused,
146879 .unused,
146880 },
146881 .dst_temps = .{ .{ .rc = .sse }, .unused },
146882 .clobbers = .{ .eflags = true },
146883 .each = .{ .once = &.{
146884 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
146885 .{ ._, .v_ps, .cvtph2, .dst0y, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
146886 .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
146887 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp1y, ._ },
146888 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
146889 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
146890 .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
146891 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp1x, ._ },
146892 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b11_10) },
146893 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp1x, ._ },
146894 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
146895 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp1x, ._ },
146896 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146897 } },
146898 }, .{
146899 .required_features = .{ .avx512f, null, null, null },
146900 .dst_constraints = .{ .{ .float = .word }, .any },
146901 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .zword, .is = .word } }, .any, .any },
146902 .patterns = &.{
146903 .{ .src = .{ .to_mem, .none, .none } },
146904 },
146905 .extra_temps = .{
146906 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
146907 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
146908 .{ .type = .vector_32_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
146909 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146910 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146911 .unused,
146912 .unused,
146913 .unused,
146914 .unused,
146915 .unused,
146916 .unused,
146917 },
146918 .dst_temps = .{ .{ .rc = .sse }, .unused },
146919 .clobbers = .{ .eflags = true },
146920 .each = .{ .once = &.{
146921 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
146922 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
146923 .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
146924 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
146925 .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
146926 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
146927 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
146928 .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
146929 .{ ._, ._, .mov, .tmp0d, .sia(-80, .src0, .add_size), ._, ._ },
146930 .{ ._, .v_f128, .extract, .tmp4x, .tmp3y, .ui(1), ._ },
146931 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
146932 .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
146933 .{ ._, .v_ps, .min, .tmp3y, .tmp3y, .tmp4y, ._ },
146934 .{ ._, .v_f128, .extract, .tmp4x, .dst0y, .ui(1), ._ },
146935 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
146936 .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
146937 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp4y, ._ },
146938 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp3y, ._ },
146939 .{ .@"0:", .v_ps, .cvtph2, .tmp3y, .memi(.src0x, .tmp0), ._, ._ },
146940 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp3y, ._ },
146941 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
146942 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
146943 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
146944 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146945 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
146946 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146947 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
146948 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
146949 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146950 } },
146951 }, .{
146952 .required_features = .{ .f16c, null, null, null },
146953 .dst_constraints = .{ .{ .float = .word }, .any },
146954 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
146955 .patterns = &.{
146956 .{ .src = .{ .to_mem, .none, .none } },
146957 },
146958 .extra_temps = .{
146959 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
146960 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
146961 .{ .type = .vector_16_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
146962 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
146963 .unused,
146964 .unused,
146965 .unused,
146966 .unused,
146967 .unused,
146968 .unused,
146969 .unused,
146970 },
146971 .dst_temps = .{ .{ .rc = .sse }, .unused },
146972 .clobbers = .{ .eflags = true },
146973 .each = .{ .once = &.{
146974 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
146975 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
146976 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
146977 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
146978 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
146979 .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
146980 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
146981 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
146982 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
146983 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp3y, ._ },
146984 .{ .@"0:", .v_ps, .cvtph2, .tmp3y, .memi(.src0x, .tmp0), ._, ._ },
146985 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp3y, ._ },
146986 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
146987 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
146988 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
146989 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146990 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
146991 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
146992 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
146993 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
146994 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146995 } },
146996 }, .{
146997 .required_features = .{ .avx, null, null, null },
146998 .dst_constraints = .{ .{ .float = .word }, .any },
146999 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
147000 .patterns = &.{
147001 .{ .src = .{ .to_mem, .none, .none } },
147002 },
147003 .call_frame = .{ .alignment = .@"16" },
147004 .extra_temps = .{
147005 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147006 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
147007 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
147008 .unused,
147009 .unused,
147010 .unused,
147011 .unused,
147012 .unused,
147013 .unused,
147014 .unused,
147015 .unused,
147016 },
147017 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
147018 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
147019 .each = .{ .once = &.{
147020 .{ ._, .vp_, .xor, .dst0x, .dst0x, .dst0x, ._ },
147021 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
147022 .{ ._, .vp_w, .insr, .dst0x, .dst0x, .memad(.src0w, .add_unaligned_size, -2), .ui(0) },
147023 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
147024 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memi(.src0w, .tmp0), .ui(0) },
147025 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
147026 .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
147027 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147028 } },
147029 }, .{
147030 .required_features = .{ .sse2, null, null, null },
147031 .dst_constraints = .{ .{ .float = .word }, .any },
147032 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
147033 .patterns = &.{
147034 .{ .src = .{ .to_mem, .none, .none } },
147035 },
147036 .call_frame = .{ .alignment = .@"16" },
147037 .extra_temps = .{
147038 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147039 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
147040 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
147041 .unused,
147042 .unused,
147043 .unused,
147044 .unused,
147045 .unused,
147046 .unused,
147047 .unused,
147048 .unused,
147049 },
147050 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
147051 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
147052 .each = .{ .once = &.{
147053 .{ ._, .p_, .xor, .dst0x, .dst0x, ._, ._ },
147054 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
147055 .{ ._, .p_w, .insr, .dst0x, .memad(.src0w, .add_unaligned_size, -2), .ui(0), ._ },
147056 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
147057 .{ ._, .p_w, .insr, .tmp1x, .memi(.src0w, .tmp0), .ui(0), ._ },
147058 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
147059 .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
147060 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147061 } },
147062 }, .{
147063 .required_features = .{ .sse, null, null, null },
147064 .dst_constraints = .{ .{ .float = .word }, .any },
147065 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
147066 .patterns = &.{
147067 .{ .src = .{ .to_mem, .none, .none } },
147068 },
147069 .call_frame = .{ .alignment = .@"16" },
147070 .extra_temps = .{
147071 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147072 .{ .type = .f16, .kind = .{ .reg = .ax } },
147073 .{ .type = .f32, .kind = .mem },
147074 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
147075 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fminh" } } },
147076 .unused,
147077 .unused,
147078 .unused,
147079 .unused,
147080 .unused,
147081 .unused,
147082 },
147083 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
147084 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
147085 .each = .{ .once = &.{
147086 .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
147087 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
147088 .{ ._, ._, .movzx, .tmp1d, .memad(.src0w, .add_unaligned_size, -2), ._, ._ },
147089 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
147090 .{ ._, ._ss, .mov, .dst0x, .mem(.tmp2d), ._, ._ },
147091 .{ .@"0:", ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
147092 .{ ._, ._ss, .mov, .tmp3x, .memi(.src0d, .tmp0), ._, ._ },
147093 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
147094 .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
147095 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147096 } },
147097 }, .{
147098 .required_features = .{ .avx, null, null, null },
147099 .dst_constraints = .{ .{ .float = .dword }, .any },
147100 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
147101 .patterns = &.{
147102 .{ .src = .{ .to_sse, .none, .none } },
147103 },
147104 .extra_temps = .{
147105 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147106 .unused,
147107 .unused,
147108 .unused,
147109 .unused,
147110 .unused,
147111 .unused,
147112 .unused,
147113 .unused,
147114 .unused,
147115 .unused,
147116 },
147117 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
147118 .each = .{ .once = &.{
147119 .{ ._, .v_ps, .shuf, .tmp0x, .src0x, .src0x, .ui(0b01) },
147120 .{ ._, .v_ss, .min, .dst0x, .src0x, .tmp0x, ._ },
147121 } },
147122 }, .{
147123 .required_features = .{ .sse, null, null, null },
147124 .dst_constraints = .{ .{ .float = .dword }, .any },
147125 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
147126 .patterns = &.{
147127 .{ .src = .{ .to_mut_sse, .none, .none } },
147128 },
147129 .extra_temps = .{
147130 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147131 .unused,
147132 .unused,
147133 .unused,
147134 .unused,
147135 .unused,
147136 .unused,
147137 .unused,
147138 .unused,
147139 .unused,
147140 .unused,
147141 },
147142 .dst_temps = .{ .{ .ref = .src0 }, .unused },
147143 .each = .{ .once = &.{
147144 .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
147145 .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01), ._ },
147146 .{ ._, ._ss, .min, .dst0x, .tmp0x, ._, ._ },
147147 } },
147148 }, .{
147149 .required_features = .{ .avx, null, null, null },
147150 .dst_constraints = .{ .{ .float = .dword }, .any },
147151 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
147152 .patterns = &.{
147153 .{ .src = .{ .to_sse, .none, .none } },
147154 },
147155 .extra_temps = .{
147156 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147157 .unused,
147158 .unused,
147159 .unused,
147160 .unused,
147161 .unused,
147162 .unused,
147163 .unused,
147164 .unused,
147165 .unused,
147166 .unused,
147167 },
147168 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
147169 .each = .{ .once = &.{
147170 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
147171 .{ ._, .v_ss, .min, .tmp0x, .src0x, .tmp0x, ._ },
147172 .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01) },
147173 .{ ._, .v_ss, .min, .dst0x, .tmp0x, .dst0x, ._ },
147174 } },
147175 }, .{
147176 .required_features = .{ .sse, null, null, null },
147177 .dst_constraints = .{ .{ .float = .dword }, .any },
147178 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
147179 .patterns = &.{
147180 .{ .src = .{ .to_mut_sse, .none, .none } },
147181 },
147182 .extra_temps = .{
147183 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147184 .unused,
147185 .unused,
147186 .unused,
147187 .unused,
147188 .unused,
147189 .unused,
147190 .unused,
147191 .unused,
147192 .unused,
147193 .unused,
147194 },
147195 .dst_temps = .{ .{ .ref = .src0 }, .unused },
147196 .each = .{ .once = &.{
147197 .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
147198 .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
147199 .{ ._, ._ss, .min, .tmp0x, .src0x, ._, ._ },
147200 .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b01), ._ },
147201 .{ ._, ._ss, .min, .dst0x, .tmp0x, ._, ._ },
147202 } },
147203 }, .{
147204 .required_features = .{ .avx, null, null, null },
147205 .dst_constraints = .{ .{ .float = .dword }, .any },
147206 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
147207 .patterns = &.{
147208 .{ .src = .{ .to_sse, .none, .none } },
147209 },
147210 .extra_temps = .{
147211 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147212 .unused,
147213 .unused,
147214 .unused,
147215 .unused,
147216 .unused,
147217 .unused,
147218 .unused,
147219 .unused,
147220 .unused,
147221 .unused,
147222 },
147223 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
147224 .each = .{ .once = &.{
147225 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
147226 .{ ._, .v_ps, .min, .dst0x, .src0x, .tmp0x, ._ },
147227 .{ ._, .v_ps, .shuf, .tmp0x, .src0x, .src0x, .ui(0b01) },
147228 .{ ._, .v_ss, .min, .dst0x, .src0x, .tmp0x, ._ },
147229 } },
147230 }, .{
147231 .required_features = .{ .sse, null, null, null },
147232 .dst_constraints = .{ .{ .float = .dword }, .any },
147233 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
147234 .patterns = &.{
147235 .{ .src = .{ .to_mut_sse, .none, .none } },
147236 },
147237 .extra_temps = .{
147238 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147239 .unused,
147240 .unused,
147241 .unused,
147242 .unused,
147243 .unused,
147244 .unused,
147245 .unused,
147246 .unused,
147247 .unused,
147248 .unused,
147249 },
147250 .dst_temps = .{ .{ .ref = .src0 }, .unused },
147251 .each = .{ .once = &.{
147252 .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
147253 .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
147254 .{ ._, ._ps, .min, .dst0x, .tmp0x, ._, ._ },
147255 .{ ._, ._ps, .mova, .tmp0x, .dst0x, ._, ._ },
147256 .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01), ._ },
147257 .{ ._, ._ss, .min, .dst0x, .tmp0x, ._, ._ },
147258 } },
147259 }, .{
147260 .required_features = .{ .avx, null, null, null },
147261 .dst_constraints = .{ .{ .float = .dword }, .any },
147262 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
147263 .patterns = &.{
147264 .{ .src = .{ .to_sse, .none, .none } },
147265 },
147266 .extra_temps = .{
147267 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
147268 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147269 .{ .type = .vector_8_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147270 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147271 .unused,
147272 .unused,
147273 .unused,
147274 .unused,
147275 .unused,
147276 .unused,
147277 .unused,
147278 },
147279 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
147280 .each = .{ .once = &.{
147281 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147282 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
147283 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147284 .{ ._, .v_ps, .@"or", .dst0y, .src0y, .lea(.tmp0y), ._ },
147285 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
147286 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
147287 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
147288 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
147289 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
147290 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
147291 } },
147292 }, .{
147293 .required_features = .{ .avx, null, null, null },
147294 .dst_constraints = .{ .{ .float = .dword }, .any },
147295 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
147296 .patterns = &.{
147297 .{ .src = .{ .to_sse, .none, .none } },
147298 },
147299 .extra_temps = .{
147300 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
147301 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147302 .unused,
147303 .unused,
147304 .unused,
147305 .unused,
147306 .unused,
147307 .unused,
147308 .unused,
147309 .unused,
147310 .unused,
147311 },
147312 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
147313 .each = .{ .once = &.{
147314 .{ ._, .v_f128, .extract, .tmp1x, .src0y, .ui(1), ._ },
147315 .{ ._, .v_ps, .min, .dst0x, .src0x, .tmp1x, ._ },
147316 .{ ._, .v_ps, .movhl, .tmp1x, .dst0x, .dst0x, ._ },
147317 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp1x, ._ },
147318 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
147319 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp1x, ._ },
147320 } },
147321 }, .{
147322 .required_features = .{ .avx512f, null, null, null },
147323 .dst_constraints = .{ .{ .float = .dword }, .any },
147324 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .zword, .is = .dword } }, .any, .any },
147325 .patterns = &.{
147326 .{ .src = .{ .to_mem, .none, .none } },
147327 },
147328 .extra_temps = .{
147329 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
147330 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147331 .{ .type = .vector_16_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147332 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
147333 .unused,
147334 .unused,
147335 .unused,
147336 .unused,
147337 .unused,
147338 .unused,
147339 .unused,
147340 },
147341 .dst_temps = .{ .{ .rc = .sse }, .unused },
147342 .each = .{ .once = &.{
147343 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147344 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
147345 .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
147346 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147347 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
147348 .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
147349 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
147350 .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
147351 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp3y, ._ },
147352 .{ ._, .v_i128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
147353 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
147354 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
147355 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
147356 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
147357 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
147358 } },
147359 }, .{
147360 .required_features = .{ .avx512f, null, null, null },
147361 .dst_constraints = .{ .{ .float = .dword }, .any },
147362 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .dword } }, .any, .any },
147363 .patterns = &.{
147364 .{ .src = .{ .to_mem, .none, .none } },
147365 },
147366 .extra_temps = .{
147367 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147368 .unused,
147369 .unused,
147370 .unused,
147371 .unused,
147372 .unused,
147373 .unused,
147374 .unused,
147375 .unused,
147376 .unused,
147377 .unused,
147378 },
147379 .dst_temps = .{ .{ .rc = .sse }, .unused },
147380 .each = .{ .once = &.{
147381 .{ ._, .v_ps, .mova, .dst0y, .mem(.src0y), ._, ._ },
147382 .{ ._, .v_ps, .mova, .tmp0y, .memd(.src0y, 32), ._, ._ },
147383 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp0y, ._ },
147384 .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
147385 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp0x, ._ },
147386 .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
147387 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp0x, ._ },
147388 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
147389 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp0x, ._ },
147390 } },
147391 }, .{
147392 .required_features = .{ .avx, null, null, null },
147393 .dst_constraints = .{ .{ .float = .dword }, .any },
147394 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
147395 .patterns = &.{
147396 .{ .src = .{ .to_mem, .none, .none } },
147397 },
147398 .extra_temps = .{
147399 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147400 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147401 .unused,
147402 .unused,
147403 .unused,
147404 .unused,
147405 .unused,
147406 .unused,
147407 .unused,
147408 .unused,
147409 .unused,
147410 },
147411 .dst_temps = .{ .{ .rc = .sse }, .unused },
147412 .clobbers = .{ .eflags = true },
147413 .each = .{ .once = &.{
147414 .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_unaligned_size), ._, ._ },
147415 .{ ._, .v_ps, .mova, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
147416 .{ .@"0:", .v_ps, .min, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
147417 .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
147418 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147419 .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
147420 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp1x, ._ },
147421 .{ ._, .v_ps, .movhl, .tmp1x, .dst0x, .dst0x, ._ },
147422 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp1x, ._ },
147423 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
147424 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp1x, ._ },
147425 } },
147426 }, .{
147427 .required_features = .{ .sse, null, null, null },
147428 .dst_constraints = .{ .{ .float = .dword }, .any },
147429 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
147430 .patterns = &.{
147431 .{ .src = .{ .to_mem, .none, .none } },
147432 },
147433 .extra_temps = .{
147434 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147435 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147436 .unused,
147437 .unused,
147438 .unused,
147439 .unused,
147440 .unused,
147441 .unused,
147442 .unused,
147443 .unused,
147444 .unused,
147445 },
147446 .dst_temps = .{ .{ .rc = .sse }, .unused },
147447 .clobbers = .{ .eflags = true },
147448 .each = .{ .once = &.{
147449 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
147450 .{ ._, ._ps, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
147451 .{ .@"0:", ._ps, .min, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
147452 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
147453 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147454 .{ ._, ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
147455 .{ ._, ._ps, .movhl, .tmp1x, .dst0x, ._, ._ },
147456 .{ ._, ._ps, .min, .dst0x, .tmp1x, ._, ._ },
147457 .{ ._, ._ps, .mova, .tmp1x, .dst0x, ._, ._ },
147458 .{ ._, ._ps, .shuf, .tmp1x, .tmp1x, .ui(0b01), ._ },
147459 .{ ._, ._ss, .min, .dst0x, .tmp1x, ._, ._ },
147460 } },
147461 }, .{
147462 .required_features = .{ .avx512f, null, null, null },
147463 .dst_constraints = .{ .{ .float = .dword }, .any },
147464 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .zword, .is = .dword } }, .any, .any },
147465 .patterns = &.{
147466 .{ .src = .{ .to_mem, .none, .none } },
147467 },
147468 .extra_temps = .{
147469 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147470 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147471 .{ .type = .vector_16_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147472 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
147473 .unused,
147474 .unused,
147475 .unused,
147476 .unused,
147477 .unused,
147478 .unused,
147479 .unused,
147480 },
147481 .dst_temps = .{ .{ .rc = .sse }, .unused },
147482 .clobbers = .{ .eflags = true },
147483 .each = .{ .once = &.{
147484 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147485 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
147486 .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
147487 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147488 .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
147489 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
147490 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
147491 .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
147492 .{ ._, ._, .mov, .tmp0d, .sia(-128, .src0, .add_size), ._, ._ },
147493 .{ .@"0:", .v_ps, .min, .tmp3y, .tmp3y, .memid(.src0y, .tmp0, 32), ._ },
147494 .{ ._, .v_ps, .min, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
147495 .{ ._, ._, .sub, .tmp0d, .si(64), ._, ._ },
147496 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147497 .{ ._, .v_ps, .min, .dst0y, .dst0y, .tmp3y, ._ },
147498 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
147499 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
147500 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
147501 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
147502 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
147503 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
147504 } },
147505 }, .{
147506 .required_features = .{ .avx, null, null, null },
147507 .dst_constraints = .{ .{ .float = .dword }, .any },
147508 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
147509 .patterns = &.{
147510 .{ .src = .{ .to_mem, .none, .none } },
147511 },
147512 .extra_temps = .{
147513 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147514 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147515 .{ .type = .vector_8_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147516 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147517 .unused,
147518 .unused,
147519 .unused,
147520 .unused,
147521 .unused,
147522 .unused,
147523 .unused,
147524 },
147525 .dst_temps = .{ .{ .rc = .sse }, .unused },
147526 .clobbers = .{ .eflags = true },
147527 .each = .{ .once = &.{
147528 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147529 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
147530 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147531 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
147532 .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
147533 .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
147534 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
147535 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
147536 .{ .@"0:", .v_ps, .min, .dst0x, .dst0x, .memi(.src0x, .tmp0), ._ },
147537 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
147538 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147539 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
147540 .{ ._, .v_ps, .min, .dst0x, .dst0x, .tmp3x, ._ },
147541 .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
147542 .{ ._, .v_ss, .min, .dst0x, .dst0x, .tmp3x, ._ },
147543 } },
147544 }, .{
147545 .required_features = .{ .sse, null, null, null },
147546 .dst_constraints = .{ .{ .float = .dword }, .any },
147547 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
147548 .patterns = &.{
147549 .{ .src = .{ .to_mem, .none, .none } },
147550 },
147551 .extra_temps = .{
147552 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147553 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147554 .{ .type = .vector_4_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147555 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147556 .unused,
147557 .unused,
147558 .unused,
147559 .unused,
147560 .unused,
147561 .unused,
147562 .unused,
147563 },
147564 .dst_temps = .{ .{ .rc = .sse }, .unused },
147565 .clobbers = .{ .eflags = true },
147566 .each = .{ .once = &.{
147567 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147568 .{ ._, ._ps, .mova, .dst0x, .lea(.tmp0x), ._, ._ },
147569 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147570 .{ ._, ._ps, .@"and", .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
147571 .{ ._, ._ps, .@"or", .dst0x, .lea(.tmp0x), ._, ._ },
147572 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
147573 .{ .@"0:", ._ps, .min, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
147574 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
147575 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147576 .{ ._, ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
147577 .{ ._, ._ps, .movhl, .tmp3x, .dst0x, ._, ._ },
147578 .{ ._, ._ps, .min, .dst0x, .tmp3x, ._, ._ },
147579 .{ ._, ._ps, .mova, .tmp3x, .dst0x, ._, ._ },
147580 .{ ._, ._ps, .shuf, .tmp3x, .tmp3x, .ui(0b01), ._ },
147581 .{ ._, ._ss, .min, .dst0x, .tmp3x, ._, ._ },
147582 } },
147583 }, .{
147584 .required_features = .{ .avx, null, null, null },
147585 .dst_constraints = .{ .{ .float = .qword }, .any },
147586 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
147587 .patterns = &.{
147588 .{ .src = .{ .to_sse, .none, .none } },
147589 },
147590 .extra_temps = .{
147591 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
147592 .unused,
147593 .unused,
147594 .unused,
147595 .unused,
147596 .unused,
147597 .unused,
147598 .unused,
147599 .unused,
147600 .unused,
147601 .unused,
147602 },
147603 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
147604 .each = .{ .once = &.{
147605 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
147606 .{ ._, .v_sd, .min, .dst0x, .src0x, .tmp0x, ._ },
147607 } },
147608 }, .{
147609 .required_features = .{ .sse2, null, null, null },
147610 .dst_constraints = .{ .{ .float = .qword }, .any },
147611 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
147612 .patterns = &.{
147613 .{ .src = .{ .to_mut_sse, .none, .none } },
147614 },
147615 .extra_temps = .{
147616 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
147617 .unused,
147618 .unused,
147619 .unused,
147620 .unused,
147621 .unused,
147622 .unused,
147623 .unused,
147624 .unused,
147625 .unused,
147626 .unused,
147627 },
147628 .dst_temps = .{ .{ .ref = .src0 }, .unused },
147629 .each = .{ .once = &.{
147630 .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
147631 .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
147632 .{ ._, ._sd, .min, .dst0x, .tmp0x, ._, ._ },
147633 } },
147634 }, .{
147635 .required_features = .{ .avx, null, null, null },
147636 .dst_constraints = .{ .{ .float = .qword }, .any },
147637 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
147638 .patterns = &.{
147639 .{ .src = .{ .to_sse, .none, .none } },
147640 },
147641 .extra_temps = .{
147642 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
147643 .unused,
147644 .unused,
147645 .unused,
147646 .unused,
147647 .unused,
147648 .unused,
147649 .unused,
147650 .unused,
147651 .unused,
147652 .unused,
147653 },
147654 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
147655 .each = .{ .once = &.{
147656 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
147657 .{ ._, .v_sd, .min, .tmp0x, .src0x, .tmp0x, ._ },
147658 .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
147659 .{ ._, .v_sd, .min, .dst0x, .tmp0x, .dst0x, ._ },
147660 } },
147661 }, .{
147662 .required_features = .{ .avx, null, null, null },
147663 .dst_constraints = .{ .{ .float = .qword }, .any },
147664 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
147665 .patterns = &.{
147666 .{ .src = .{ .to_sse, .none, .none } },
147667 },
147668 .extra_temps = .{
147669 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
147670 .unused,
147671 .unused,
147672 .unused,
147673 .unused,
147674 .unused,
147675 .unused,
147676 .unused,
147677 .unused,
147678 .unused,
147679 .unused,
147680 },
147681 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
147682 .each = .{ .once = &.{
147683 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
147684 .{ ._, .v_pd, .min, .dst0x, .src0x, .tmp0x, ._ },
147685 .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
147686 .{ ._, .v_sd, .min, .dst0x, .dst0x, .tmp0x, ._ },
147687 } },
147688 }, .{
147689 .required_features = .{ .avx512f, null, null, null },
147690 .dst_constraints = .{ .{ .float = .qword }, .any },
147691 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .zword, .is = .qword } }, .any, .any },
147692 .patterns = &.{
147693 .{ .src = .{ .to_mem, .none, .none } },
147694 },
147695 .extra_temps = .{
147696 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
147697 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147698 .{ .type = .vector_8_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147699 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
147700 .unused,
147701 .unused,
147702 .unused,
147703 .unused,
147704 .unused,
147705 .unused,
147706 .unused,
147707 },
147708 .dst_temps = .{ .{ .rc = .sse }, .unused },
147709 .each = .{ .once = &.{
147710 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147711 .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
147712 .{ ._, .v_pd, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
147713 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147714 .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
147715 .{ ._, .v_pd, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
147716 .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
147717 .{ ._, .v_pd, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
147718 .{ ._, .v_pd, .min, .dst0y, .dst0y, .tmp3y, ._ },
147719 .{ ._, .v_i128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
147720 .{ ._, .v_pd, .min, .dst0x, .dst0x, .tmp3x, ._ },
147721 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
147722 .{ ._, .v_sd, .min, .dst0x, .dst0x, .tmp3x, ._ },
147723 } },
147724 }, .{
147725 .required_features = .{ .avx512f, null, null, null },
147726 .dst_constraints = .{ .{ .float = .qword }, .any },
147727 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .qword } }, .any, .any },
147728 .patterns = &.{
147729 .{ .src = .{ .to_mem, .none, .none } },
147730 },
147731 .extra_temps = .{
147732 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147733 .unused,
147734 .unused,
147735 .unused,
147736 .unused,
147737 .unused,
147738 .unused,
147739 .unused,
147740 .unused,
147741 .unused,
147742 .unused,
147743 },
147744 .dst_temps = .{ .{ .rc = .sse }, .unused },
147745 .each = .{ .once = &.{
147746 .{ ._, .v_pd, .mova, .dst0y, .mem(.src0y), ._, ._ },
147747 .{ ._, .v_pd, .mova, .tmp0y, .memd(.src0y, 32), ._, ._ },
147748 .{ ._, .v_pd, .min, .dst0y, .dst0y, .tmp0y, ._ },
147749 .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
147750 .{ ._, .v_pd, .min, .dst0x, .dst0x, .tmp0x, ._ },
147751 .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
147752 .{ ._, .v_sd, .min, .dst0x, .dst0x, .tmp0x, ._ },
147753 } },
147754 }, .{
147755 .required_features = .{ .avx, null, null, null },
147756 .dst_constraints = .{ .{ .float = .qword }, .any },
147757 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
147758 .patterns = &.{
147759 .{ .src = .{ .to_mem, .none, .none } },
147760 },
147761 .extra_temps = .{
147762 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147763 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
147764 .unused,
147765 .unused,
147766 .unused,
147767 .unused,
147768 .unused,
147769 .unused,
147770 .unused,
147771 .unused,
147772 .unused,
147773 },
147774 .dst_temps = .{ .{ .rc = .sse }, .unused },
147775 .clobbers = .{ .eflags = true },
147776 .each = .{ .once = &.{
147777 .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_unaligned_size), ._, ._ },
147778 .{ ._, .v_pd, .mova, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
147779 .{ .@"0:", .v_pd, .min, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
147780 .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
147781 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147782 .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
147783 .{ ._, .v_pd, .min, .dst0x, .dst0x, .tmp1x, ._ },
147784 .{ ._, .v_ps, .movhl, .tmp1x, .dst0x, .dst0x, ._ },
147785 .{ ._, .v_pd, .min, .dst0x, .dst0x, .tmp1x, ._ },
147786 } },
147787 }, .{
147788 .required_features = .{ .sse2, null, null, null },
147789 .dst_constraints = .{ .{ .float = .qword }, .any },
147790 .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
147791 .patterns = &.{
147792 .{ .src = .{ .to_mem, .none, .none } },
147793 },
147794 .extra_temps = .{
147795 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147796 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
147797 .unused,
147798 .unused,
147799 .unused,
147800 .unused,
147801 .unused,
147802 .unused,
147803 .unused,
147804 .unused,
147805 .unused,
147806 },
147807 .dst_temps = .{ .{ .rc = .sse }, .unused },
147808 .clobbers = .{ .eflags = true },
147809 .each = .{ .once = &.{
147810 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
147811 .{ ._, ._pd, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
147812 .{ .@"0:", ._pd, .min, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
147813 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
147814 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147815 .{ ._, ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
147816 .{ ._, ._ps, .movhl, .tmp1x, .dst0x, ._, ._ },
147817 .{ ._, ._sd, .min, .dst0x, .tmp1x, ._, ._ },
147818 } },
147819 }, .{
147820 .required_features = .{ .avx512f, null, null, null },
147821 .dst_constraints = .{ .{ .float = .qword }, .any },
147822 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, .any, .any },
147823 .patterns = &.{
147824 .{ .src = .{ .to_mem, .none, .none } },
147825 },
147826 .extra_temps = .{
147827 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147828 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147829 .{ .type = .vector_8_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147830 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
147831 .unused,
147832 .unused,
147833 .unused,
147834 .unused,
147835 .unused,
147836 .unused,
147837 .unused,
147838 },
147839 .dst_temps = .{ .{ .rc = .sse }, .unused },
147840 .clobbers = .{ .eflags = true },
147841 .each = .{ .once = &.{
147842 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147843 .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
147844 .{ ._, .v_pd, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
147845 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147846 .{ ._, .v_pd, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
147847 .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
147848 .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
147849 .{ ._, .v_pd, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
147850 .{ ._, ._, .mov, .tmp0d, .sia(-128, .src0, .add_size), ._, ._ },
147851 .{ .@"0:", .v_pd, .min, .tmp3y, .tmp3y, .memid(.src0y, .tmp0, 32), ._ },
147852 .{ ._, .v_pd, .min, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
147853 .{ ._, ._, .sub, .tmp0d, .si(64), ._, ._ },
147854 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147855 .{ ._, .v_pd, .min, .dst0y, .dst0y, .tmp3y, ._ },
147856 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
147857 .{ ._, .v_pd, .min, .dst0x, .dst0x, .tmp3x, ._ },
147858 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
147859 .{ ._, .v_sd, .min, .dst0x, .dst0x, .tmp3x, ._ },
147860 } },
147861 }, .{
147862 .required_features = .{ .avx, null, null, null },
147863 .dst_constraints = .{ .{ .float = .qword }, .any },
147864 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
147865 .patterns = &.{
147866 .{ .src = .{ .to_mem, .none, .none } },
147867 },
147868 .extra_temps = .{
147869 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147870 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147871 .{ .type = .vector_4_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147872 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
147873 .unused,
147874 .unused,
147875 .unused,
147876 .unused,
147877 .unused,
147878 .unused,
147879 .unused,
147880 },
147881 .dst_temps = .{ .{ .rc = .sse }, .unused },
147882 .clobbers = .{ .eflags = true },
147883 .each = .{ .once = &.{
147884 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147885 .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
147886 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147887 .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
147888 .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
147889 .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
147890 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
147891 .{ ._, .v_pd, .min, .dst0x, .dst0x, .tmp3x, ._ },
147892 .{ .@"0:", .v_pd, .min, .dst0x, .dst0x, .memi(.src0x, .tmp0), ._ },
147893 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
147894 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147895 .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
147896 .{ ._, .v_pd, .min, .dst0x, .dst0x, .tmp3x, ._ },
147897 } },
147898 }, .{
147899 .required_features = .{ .sse2, null, null, null },
147900 .dst_constraints = .{ .{ .float = .qword }, .any },
147901 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
147902 .patterns = &.{
147903 .{ .src = .{ .to_mem, .none, .none } },
147904 },
147905 .extra_temps = .{
147906 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147907 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
147908 .{ .type = .vector_2_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = inf } } },
147909 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
147910 .unused,
147911 .unused,
147912 .unused,
147913 .unused,
147914 .unused,
147915 .unused,
147916 .unused,
147917 },
147918 .dst_temps = .{ .{ .rc = .sse }, .unused },
147919 .clobbers = .{ .eflags = true },
147920 .each = .{ .once = &.{
147921 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
147922 .{ ._, ._pd, .mova, .dst0x, .lea(.tmp0x), ._, ._ },
147923 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
147924 .{ ._, ._pd, .@"and", .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
147925 .{ ._, ._pd, .@"or", .dst0x, .lea(.tmp0x), ._, ._ },
147926 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
147927 .{ .@"0:", ._pd, .min, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
147928 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
147929 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147930 .{ ._, ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
147931 .{ ._, ._ps, .movhl, .tmp3x, .dst0x, ._, ._ },
147932 .{ ._, ._pd, .min, .dst0x, .tmp3x, ._, ._ },
147933 } },
147934 }, .{
147935 .required_features = .{ .x87, .cmov, null, null },
147936 .dst_constraints = .{ .{ .float = .qword }, .any },
147937 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
147938 .patterns = &.{
147939 .{ .src = .{ .to_mem, .none, .none } },
147940 },
147941 .extra_temps = .{
147942 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147943 .{ .type = .f64, .kind = .{ .reg = .st7 } },
147944 .{ .type = .f64, .kind = .{ .reg = .st6 } },
147945 .unused,
147946 .unused,
147947 .unused,
147948 .unused,
147949 .unused,
147950 .unused,
147951 .unused,
147952 .unused,
147953 },
147954 .dst_temps = .{ .mem, .unused },
147955 .clobbers = .{ .eflags = true },
147956 .each = .{ .once = &.{
147957 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
147958 .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
147959 .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
147960 .{ ._, .f_, .ucomi, .tmp2t, .tmp1t, ._, ._ },
147961 .{ ._, .f_nb, .cmov, .tmp2t, .tmp1t, ._, ._ },
147962 .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
147963 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
147964 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
147965 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
147966 } },
147967 }, .{
147968 .required_features = .{ .sahf, .x87, null, null },
147969 .dst_constraints = .{ .{ .float = .qword }, .any },
147970 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
147971 .patterns = &.{
147972 .{ .src = .{ .to_mem, .none, .none } },
147973 },
147974 .extra_temps = .{
147975 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
147976 .{ .type = .f64, .kind = .{ .reg = .st7 } },
147977 .{ .type = .f64, .kind = .{ .reg = .st6 } },
147978 .{ .type = .u16, .kind = .{ .reg = .ax } },
147979 .unused,
147980 .unused,
147981 .unused,
147982 .unused,
147983 .unused,
147984 .unused,
147985 .unused,
147986 },
147987 .dst_temps = .{ .mem, .unused },
147988 .clobbers = .{ .eflags = true },
147989 .each = .{ .once = &.{
147990 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
147991 .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
147992 .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
147993 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
147994 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
147995 .{ ._, ._, .sahf, ._, ._, ._, ._ },
147996 .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
147997 .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
147998 .{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
147999 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
148000 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148001 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
148002 } },
148003 }, .{
148004 .required_features = .{ .x87, null, null, null },
148005 .dst_constraints = .{ .{ .float = .qword }, .any },
148006 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
148007 .patterns = &.{
148008 .{ .src = .{ .to_mem, .none, .none } },
148009 },
148010 .extra_temps = .{
148011 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148012 .{ .type = .f64, .kind = .{ .reg = .st7 } },
148013 .{ .type = .f64, .kind = .{ .reg = .st6 } },
148014 .{ .type = .u16, .kind = .{ .reg = .ax } },
148015 .unused,
148016 .unused,
148017 .unused,
148018 .unused,
148019 .unused,
148020 .unused,
148021 .unused,
148022 },
148023 .dst_temps = .{ .mem, .unused },
148024 .clobbers = .{ .eflags = true },
148025 .each = .{ .once = &.{
148026 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
148027 .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
148028 .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
148029 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
148030 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
148031 .{ ._, ._, .@"test", .tmp3h, .si(0b0_000_001), ._, ._ },
148032 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
148033 .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
148034 .{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
148035 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
148036 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148037 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
148038 } },
148039 }, .{
148040 .required_features = .{ .x87, .cmov, null, null },
148041 .dst_constraints = .{ .{ .float = .tbyte }, .any },
148042 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
148043 .patterns = &.{
148044 .{ .src = .{ .to_mem, .none, .none } },
148045 },
148046 .extra_temps = .{
148047 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148048 .{ .type = .f80, .kind = .{ .reg = .st7 } },
148049 .{ .type = .f80, .kind = .{ .reg = .st6 } },
148050 .unused,
148051 .unused,
148052 .unused,
148053 .unused,
148054 .unused,
148055 .unused,
148056 .unused,
148057 .unused,
148058 },
148059 .dst_temps = .{ .{ .rc = .x87 }, .unused },
148060 .clobbers = .{ .eflags = true },
148061 .each = .{ .once = &.{
148062 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
148063 .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
148064 .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
148065 .{ ._, .f_, .ucomi, .tmp2t, .tmp1t, ._, ._ },
148066 .{ ._, .f_nb, .cmov, .tmp2t, .tmp1t, ._, ._ },
148067 .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
148068 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148069 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148070 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
148071 } },
148072 }, .{
148073 .required_features = .{ .sahf, .x87, null, null },
148074 .dst_constraints = .{ .{ .float = .tbyte }, .any },
148075 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
148076 .patterns = &.{
148077 .{ .src = .{ .to_mem, .none, .none } },
148078 },
148079 .extra_temps = .{
148080 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148081 .{ .type = .f80, .kind = .{ .reg = .st7 } },
148082 .{ .type = .f80, .kind = .{ .reg = .st6 } },
148083 .{ .type = .u16, .kind = .{ .reg = .ax } },
148084 .unused,
148085 .unused,
148086 .unused,
148087 .unused,
148088 .unused,
148089 .unused,
148090 .unused,
148091 },
148092 .dst_temps = .{ .{ .rc = .x87 }, .unused },
148093 .clobbers = .{ .eflags = true },
148094 .each = .{ .once = &.{
148095 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
148096 .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
148097 .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
148098 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
148099 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
148100 .{ ._, ._, .sahf, ._, ._, ._, ._ },
148101 .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
148102 .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
148103 .{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
148104 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148105 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148106 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
148107 } },
148108 }, .{
148109 .required_features = .{ .x87, null, null, null },
148110 .dst_constraints = .{ .{ .float = .tbyte }, .any },
148111 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
148112 .patterns = &.{
148113 .{ .src = .{ .to_mem, .none, .none } },
148114 },
148115 .extra_temps = .{
148116 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148117 .{ .type = .f80, .kind = .{ .reg = .st7 } },
148118 .{ .type = .f80, .kind = .{ .reg = .st6 } },
148119 .{ .type = .u16, .kind = .{ .reg = .ax } },
148120 .unused,
148121 .unused,
148122 .unused,
148123 .unused,
148124 .unused,
148125 .unused,
148126 .unused,
148127 },
148128 .dst_temps = .{ .{ .rc = .x87 }, .unused },
148129 .clobbers = .{ .eflags = true },
148130 .each = .{ .once = &.{
148131 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
148132 .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
148133 .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
148134 .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
148135 .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
148136 .{ ._, ._, .@"test", .tmp3h, .si(0b0_000_001), ._, ._ },
148137 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
148138 .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
148139 .{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
148140 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148141 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148142 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
148143 } },
148144 }, .{
148145 .required_features = .{ .avx, null, null, null },
148146 .dst_constraints = .{ .{ .float = .xword }, .any },
148147 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
148148 .patterns = &.{
148149 .{ .src = .{ .to_mem, .none, .none } },
148150 },
148151 .call_frame = .{ .alignment = .@"16" },
148152 .extra_temps = .{
148153 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148154 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
148155 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
148156 .unused,
148157 .unused,
148158 .unused,
148159 .unused,
148160 .unused,
148161 .unused,
148162 .unused,
148163 .unused,
148164 },
148165 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
148166 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
148167 .each = .{ .once = &.{
148168 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
148169 .{ ._, .v_dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
148170 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
148171 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
148172 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148173 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148174 } },
148175 }, .{
148176 .required_features = .{ .sse2, null, null, null },
148177 .dst_constraints = .{ .{ .float = .xword }, .any },
148178 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
148179 .patterns = &.{
148180 .{ .src = .{ .to_mem, .none, .none } },
148181 },
148182 .call_frame = .{ .alignment = .@"16" },
148183 .extra_temps = .{
148184 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148185 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
148186 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
148187 .unused,
148188 .unused,
148189 .unused,
148190 .unused,
148191 .unused,
148192 .unused,
148193 .unused,
148194 .unused,
148195 },
148196 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
148197 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
148198 .each = .{ .once = &.{
148199 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
148200 .{ ._, ._dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
148201 .{ .@"0:", ._dqa, .mov, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
148202 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
148203 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148204 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148205 } },
148206 }, .{
148207 .required_features = .{ .sse, null, null, null },
148208 .dst_constraints = .{ .{ .float = .xword }, .any },
148209 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
148210 .patterns = &.{
148211 .{ .src = .{ .to_mem, .none, .none } },
148212 },
148213 .call_frame = .{ .alignment = .@"16" },
148214 .extra_temps = .{
148215 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148216 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
148217 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fminq" } } },
148218 .unused,
148219 .unused,
148220 .unused,
148221 .unused,
148222 .unused,
148223 .unused,
148224 .unused,
148225 .unused,
148226 },
148227 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
148228 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
148229 .each = .{ .once = &.{
148230 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
148231 .{ ._, ._ps, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
148232 .{ .@"0:", ._ps, .mova, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
148233 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
148234 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
148235 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
148236 } },
148237 } },
148238 .Max => unreachable,
148239 .Add => comptime &.{ .{
148240 .required_features = .{ .f16c, .fast_hops, null, null },
148241 .dst_constraints = .{ .{ .float = .word }, .any },
148242 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },
148243 .patterns = &.{
148244 .{ .src = .{ .mem, .none, .none } },
148245 .{ .src = .{ .to_sse, .none, .none } },
148246 },
148247 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148248 .each = .{ .once = &.{
148249 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148250 .{ ._, .vh_ps, .add, .dst0x, .dst0x, .dst0x, ._ },
148251 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148252 } },
148253 }, .{
148254 .required_features = .{ .f16c, null, null, null },
148255 .dst_constraints = .{ .{ .float = .word }, .any },
148256 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },
148257 .patterns = &.{
148258 .{ .src = .{ .mem, .none, .none } },
148259 .{ .src = .{ .to_sse, .none, .none } },
148260 },
148261 .extra_temps = .{
148262 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148263 .unused,
148264 .unused,
148265 .unused,
148266 .unused,
148267 .unused,
148268 .unused,
148269 .unused,
148270 .unused,
148271 .unused,
148272 .unused,
148273 },
148274 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148275 .each = .{ .once = &.{
148276 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148277 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148278 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
148279 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148280 } },
148281 }, .{
148282 .required_features = .{ .f16c, .fast_hops, null, null },
148283 .dst_constraints = .{ .{ .float = .word }, .any },
148284 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
148285 .patterns = &.{
148286 .{ .src = .{ .mem, .none, .none } },
148287 .{ .src = .{ .to_sse, .none, .none } },
148288 },
148289 .extra_temps = .{
148290 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148291 .unused,
148292 .unused,
148293 .unused,
148294 .unused,
148295 .unused,
148296 .unused,
148297 .unused,
148298 .unused,
148299 .unused,
148300 .unused,
148301 },
148302 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148303 .each = .{ .once = &.{
148304 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148305 .{ ._, .vh_ps, .add, .tmp0x, .dst0x, .dst0x, ._ },
148306 .{ ._, .v_ps, .shuf, .dst0x, .dst0x, .dst0x, .ui(0b11_10) },
148307 .{ ._, .v_ss, .add, .dst0x, .tmp0x, .dst0x, ._ },
148308 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148309 } },
148310 }, .{
148311 .required_features = .{ .f16c, null, null, null },
148312 .dst_constraints = .{ .{ .float = .word }, .any },
148313 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
148314 .patterns = &.{
148315 .{ .src = .{ .mem, .none, .none } },
148316 .{ .src = .{ .to_sse, .none, .none } },
148317 },
148318 .extra_temps = .{
148319 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148320 .unused,
148321 .unused,
148322 .unused,
148323 .unused,
148324 .unused,
148325 .unused,
148326 .unused,
148327 .unused,
148328 .unused,
148329 .unused,
148330 },
148331 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148332 .each = .{ .once = &.{
148333 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148334 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
148335 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
148336 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148337 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
148338 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148339 } },
148340 }, .{
148341 .required_features = .{ .f16c, .fast_hops, null, null },
148342 .dst_constraints = .{ .{ .float = .word }, .any },
148343 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
148344 .patterns = &.{
148345 .{ .src = .{ .mem, .none, .none } },
148346 .{ .src = .{ .to_sse, .none, .none } },
148347 },
148348 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148349 .each = .{ .once = &.{
148350 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148351 .{ ._, .vh_ps, .add, .dst0x, .dst0x, .dst0x, ._ },
148352 .{ ._, .vh_ps, .add, .dst0x, .dst0x, .dst0x, ._ },
148353 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148354 } },
148355 }, .{
148356 .required_features = .{ .f16c, null, null, null },
148357 .dst_constraints = .{ .{ .float = .word }, .any },
148358 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
148359 .patterns = &.{
148360 .{ .src = .{ .mem, .none, .none } },
148361 .{ .src = .{ .to_sse, .none, .none } },
148362 },
148363 .extra_temps = .{
148364 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
148365 .unused,
148366 .unused,
148367 .unused,
148368 .unused,
148369 .unused,
148370 .unused,
148371 .unused,
148372 .unused,
148373 .unused,
148374 .unused,
148375 },
148376 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148377 .each = .{ .once = &.{
148378 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
148379 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
148380 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },
148381 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148382 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
148383 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148384 } },
148385 }, .{
148386 .required_features = .{ .f16c, .fast_hops, null, null },
148387 .dst_constraints = .{ .{ .float = .word }, .any },
148388 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
148389 .patterns = &.{
148390 .{ .src = .{ .to_sse, .none, .none } },
148391 },
148392 .extra_temps = .{
148393 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148394 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148395 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148396 .unused,
148397 .unused,
148398 .unused,
148399 .unused,
148400 .unused,
148401 .unused,
148402 .unused,
148403 .unused,
148404 },
148405 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148406 .each = .{ .once = &.{
148407 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148408 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
148409 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148410 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
148411 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
148412 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
148413 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },
148414 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148415 } },
148416 }, .{
148417 .required_features = .{ .f16c, null, null, null },
148418 .dst_constraints = .{ .{ .float = .word }, .any },
148419 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
148420 .patterns = &.{
148421 .{ .src = .{ .to_sse, .none, .none } },
148422 },
148423 .extra_temps = .{
148424 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148425 .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148426 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148427 .unused,
148428 .unused,
148429 .unused,
148430 .unused,
148431 .unused,
148432 .unused,
148433 .unused,
148434 .unused,
148435 },
148436 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148437 .each = .{ .once = &.{
148438 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148439 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
148440 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148441 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
148442 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },
148443 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b11_10) },
148444 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },
148445 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b01) },
148446 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },
148447 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148448 } },
148449 }, .{
148450 .required_features = .{ .f16c, .fast_hops, null, null },
148451 .dst_constraints = .{ .{ .float = .word }, .any },
148452 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
148453 .patterns = &.{
148454 .{ .src = .{ .mem, .none, .none } },
148455 .{ .src = .{ .to_sse, .none, .none } },
148456 },
148457 .extra_temps = .{
148458 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148459 .unused,
148460 .unused,
148461 .unused,
148462 .unused,
148463 .unused,
148464 .unused,
148465 .unused,
148466 .unused,
148467 .unused,
148468 .unused,
148469 },
148470 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148471 .each = .{ .once = &.{
148472 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
148473 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
148474 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
148475 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
148476 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
148477 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148478 } },
148479 }, .{
148480 .required_features = .{ .f16c, null, null, null },
148481 .dst_constraints = .{ .{ .float = .word }, .any },
148482 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
148483 .patterns = &.{
148484 .{ .src = .{ .mem, .none, .none } },
148485 .{ .src = .{ .to_sse, .none, .none } },
148486 },
148487 .extra_temps = .{
148488 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148489 .unused,
148490 .unused,
148491 .unused,
148492 .unused,
148493 .unused,
148494 .unused,
148495 .unused,
148496 .unused,
148497 .unused,
148498 .unused,
148499 },
148500 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148501 .each = .{ .once = &.{
148502 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
148503 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
148504 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },
148505 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
148506 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },
148507 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148508 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
148509 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148510 } },
148511 }, .{
148512 .required_features = .{ .f16c, .fast_hops, null, null },
148513 .dst_constraints = .{ .{ .float = .word }, .any },
148514 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
148515 .patterns = &.{
148516 .{ .src = .{ .to_sse, .none, .none } },
148517 },
148518 .extra_temps = .{
148519 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148520 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148521 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148522 .unused,
148523 .unused,
148524 .unused,
148525 .unused,
148526 .unused,
148527 .unused,
148528 .unused,
148529 .unused,
148530 },
148531 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148532 .each = .{ .once = &.{
148533 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148534 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
148535 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
148536 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148537 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },
148538 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp2y, ._ },
148539 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
148540 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
148541 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
148542 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },
148543 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148544 } },
148545 }, .{
148546 .required_features = .{ .f16c, null, null, null },
148547 .dst_constraints = .{ .{ .float = .word }, .any },
148548 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
148549 .patterns = &.{
148550 .{ .src = .{ .to_sse, .none, .none } },
148551 },
148552 .extra_temps = .{
148553 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148554 .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148555 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148556 .unused,
148557 .unused,
148558 .unused,
148559 .unused,
148560 .unused,
148561 .unused,
148562 .unused,
148563 .unused,
148564 },
148565 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148566 .each = .{ .once = &.{
148567 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148568 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
148569 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
148570 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148571 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },
148572 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp2y, ._ },
148573 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
148574 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },
148575 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b11_10) },
148576 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },
148577 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b01) },
148578 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },
148579 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148580 } },
148581 }, .{
148582 .required_features = .{ .f16c, .fast_hops, null, null },
148583 .dst_constraints = .{ .{ .float = .word }, .any },
148584 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
148585 .patterns = &.{
148586 .{ .src = .{ .to_sse, .none, .none } },
148587 },
148588 .extra_temps = .{
148589 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148590 .unused,
148591 .unused,
148592 .unused,
148593 .unused,
148594 .unused,
148595 .unused,
148596 .unused,
148597 .unused,
148598 .unused,
148599 .unused,
148600 },
148601 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148602 .each = .{ .once = &.{
148603 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
148604 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
148605 .{ ._, .v_ps, .cvtph2, .tmp0y, .tmp0x, ._, ._ },
148606 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp0y, ._ },
148607 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
148608 .{ ._, .vh_ps, .add, .dst0y, .dst0y, .dst0y, ._ },
148609 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
148610 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
148611 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148612 } },
148613 }, .{
148614 .required_features = .{ .f16c, null, null, null },
148615 .dst_constraints = .{ .{ .float = .word }, .any },
148616 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
148617 .patterns = &.{
148618 .{ .src = .{ .to_sse, .none, .none } },
148619 },
148620 .extra_temps = .{
148621 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148622 .unused,
148623 .unused,
148624 .unused,
148625 .unused,
148626 .unused,
148627 .unused,
148628 .unused,
148629 .unused,
148630 .unused,
148631 .unused,
148632 },
148633 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
148634 .each = .{ .once = &.{
148635 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
148636 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
148637 .{ ._, .v_ps, .cvtph2, .tmp0y, .tmp0x, ._, ._ },
148638 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp0y, ._ },
148639 .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
148640 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },
148641 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
148642 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp0x, ._ },
148643 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
148644 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp0x, ._ },
148645 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
148646 } },
148647 }, .{
148648 .required_features = .{ .avx512f, null, null, null },
148649 .dst_constraints = .{ .{ .float = .word }, .any },
148650 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .zword, .is = .word } }, .any, .any },
148651 .patterns = &.{
148652 .{ .src = .{ .to_mem, .none, .none } },
148653 },
148654 .extra_temps = .{
148655 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
148656 .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
148657 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148658 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
148659 .unused,
148660 .unused,
148661 .unused,
148662 .unused,
148663 .unused,
148664 .unused,
148665 .unused,
148666 },
148667 .dst_temps = .{ .{ .rc = .sse }, .unused },
148668 .each = .{ .once = &.{
148669 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
148670 .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
148671 .{ ._, .v_ps, .mova, .tmp2y, .lead(.tmp0y, 32), ._, ._ },
148672 .{ ._, .v_ps, .@"and", .tmp2y, .tmp2y, .memd(.src0y, 32), ._ },
148673 .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
148674 .{ ._, .v_f128, .extract, .tmp3x, .tmp2y, .ui(1), ._ },
148675 .{ ._, .v_ps, .cvtph2, .tmp2y, .tmp2x, ._, ._ },
148676 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
148677 .{ ._, .v_ps, .add, .tmp2y, .tmp2y, .tmp3y, ._ },
148678 .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
148679 .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
148680 .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
148681 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp3y, ._ },
148682 .{ ._, .v_ps, .add, .dst0y, .dst0y, .tmp2y, ._ },
148683 .{ ._, .v_f128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
148684 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },
148685 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b11_10) },
148686 .{ ._, .v_ps, .add, .dst0x, .dst0x, .tmp2x, ._ },
148687 .{ ._, .v_ps, .shuf, .tmp2x, .dst0x, .dst0x, .ui(0b01) },
148688 .{ ._, .v_ss, .add, .dst0x, .dst0x, .tmp2x, ._ },
146995 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },148689 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
146996 } },148690 } },
146997 }, .{148691 }, .{
...@@ -148679,14 +150373,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -148679,14 +150373,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
148679 }, .{150373 }, .{
148680 .required_features = .{ .x87, null, null, null },150374 .required_features = .{ .x87, null, null, null },
148681 .dst_constraints = .{ .{ .float = .tbyte }, .any },150375 .dst_constraints = .{ .{ .float = .tbyte }, .any },
148682 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .tbyte } }, .any, .any },150376 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
148683 .patterns = &.{150377 .patterns = &.{
148684 .{ .src = .{ .to_mem, .none, .none } },150378 .{ .src = .{ .to_mem, .none, .none } },
148685 },150379 },
148686 .extra_temps = .{150380 .extra_temps = .{
148687 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },150381 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
148688 .{ .type = .f80, .kind = .{ .reg = .st6 } },
148689 .{ .type = .f80, .kind = .{ .reg = .st7 } },150382 .{ .type = .f80, .kind = .{ .reg = .st7 } },
150383 .{ .type = .f80, .kind = .{ .reg = .st6 } },
148690 .unused,150384 .unused,
148691 .unused,150385 .unused,
148692 .unused,150386 .unused,
...@@ -148696,7 +150390,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -148696,7 +150390,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
148696 .unused,150390 .unused,
148697 .unused,150391 .unused,
148698 },150392 },
148699 .dst_temps = .{ .mem, .unused },150393 .dst_temps = .{ .{ .rc = .x87 }, .unused },
148700 .clobbers = .{ .eflags = true },150394 .clobbers = .{ .eflags = true },
148701 .each = .{ .once = &.{150395 .each = .{ .once = &.{
148702 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },150396 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
...@@ -150222,14 +151916,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -150222,14 +151916,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
150222 }, .{151916 }, .{
150223 .required_features = .{ .x87, null, null, null },151917 .required_features = .{ .x87, null, null, null },
150224 .dst_constraints = .{ .{ .float = .tbyte }, .any },151918 .dst_constraints = .{ .{ .float = .tbyte }, .any },
150225 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .tbyte } }, .any, .any },151919 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
150226 .patterns = &.{151920 .patterns = &.{
150227 .{ .src = .{ .to_mem, .none, .none } },151921 .{ .src = .{ .to_mem, .none, .none } },
150228 },151922 },
150229 .extra_temps = .{151923 .extra_temps = .{
150230 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },151924 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
150231 .{ .type = .f80, .kind = .{ .reg = .st6 } },
150232 .{ .type = .f80, .kind = .{ .reg = .st7 } },151925 .{ .type = .f80, .kind = .{ .reg = .st7 } },
151926 .{ .type = .f80, .kind = .{ .reg = .st6 } },
150233 .unused,151927 .unused,
150234 .unused,151928 .unused,
150235 .unused,151929 .unused,
...@@ -150239,7 +151933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -150239,7 +151933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
150239 .unused,151933 .unused,
150240 .unused,151934 .unused,
150241 },151935 },
150242 .dst_temps = .{ .mem, .unused },151936 .dst_temps = .{ .{ .rc = .x87 }, .unused },
150243 .clobbers = .{ .eflags = true },151937 .clobbers = .{ .eflags = true },
150244 .each = .{ .once = &.{151938 .each = .{ .once = &.{
150245 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },151939 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
src/arch/x86_64/encodings.zon+4-4
...@@ -1111,10 +1111,10 @@...@@ -1111,10 +1111,10 @@
1111 .{ .fcomp, .z, .{ }, .{ 0xd8, 0xd9 }, 0, .none, .x87 },1111 .{ .fcomp, .z, .{ }, .{ 0xd8, 0xd9 }, 0, .none, .x87 },
1112 .{ .fcompp, .z, .{ }, .{ 0xde, 0xd9 }, 0, .none, .x87 },1112 .{ .fcompp, .z, .{ }, .{ 0xde, 0xd9 }, 0, .none, .x87 },
11131113
1114 .{ .fcomi, .zo, .{ .st0, .st }, .{ 0xdb, 0xf0 }, 0, .none, .x87 },1114 .{ .fcomi, .zo, .{ .st0, .st }, .{ 0xdb, 0xf0 }, 0, .none, .@"cmov x87" },
1115 .{ .fcomip, .zo, .{ .st0, .st }, .{ 0xdf, 0xf0 }, 0, .none, .x87 },1115 .{ .fcomip, .zo, .{ .st0, .st }, .{ 0xdf, 0xf0 }, 0, .none, .@"cmov x87" },
1116 .{ .fucomi, .zo, .{ .st0, .st }, .{ 0xdb, 0xe8 }, 0, .none, .x87 },1116 .{ .fucomi, .zo, .{ .st0, .st }, .{ 0xdb, 0xe8 }, 0, .none, .@"cmov x87" },
1117 .{ .fucomip, .zo, .{ .st0, .st }, .{ 0xdf, 0xe8 }, 0, .none, .x87 },1117 .{ .fucomip, .zo, .{ .st0, .st }, .{ 0xdf, 0xe8 }, 0, .none, .@"cmov x87" },
11181118
1119 .{ .fcos, .z, .{}, .{ 0xd9, 0xff }, 0, .none, .x87 },1119 .{ .fcos, .z, .{}, .{ 0xd9, 0xff }, 0, .none, .x87 },
11201120
test/behavior/x86_64/unary.zig+9
...@@ -5128,6 +5128,15 @@ test reduceMul {...@@ -5128,6 +5128,15 @@ test reduceMul {
5128 try test_reduce_mul.testFloatVectors();5128 try test_reduce_mul.testFloatVectors();
5129}5129}
51305130
5131inline fn reduceMinOptimized(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {
5132 @setFloatMode(.optimized);
5133 return @reduce(.Min, rhs);
5134}
5135test reduceMinOptimized {
5136 const test_reduce_min_optimized = unary(reduceMinOptimized, .{});
5137 try test_reduce_min_optimized.testFloatVectors();
5138}
5139
5131inline fn reduceAddOptimized(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {5140inline fn reduceAddOptimized(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {
5132 @setFloatMode(.optimized);5141 @setFloatMode(.optimized);
5133 return @reduce(.Add, rhs);5142 return @reduce(.Add, rhs);