authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-13 06:50:05-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-17 02:08:41-04:00
log96e35b3652f1b823f8700ae7ff92999e805e9182
tree34c6e447444078a8232fef9483679ef0d7f9324e
parent3529889cf30b5c21ff9d25a483ad187cd5559a41

x86_64: rewrite vector `-|`


3 files changed, 5159 insertions(+), 39 deletions(-)

src/arch/x86_64/CodeGen.zig+5157-38
...@@ -2408,7 +2408,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -2408,7 +2408,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2408}2408}
24092409
2410fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {2410fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2411 @setEvalBranchQuota(17_100);2411 @setEvalBranchQuota(18_100);
2412 const pt = cg.pt;2412 const pt = cg.pt;
2413 const zcu = pt.zcu;2413 const zcu = pt.zcu;
2414 const ip = &zcu.intern_pool;2414 const ip = &zcu.intern_pool;
...@@ -6430,7 +6430,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6430,7 +6430,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6430 .patterns = &.{6430 .patterns = &.{
6431 .{ .src = .{ .to_mut_mmx, .mem, .none } },6431 .{ .src = .{ .to_mut_mmx, .mem, .none } },
6432 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },6432 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
6433 .{ .src = .{ .to_mut_mmx, .to_sse, .none } },6433 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
6434 },6434 },
6435 .dst_temps = .{ .{ .ref = .src0 }, .unused },6435 .dst_temps = .{ .{ .ref = .src0 }, .unused },
6436 .each = .{ .once = &.{6436 .each = .{ .once = &.{
...@@ -6510,7 +6510,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6510,7 +6510,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6510 .patterns = &.{6510 .patterns = &.{
6511 .{ .src = .{ .to_mut_mmx, .mem, .none } },6511 .{ .src = .{ .to_mut_mmx, .mem, .none } },
6512 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },6512 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
6513 .{ .src = .{ .to_mut_mmx, .to_sse, .none } },6513 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
6514 },6514 },
6515 .dst_temps = .{ .{ .ref = .src0 }, .unused },6515 .dst_temps = .{ .{ .ref = .src0 }, .unused },
6516 .each = .{ .once = &.{6516 .each = .{ .once = &.{
...@@ -6708,7 +6708,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6708,7 +6708,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6708 .patterns = &.{6708 .patterns = &.{
6709 .{ .src = .{ .to_mut_mmx, .mem, .none } },6709 .{ .src = .{ .to_mut_mmx, .mem, .none } },
6710 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },6710 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
6711 .{ .src = .{ .to_mut_mmx, .to_sse, .none } },6711 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
6712 },6712 },
6713 .dst_temps = .{ .{ .ref = .src0 }, .unused },6713 .dst_temps = .{ .{ .ref = .src0 }, .unused },
6714 .each = .{ .once = &.{6714 .each = .{ .once = &.{
...@@ -6896,7 +6896,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6896,7 +6896,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6896 .patterns = &.{6896 .patterns = &.{
6897 .{ .src = .{ .to_mut_mmx, .mem, .none } },6897 .{ .src = .{ .to_mut_mmx, .mem, .none } },
6898 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },6898 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
6899 .{ .src = .{ .to_mut_mmx, .to_sse, .none } },6899 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
6900 },6900 },
6901 .dst_temps = .{ .{ .ref = .src0 }, .unused },6901 .dst_temps = .{ .{ .ref = .src0 }, .unused },
6902 .each = .{ .once = &.{6902 .each = .{ .once = &.{
...@@ -7092,7 +7092,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -7092,7 +7092,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
7092 .patterns = &.{7092 .patterns = &.{
7093 .{ .src = .{ .to_mut_mmx, .mem, .none } },7093 .{ .src = .{ .to_mut_mmx, .mem, .none } },
7094 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },7094 .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
7095 .{ .src = .{ .to_mut_mmx, .to_sse, .none } },7095 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
7096 },7096 },
7097 .dst_temps = .{ .{ .ref = .src0 }, .unused },7097 .dst_temps = .{ .{ .ref = .src0 }, .unused },
7098 .each = .{ .once = &.{7098 .each = .{ .once = &.{
...@@ -10996,8 +10996,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10996,8 +10996,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10996 }, .{10996 }, .{
10997 .required_features = .{ .sse4_1, null, null, null },10997 .required_features = .{ .sse4_1, null, null, null },
10998 .src_constraints = .{10998 .src_constraints = .{
10999 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },10999 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
11000 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },11000 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
11001 .any,11001 .any,
11002 },11002 },
11003 .patterns = &.{11003 .patterns = &.{
...@@ -12539,12 +12539,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12539,12 +12539,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12539 },12539 },
12540 .extra_temps = .{12540 .extra_temps = .{
12541 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },12541 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12542 .{ .type = .usize, .kind = .{ .reg = .rdi } },
12542 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12543 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12543 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12544 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12544 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12545 .{ .type = .isize, .kind = .{ .reg = .rcx } },
12545 .{ .type = .isize, .kind = .{ .reg = .rdi } },
12546 .{ .type = .i64, .kind = .{ .reg = .rax } },12546 .{ .type = .i64, .kind = .{ .reg = .rax } },
12547 .{ .type = .u64, .kind = .{ .reg = .rcx } },12547 .unused,
12548 .unused,12548 .unused,
12549 .unused,12549 .unused,
12550 .unused,12550 .unused,
...@@ -12567,12 +12567,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12567,12 +12567,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12567 .{ ._, ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },12567 .{ ._, ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
12568 .{ ._, ._, .adc, .tmp5q, .lea(.tmp2q), ._, ._ },12568 .{ ._, ._, .adc, .tmp5q, .lea(.tmp2q), ._, ._ },
12569 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },12569 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
12570 .{ ._, ._, .lea, .tmp4p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },12570 .{ ._, ._, .lea, .tmp1p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },
12571 .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
12571 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },12572 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
12572 .{ ._, ._, .mov, .tmp6d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
12573 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },12573 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
12574 .{ ._, ._, .mov, .tmp6q, .ua(.src0, .add_smin), ._, ._ },12574 .{ ._, ._, .mov, .tmp4q, .ua(.src0, .add_smin), ._, ._ },
12575 .{ ._, ._, .xor, .tmp5q, .tmp6q, ._, ._ },12575 .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
12576 .{ .@"1:", ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },12576 .{ .@"1:", ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
12577 .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },12577 .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
12578 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },12578 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
...@@ -12634,12 +12634,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12634,12 +12634,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12634 },12634 },
12635 .extra_temps = .{12635 .extra_temps = .{
12636 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },12636 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12637 .{ .type = .usize, .kind = .{ .reg = .rdi } },
12637 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12638 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12638 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12639 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12639 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12640 .{ .type = .isize, .kind = .{ .reg = .rcx } },
12640 .{ .type = .isize, .kind = .{ .reg = .rdi } },
12641 .{ .type = .i64, .kind = .{ .reg = .rax } },12641 .{ .type = .i64, .kind = .{ .reg = .rax } },
12642 .{ .type = .u64, .kind = .{ .reg = .rcx } },12642 .unused,
12643 .unused,12643 .unused,
12644 .unused,12644 .unused,
12645 .unused,12645 .unused,
...@@ -12662,12 +12662,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12662,12 +12662,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12662 .{ ._, ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },12662 .{ ._, ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
12663 .{ ._, ._, .adc, .tmp5q, .lea(.tmp2q), ._, ._ },12663 .{ ._, ._, .adc, .tmp5q, .lea(.tmp2q), ._, ._ },
12664 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },12664 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
12665 .{ ._, ._, .lea, .tmp4p, .leaad(.tmp3, .sub_src0_elem_size, 16), ._, ._ },12665 .{ ._, ._, .lea, .tmp1p, .leaad(.tmp3, .sub_src0_elem_size, 16), ._, ._ },
12666 .{ ._, ._, .mov, .tmp4d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
12666 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },12667 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
12667 .{ ._, ._, .mov, .tmp6d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
12668 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },12668 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
12669 .{ ._, ._, .mov, .tmp6q, .ua(.src0, .add_smin), ._, ._ },12669 .{ ._, ._, .mov, .tmp4q, .ua(.src0, .add_smin), ._, ._ },
12670 .{ ._, ._, .xor, .tmp5q, .tmp6q, ._, ._ },12670 .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
12671 .{ .@"1:", ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },12671 .{ .@"1:", ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
12672 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },12672 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
12673 .{ ._, ._, .mov, .lead(.tmp3q, 8), .tmp5q, ._, ._ },12673 .{ ._, ._, .mov, .lead(.tmp3q, 8), .tmp5q, ._, ._ },
...@@ -12732,12 +12732,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12732,12 +12732,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12732 },12732 },
12733 .extra_temps = .{12733 .extra_temps = .{
12734 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },12734 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12735 .{ .type = .usize, .kind = .{ .reg = .rdi } },
12735 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12736 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12736 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12737 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12737 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12738 .{ .type = .isize, .kind = .{ .reg = .rcx } },
12738 .{ .type = .isize, .kind = .{ .reg = .rdi } },
12739 .{ .type = .i64, .kind = .{ .reg = .rax } },12739 .{ .type = .i64, .kind = .{ .reg = .rax } },
12740 .{ .type = .u64, .kind = .{ .reg = .rcx } },12740 .unused,
12741 .unused,12741 .unused,
12742 .unused,12742 .unused,
12743 .unused,12743 .unused,
...@@ -12760,12 +12760,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12760,12 +12760,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12760 .{ ._, ._l, .sa, .tmp5q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },12760 .{ ._, ._l, .sa, .tmp5q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
12761 .{ ._, ._, .add, .tmp5q, .tmp5q, ._, ._ },12761 .{ ._, ._, .add, .tmp5q, .tmp5q, ._, ._ },
12762 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },12762 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
12763 .{ ._, ._, .lea, .tmp4p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },12763 .{ ._, ._, .lea, .tmp1p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },
12764 .{ ._, ._, .mov, .tmp4d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
12764 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },12765 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
12765 .{ ._, ._, .mov, .tmp6d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
12766 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },12766 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
12767 .{ ._, ._, .mov, .tmp6q, .ua(.src0, .add_smin), ._, ._ },12767 .{ ._, ._, .mov, .tmp4q, .ua(.src0, .add_smin), ._, ._ },
12768 .{ ._, ._, .xor, .tmp5q, .tmp6q, ._, ._ },12768 .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
12769 .{ ._, ._, .mov, .lead(.tmp3q, -8), .tmp5q, ._, ._ },12769 .{ ._, ._, .mov, .lead(.tmp3q, -8), .tmp5q, ._, ._ },
12770 .{ .@"1:", ._r, .sa, .tmp5q, .ui(63), ._, ._ },12770 .{ .@"1:", ._r, .sa, .tmp5q, .ui(63), ._, ._ },
12771 .{ ._, ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },12771 .{ ._, ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
...@@ -12833,12 +12833,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12833,12 +12833,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12833 },12833 },
12834 .extra_temps = .{12834 .extra_temps = .{
12835 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },12835 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12836 .{ .type = .usize, .kind = .{ .reg = .rdi } },
12836 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12837 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12837 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12838 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12838 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },12839 .{ .type = .isize, .kind = .{ .reg = .rcx } },
12839 .{ .type = .isize, .kind = .{ .reg = .rdi } },
12840 .{ .type = .i64, .kind = .{ .reg = .rax } },12840 .{ .type = .i64, .kind = .{ .reg = .rax } },
12841 .{ .type = .u64, .kind = .{ .reg = .rcx } },12841 .unused,
12842 .unused,12842 .unused,
12843 .unused,12843 .unused,
12844 .unused,12844 .unused,
...@@ -12861,12 +12861,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12861,12 +12861,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12861 .{ ._, ._l, .sa, .tmp5q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },12861 .{ ._, ._l, .sa, .tmp5q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
12862 .{ ._, ._, .add, .tmp5q, .tmp5q, ._, ._ },12862 .{ ._, ._, .add, .tmp5q, .tmp5q, ._, ._ },
12863 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },12863 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
12864 .{ ._, ._, .lea, .tmp4p, .leaa(.tmp3, .sub_src0_elem_size), ._, ._ },12864 .{ ._, ._, .lea, .tmp1p, .leaa(.tmp3, .sub_src0_elem_size), ._, ._ },
12865 .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
12865 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },12866 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
12866 .{ ._, ._, .mov, .tmp6d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
12867 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },12867 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
12868 .{ ._, ._, .mov, .tmp6q, .ua(.src0, .add_smin), ._, ._ },12868 .{ ._, ._, .mov, .tmp4q, .ua(.src0, .add_smin), ._, ._ },
12869 .{ ._, ._, .xor, .tmp5q, .tmp6q, ._, ._ },12869 .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
12870 .{ ._, ._, .mov, .lead(.tmp3q, -8), .tmp5q, ._, ._ },12870 .{ ._, ._, .mov, .lead(.tmp3q, -8), .tmp5q, ._, ._ },
12871 .{ .@"1:", ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },12871 .{ .@"1:", ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
12872 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },12872 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
...@@ -14814,9 +14814,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14814,9 +14814,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14814 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);14814 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
14815 },14815 },
14816 .sub_safe => unreachable,14816 .sub_safe => unreachable,
14817 .sub_sat => |air_tag| if (use_old) try cg.airSubSat(inst) else fallback: {14817 .sub_sat => |air_tag| if (use_old) try cg.airSubSat(inst) else {
14818 const bin_op = air_datas[@intFromEnum(inst)].bin_op;14818 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
14819 if (cg.typeOf(bin_op.lhs).isVector(zcu)) break :fallback try cg.airSubSat(inst);
14820 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });14819 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
14821 var res: [1]Temp = undefined;14820 var res: [1]Temp = undefined;
14822 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{14821 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
...@@ -14829,6 +14828,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -14829,6 +14828,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
14829 }, .{14828 }, .{
14830 .src_constraints = .{ .{ .exact_int = 1 }, .{ .exact_int = 1 }, .any },14829 .src_constraints = .{ .{ .exact_int = 1 }, .{ .exact_int = 1 }, .any },
14831 .patterns = &.{14830 .patterns = &.{
14831 .{ .src = .{ .{ .imm = 0 }, .to_mut_gpr, .none } },
14832 .{ .src = .{ .any, .imm8, .none } },14832 .{ .src = .{ .any, .imm8, .none } },
14833 },14833 },
14834 .dst_temps = .{ .{ .imm = 0 }, .unused },14834 .dst_temps = .{ .{ .imm = 0 }, .unused },
...@@ -16517,6 +16517,5125 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -16517,6 +16517,5125 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
16517 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },16517 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
16518 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },16518 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
16519 } },16519 } },
16520 }, .{
16521 .required_features = .{ .mmx, null, null, null },
16522 .src_constraints = .{
16523 .{ .scalar_exact_int = .{ .of = .qword, .is = 1 } },
16524 .{ .scalar_exact_int = .{ .of = .qword, .is = 1 } },
16525 .any,
16526 },
16527 .patterns = &.{
16528 .{ .src = .{ .mem, .to_mut_mmx, .none } },
16529 .{ .src = .{ .to_mmx, .to_mut_mmx, .none } },
16530 },
16531 .dst_temps = .{ .{ .ref = .src1 }, .unused },
16532 .each = .{ .once = &.{
16533 .{ ._, .p_, .andn, .dst0q, .src0q, ._, ._ },
16534 } },
16535 }, .{
16536 .required_features = .{ .avx, null, null, null },
16537 .src_constraints = .{
16538 .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
16539 .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
16540 .any,
16541 },
16542 .patterns = &.{
16543 .{ .src = .{ .mem, .to_sse, .none } },
16544 .{ .src = .{ .to_sse, .to_sse, .none } },
16545 },
16546 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16547 .each = .{ .once = &.{
16548 .{ ._, .vp_, .andn, .dst0x, .src1x, .src0x, ._ },
16549 } },
16550 }, .{
16551 .required_features = .{ .sse2, null, null, null },
16552 .src_constraints = .{
16553 .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
16554 .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
16555 .any,
16556 },
16557 .patterns = &.{
16558 .{ .src = .{ .mem, .to_mut_sse, .none } },
16559 .{ .src = .{ .to_sse, .to_mut_sse, .none } },
16560 },
16561 .dst_temps = .{ .{ .ref = .src1 }, .unused },
16562 .each = .{ .once = &.{
16563 .{ ._, .p_, .andn, .dst0x, .src0x, ._, ._ },
16564 } },
16565 }, .{
16566 .required_features = .{ .sse, null, null, null },
16567 .src_constraints = .{
16568 .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
16569 .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
16570 .any,
16571 },
16572 .patterns = &.{
16573 .{ .src = .{ .mem, .to_mut_sse, .none } },
16574 .{ .src = .{ .to_sse, .to_mut_sse, .none } },
16575 },
16576 .dst_temps = .{ .{ .ref = .src1 }, .unused },
16577 .each = .{ .once = &.{
16578 .{ ._, ._ps, .andn, .dst0x, .src0x, ._, ._ },
16579 } },
16580 }, .{
16581 .required_features = .{ .avx2, null, null, null },
16582 .src_constraints = .{
16583 .{ .scalar_exact_int = .{ .of = .yword, .is = 1 } },
16584 .{ .scalar_exact_int = .{ .of = .yword, .is = 1 } },
16585 .any,
16586 },
16587 .patterns = &.{
16588 .{ .src = .{ .mem, .to_sse, .none } },
16589 .{ .src = .{ .to_sse, .to_sse, .none } },
16590 },
16591 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16592 .each = .{ .once = &.{
16593 .{ ._, .vp_, .andn, .dst0y, .src1y, .src0y, ._ },
16594 } },
16595 }, .{
16596 .required_features = .{ .mmx, null, null, null },
16597 .src_constraints = .{
16598 .{ .scalar_exact_signed_int = .{ .of = .qword, .is = 8 } },
16599 .{ .scalar_exact_signed_int = .{ .of = .qword, .is = 8 } },
16600 .any,
16601 },
16602 .patterns = &.{
16603 .{ .src = .{ .to_mut_mmx, .mem, .none } },
16604 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
16605 },
16606 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16607 .each = .{ .once = &.{
16608 .{ ._, .p_b, .subs, .dst0q, .src1q, ._, ._ },
16609 } },
16610 }, .{
16611 .required_features = .{ .avx, null, null, null },
16612 .src_constraints = .{
16613 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
16614 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
16615 .any,
16616 },
16617 .patterns = &.{
16618 .{ .src = .{ .to_sse, .mem, .none } },
16619 .{ .src = .{ .to_sse, .to_sse, .none } },
16620 },
16621 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16622 .each = .{ .once = &.{
16623 .{ ._, .vp_b, .subs, .dst0x, .src0x, .src1x, ._ },
16624 } },
16625 }, .{
16626 .required_features = .{ .sse2, null, null, null },
16627 .src_constraints = .{
16628 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
16629 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
16630 .any,
16631 },
16632 .patterns = &.{
16633 .{ .src = .{ .to_mut_sse, .mem, .none } },
16634 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
16635 },
16636 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16637 .each = .{ .once = &.{
16638 .{ ._, .p_b, .subs, .dst0x, .src1x, ._, ._ },
16639 } },
16640 }, .{
16641 .required_features = .{ .avx2, null, null, null },
16642 .src_constraints = .{
16643 .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 8 } },
16644 .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 8 } },
16645 .any,
16646 },
16647 .patterns = &.{
16648 .{ .src = .{ .to_sse, .mem, .none } },
16649 .{ .src = .{ .to_sse, .to_sse, .none } },
16650 },
16651 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16652 .each = .{ .once = &.{
16653 .{ ._, .vp_b, .subs, .dst0y, .src0y, .src1y, ._ },
16654 } },
16655 }, .{
16656 .required_features = .{ .avx, null, null, null },
16657 .src_constraints = .{
16658 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
16659 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
16660 .any,
16661 },
16662 .patterns = &.{
16663 .{ .src = .{ .to_sse, .mem, .none } },
16664 .{ .src = .{ .to_sse, .to_sse, .none } },
16665 },
16666 .extra_temps = .{
16667 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16668 .{ .type = .vector_16_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16669 .{ .type = .vector_16_i8, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16670 .unused,
16671 .unused,
16672 .unused,
16673 .unused,
16674 .unused,
16675 .unused,
16676 .unused,
16677 .unused,
16678 },
16679 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16680 .each = .{ .once = &.{
16681 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
16682 .{ ._, .vp_b, .sub, .dst0x, .src0x, .src1x, ._ },
16683 .{ ._, .vp_b, .maxs, .dst0x, .dst0x, .lea(.tmp0x), ._ },
16684 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
16685 .{ ._, .vp_b, .mins, .dst0x, .dst0x, .lea(.tmp0x), ._ },
16686 } },
16687 }, .{
16688 .required_features = .{ .sse4_1, null, null, null },
16689 .src_constraints = .{
16690 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
16691 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
16692 .any,
16693 },
16694 .patterns = &.{
16695 .{ .src = .{ .to_mut_sse, .mem, .none } },
16696 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
16697 },
16698 .extra_temps = .{
16699 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16700 .{ .type = .vector_16_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16701 .{ .type = .vector_16_i8, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16702 .unused,
16703 .unused,
16704 .unused,
16705 .unused,
16706 .unused,
16707 .unused,
16708 .unused,
16709 .unused,
16710 },
16711 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16712 .each = .{ .once = &.{
16713 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
16714 .{ ._, .p_b, .sub, .dst0x, .src1x, ._, ._ },
16715 .{ ._, .p_b, .maxs, .dst0x, .lea(.tmp0x), ._, ._ },
16716 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
16717 .{ ._, .p_b, .mins, .dst0x, .lea(.tmp0x), ._, ._ },
16718 } },
16719 }, .{
16720 .required_features = .{ .sse2, null, null, null },
16721 .src_constraints = .{
16722 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
16723 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
16724 .any,
16725 },
16726 .patterns = &.{
16727 .{ .src = .{ .to_mut_sse, .mem, .none } },
16728 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
16729 },
16730 .extra_temps = .{
16731 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16732 .{ .type = .vector_16_i8, .kind = .{ .slimit_delta_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16733 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
16734 .unused,
16735 .unused,
16736 .unused,
16737 .unused,
16738 .unused,
16739 .unused,
16740 .unused,
16741 .unused,
16742 },
16743 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16744 .each = .{ .once = &.{
16745 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
16746 .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
16747 .{ ._, .p_b, .sub, .dst0x, .tmp2x, ._, ._ },
16748 .{ ._, .p_b, .subs, .dst0x, .src1x, ._, ._ },
16749 .{ ._, .p_b, .add, .dst0x, .tmp2x, ._, ._ },
16750 .{ ._, .p_b, .adds, .dst0x, .tmp2x, ._, ._ },
16751 .{ ._, .p_b, .sub, .dst0x, .tmp2x, ._, ._ },
16752 } },
16753 }, .{
16754 .required_features = .{ .avx2, null, null, null },
16755 .src_constraints = .{
16756 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
16757 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
16758 .any,
16759 },
16760 .patterns = &.{
16761 .{ .src = .{ .to_sse, .mem, .none } },
16762 .{ .src = .{ .to_sse, .to_sse, .none } },
16763 },
16764 .extra_temps = .{
16765 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16766 .{ .type = .vector_32_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
16767 .{ .type = .vector_32_i8, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
16768 .unused,
16769 .unused,
16770 .unused,
16771 .unused,
16772 .unused,
16773 .unused,
16774 .unused,
16775 .unused,
16776 },
16777 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16778 .each = .{ .once = &.{
16779 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
16780 .{ ._, .vp_b, .sub, .dst0y, .src0y, .src1y, ._ },
16781 .{ ._, .vp_b, .maxs, .dst0y, .dst0y, .lea(.tmp0y), ._ },
16782 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
16783 .{ ._, .vp_b, .mins, .dst0y, .dst0y, .lea(.tmp0y), ._ },
16784 } },
16785 }, .{
16786 .required_features = .{ .mmx, null, null, null },
16787 .src_constraints = .{
16788 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
16789 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
16790 .any,
16791 },
16792 .patterns = &.{
16793 .{ .src = .{ .to_mut_mmx, .mem, .none } },
16794 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
16795 },
16796 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16797 .each = .{ .once = &.{
16798 .{ ._, .p_b, .subus, .dst0q, .src1q, ._, ._ },
16799 } },
16800 }, .{
16801 .required_features = .{ .avx, null, null, null },
16802 .src_constraints = .{
16803 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
16804 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
16805 .any,
16806 },
16807 .patterns = &.{
16808 .{ .src = .{ .to_sse, .mem, .none } },
16809 .{ .src = .{ .to_sse, .to_sse, .none } },
16810 },
16811 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16812 .each = .{ .once = &.{
16813 .{ ._, .vp_b, .subus, .dst0x, .src0x, .src1x, ._ },
16814 } },
16815 }, .{
16816 .required_features = .{ .sse2, null, null, null },
16817 .src_constraints = .{
16818 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
16819 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
16820 .any,
16821 },
16822 .patterns = &.{
16823 .{ .src = .{ .to_mut_sse, .mem, .none } },
16824 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
16825 },
16826 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16827 .each = .{ .once = &.{
16828 .{ ._, .p_b, .subus, .dst0x, .src1x, ._, ._ },
16829 } },
16830 }, .{
16831 .required_features = .{ .avx2, null, null, null },
16832 .src_constraints = .{
16833 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
16834 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
16835 .any,
16836 },
16837 .patterns = &.{
16838 .{ .src = .{ .to_sse, .mem, .none } },
16839 .{ .src = .{ .to_sse, .to_sse, .none } },
16840 },
16841 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16842 .each = .{ .once = &.{
16843 .{ ._, .vp_b, .subus, .dst0y, .src0y, .src1y, ._ },
16844 } },
16845 }, .{
16846 .required_features = .{ .mmx, null, null, null },
16847 .src_constraints = .{
16848 .{ .scalar_exact_signed_int = .{ .of = .qword, .is = 16 } },
16849 .{ .scalar_exact_signed_int = .{ .of = .qword, .is = 16 } },
16850 .any,
16851 },
16852 .patterns = &.{
16853 .{ .src = .{ .to_mut_mmx, .mem, .none } },
16854 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
16855 },
16856 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16857 .each = .{ .once = &.{
16858 .{ ._, .p_w, .subs, .dst0q, .src1q, ._, ._ },
16859 } },
16860 }, .{
16861 .required_features = .{ .avx, null, null, null },
16862 .src_constraints = .{
16863 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
16864 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
16865 .any,
16866 },
16867 .patterns = &.{
16868 .{ .src = .{ .to_sse, .mem, .none } },
16869 .{ .src = .{ .to_sse, .to_sse, .none } },
16870 },
16871 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16872 .each = .{ .once = &.{
16873 .{ ._, .vp_w, .subs, .dst0x, .src0x, .src1x, ._ },
16874 } },
16875 }, .{
16876 .required_features = .{ .sse2, null, null, null },
16877 .src_constraints = .{
16878 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
16879 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
16880 .any,
16881 },
16882 .patterns = &.{
16883 .{ .src = .{ .to_mut_sse, .mem, .none } },
16884 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
16885 },
16886 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16887 .each = .{ .once = &.{
16888 .{ ._, .p_w, .subs, .dst0x, .src1x, ._, ._ },
16889 } },
16890 }, .{
16891 .required_features = .{ .avx2, null, null, null },
16892 .src_constraints = .{
16893 .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 16 } },
16894 .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 16 } },
16895 .any,
16896 },
16897 .patterns = &.{
16898 .{ .src = .{ .to_sse, .mem, .none } },
16899 .{ .src = .{ .to_sse, .to_sse, .none } },
16900 },
16901 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16902 .each = .{ .once = &.{
16903 .{ ._, .vp_w, .subs, .dst0y, .src0y, .src1y, ._ },
16904 } },
16905 }, .{
16906 .required_features = .{ .sse, .mmx, null, null },
16907 .src_constraints = .{
16908 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
16909 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
16910 .any,
16911 },
16912 .patterns = &.{
16913 .{ .src = .{ .to_mut_mmx, .mem, .none } },
16914 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
16915 },
16916 .extra_temps = .{
16917 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16918 .{ .type = .vector_4_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .qword } } },
16919 .{ .type = .vector_4_i16, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .qword } } },
16920 .unused,
16921 .unused,
16922 .unused,
16923 .unused,
16924 .unused,
16925 .unused,
16926 .unused,
16927 .unused,
16928 },
16929 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16930 .each = .{ .once = &.{
16931 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
16932 .{ ._, .p_w, .sub, .dst0q, .src1q, ._, ._ },
16933 .{ ._, .p_w, .maxs, .dst0q, .lea(.tmp0q), ._, ._ },
16934 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
16935 .{ ._, .p_w, .mins, .dst0q, .lea(.tmp0q), ._, ._ },
16936 } },
16937 }, .{
16938 .required_features = .{ .avx, null, null, null },
16939 .src_constraints = .{
16940 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
16941 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
16942 .any,
16943 },
16944 .patterns = &.{
16945 .{ .src = .{ .to_sse, .mem, .none } },
16946 .{ .src = .{ .to_sse, .to_sse, .none } },
16947 },
16948 .extra_temps = .{
16949 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16950 .{ .type = .vector_8_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16951 .{ .type = .vector_8_i16, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16952 .unused,
16953 .unused,
16954 .unused,
16955 .unused,
16956 .unused,
16957 .unused,
16958 .unused,
16959 .unused,
16960 },
16961 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
16962 .each = .{ .once = &.{
16963 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
16964 .{ ._, .vp_w, .sub, .dst0x, .src0x, .src1x, ._ },
16965 .{ ._, .vp_w, .maxs, .dst0x, .dst0x, .lea(.tmp0x), ._ },
16966 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
16967 .{ ._, .vp_w, .mins, .dst0x, .dst0x, .lea(.tmp0x), ._ },
16968 } },
16969 }, .{
16970 .required_features = .{ .sse4_1, null, null, null },
16971 .src_constraints = .{
16972 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
16973 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
16974 .any,
16975 },
16976 .patterns = &.{
16977 .{ .src = .{ .to_mut_sse, .mem, .none } },
16978 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
16979 },
16980 .extra_temps = .{
16981 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16982 .{ .type = .vector_8_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16983 .{ .type = .vector_8_i16, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
16984 .unused,
16985 .unused,
16986 .unused,
16987 .unused,
16988 .unused,
16989 .unused,
16990 .unused,
16991 .unused,
16992 },
16993 .dst_temps = .{ .{ .ref = .src0 }, .unused },
16994 .each = .{ .once = &.{
16995 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
16996 .{ ._, .p_w, .sub, .dst0x, .src1x, ._, ._ },
16997 .{ ._, .p_w, .maxs, .dst0x, .lea(.tmp0x), ._, ._ },
16998 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
16999 .{ ._, .p_w, .mins, .dst0x, .lea(.tmp0x), ._, ._ },
17000 } },
17001 }, .{
17002 .required_features = .{ .avx2, null, null, null },
17003 .src_constraints = .{
17004 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
17005 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
17006 .any,
17007 },
17008 .patterns = &.{
17009 .{ .src = .{ .to_sse, .mem, .none } },
17010 .{ .src = .{ .to_sse, .to_sse, .none } },
17011 },
17012 .extra_temps = .{
17013 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17014 .{ .type = .vector_16_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17015 .{ .type = .vector_16_i16, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17016 .unused,
17017 .unused,
17018 .unused,
17019 .unused,
17020 .unused,
17021 .unused,
17022 .unused,
17023 .unused,
17024 },
17025 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17026 .each = .{ .once = &.{
17027 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17028 .{ ._, .vp_w, .sub, .dst0y, .src0y, .src1y, ._ },
17029 .{ ._, .vp_w, .maxs, .dst0y, .dst0y, .lea(.tmp0y), ._ },
17030 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
17031 .{ ._, .vp_w, .mins, .dst0y, .dst0y, .lea(.tmp0y), ._ },
17032 } },
17033 }, .{
17034 .required_features = .{ .mmx, null, null, null },
17035 .src_constraints = .{
17036 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } },
17037 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } },
17038 .any,
17039 },
17040 .patterns = &.{
17041 .{ .src = .{ .to_mut_mmx, .mem, .none } },
17042 .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
17043 },
17044 .dst_temps = .{ .{ .ref = .src0 }, .unused },
17045 .each = .{ .once = &.{
17046 .{ ._, .p_w, .subus, .dst0q, .src1q, ._, ._ },
17047 } },
17048 }, .{
17049 .required_features = .{ .avx, null, null, null },
17050 .src_constraints = .{
17051 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
17052 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
17053 .any,
17054 },
17055 .patterns = &.{
17056 .{ .src = .{ .to_sse, .mem, .none } },
17057 .{ .src = .{ .to_sse, .to_sse, .none } },
17058 },
17059 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17060 .each = .{ .once = &.{
17061 .{ ._, .vp_w, .subus, .dst0x, .src0x, .src1x, ._ },
17062 } },
17063 }, .{
17064 .required_features = .{ .sse2, null, null, null },
17065 .src_constraints = .{
17066 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
17067 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
17068 .any,
17069 },
17070 .patterns = &.{
17071 .{ .src = .{ .to_mut_sse, .mem, .none } },
17072 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
17073 },
17074 .dst_temps = .{ .{ .ref = .src0 }, .unused },
17075 .each = .{ .once = &.{
17076 .{ ._, .p_w, .subus, .dst0x, .src1x, ._, ._ },
17077 } },
17078 }, .{
17079 .required_features = .{ .avx2, null, null, null },
17080 .src_constraints = .{
17081 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
17082 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
17083 .any,
17084 },
17085 .patterns = &.{
17086 .{ .src = .{ .to_sse, .mem, .none } },
17087 .{ .src = .{ .to_sse, .to_sse, .none } },
17088 },
17089 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17090 .each = .{ .once = &.{
17091 .{ ._, .vp_w, .subus, .dst0y, .src0y, .src1y, ._ },
17092 } },
17093 }, .{
17094 .required_features = .{ .avx, null, null, null },
17095 .src_constraints = .{
17096 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
17097 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
17098 .any,
17099 },
17100 .patterns = &.{
17101 .{ .src = .{ .to_sse, .to_sse, .none } },
17102 },
17103 .extra_temps = .{
17104 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17105 .{ .type = .vector_4_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17106 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
17107 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
17108 .unused,
17109 .unused,
17110 .unused,
17111 .unused,
17112 .unused,
17113 .unused,
17114 .unused,
17115 },
17116 .dst_temps = .{ .{ .rc = .sse }, .unused },
17117 .each = .{ .once = &.{
17118 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17119 .{ ._, .vp_d, .sub, .dst0x, .src0x, .src1x, ._ },
17120 .{ ._, .vp_d, .sra, .tmp2x, .src0x, .ui(31), ._ },
17121 .{ ._, .vp_d, .cmpgt, .tmp3x, .dst0x, .src0x, ._ },
17122 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .lea(.tmp0x), ._ },
17123 .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .src1x, ._ },
17124 .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
17125 } },
17126 }, .{
17127 .required_features = .{ .sse4_1, null, null, null },
17128 .src_constraints = .{
17129 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
17130 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
17131 .any,
17132 },
17133 .patterns = &.{
17134 .{ .src = .{ .to_sse, .to_sse, .none } },
17135 },
17136 .extra_temps = .{
17137 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17138 .{ .type = .vector_4_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17139 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
17140 .{ .type = .vector_4_i32, .kind = .{ .reg = .xmm0 } },
17141 .unused,
17142 .unused,
17143 .unused,
17144 .unused,
17145 .unused,
17146 .unused,
17147 .unused,
17148 },
17149 .dst_temps = .{ .{ .rc = .sse }, .unused },
17150 .each = .{ .once = &.{
17151 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17152 .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
17153 .{ ._, .p_d, .sub, .dst0x, .src1x, ._, ._ },
17154 .{ ._, ._dqa, .mov, .tmp2x, .src0x, ._, ._ },
17155 .{ ._, .p_d, .sra, .tmp2x, .ui(31), ._, ._ },
17156 .{ ._, ._dqa, .mov, .tmp3x, .dst0x, ._, ._ },
17157 .{ ._, .p_d, .cmpgt, .tmp3x, .src0x, ._, ._ },
17158 .{ ._, .p_, .xor, .tmp2x, .lea(.tmp0x), ._, ._ },
17159 .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },
17160 .{ ._, ._ps, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
17161 } },
17162 }, .{
17163 .required_features = .{ .avx2, null, null, null },
17164 .src_constraints = .{
17165 .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 32 } },
17166 .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 32 } },
17167 .any,
17168 },
17169 .patterns = &.{
17170 .{ .src = .{ .to_sse, .to_sse, .none } },
17171 },
17172 .extra_temps = .{
17173 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17174 .{ .type = .vector_8_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17175 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
17176 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
17177 .unused,
17178 .unused,
17179 .unused,
17180 .unused,
17181 .unused,
17182 .unused,
17183 .unused,
17184 },
17185 .dst_temps = .{ .{ .rc = .sse }, .unused },
17186 .each = .{ .once = &.{
17187 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17188 .{ ._, .vp_d, .sub, .dst0y, .src0y, .src1y, ._ },
17189 .{ ._, .vp_d, .sra, .tmp2y, .src0y, .ui(31), ._ },
17190 .{ ._, .vp_d, .cmpgt, .tmp3y, .dst0y, .src0y, ._ },
17191 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .lea(.tmp0y), ._ },
17192 .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .src1y, ._ },
17193 .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp2y, .tmp3y },
17194 } },
17195 }, .{
17196 .required_features = .{ .avx, null, null, null },
17197 .src_constraints = .{
17198 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
17199 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
17200 .any,
17201 },
17202 .patterns = &.{
17203 .{ .src = .{ .to_sse, .mem, .none } },
17204 .{ .src = .{ .to_sse, .to_sse, .none } },
17205 },
17206 .extra_temps = .{
17207 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17208 .{ .type = .vector_4_i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17209 .{ .type = .vector_4_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17210 .unused,
17211 .unused,
17212 .unused,
17213 .unused,
17214 .unused,
17215 .unused,
17216 .unused,
17217 .unused,
17218 },
17219 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17220 .each = .{ .once = &.{
17221 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17222 .{ ._, .vp_d, .sub, .dst0x, .src0x, .src1x, ._ },
17223 .{ ._, .vp_d, .maxs, .dst0x, .dst0x, .lea(.tmp0x), ._ },
17224 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
17225 .{ ._, .vp_d, .mins, .dst0x, .dst0x, .lea(.tmp0x), ._ },
17226 } },
17227 }, .{
17228 .required_features = .{ .sse4_1, null, null, null },
17229 .src_constraints = .{
17230 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
17231 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
17232 .any,
17233 },
17234 .patterns = &.{
17235 .{ .src = .{ .to_mut_sse, .mem, .none } },
17236 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
17237 },
17238 .extra_temps = .{
17239 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17240 .{ .type = .vector_4_i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17241 .{ .type = .vector_4_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17242 .unused,
17243 .unused,
17244 .unused,
17245 .unused,
17246 .unused,
17247 .unused,
17248 .unused,
17249 .unused,
17250 },
17251 .dst_temps = .{ .{ .ref = .src0 }, .unused },
17252 .each = .{ .once = &.{
17253 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17254 .{ ._, .p_d, .sub, .dst0x, .src1x, ._, ._ },
17255 .{ ._, .p_d, .maxs, .dst0x, .lea(.tmp0x), ._, ._ },
17256 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
17257 .{ ._, .p_d, .mins, .dst0x, .lea(.tmp0x), ._, ._ },
17258 } },
17259 }, .{
17260 .required_features = .{ .avx2, null, null, null },
17261 .src_constraints = .{
17262 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
17263 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
17264 .any,
17265 },
17266 .patterns = &.{
17267 .{ .src = .{ .to_sse, .mem, .none } },
17268 .{ .src = .{ .to_sse, .to_sse, .none } },
17269 },
17270 .extra_temps = .{
17271 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17272 .{ .type = .vector_8_i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17273 .{ .type = .vector_8_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17274 .unused,
17275 .unused,
17276 .unused,
17277 .unused,
17278 .unused,
17279 .unused,
17280 .unused,
17281 .unused,
17282 },
17283 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17284 .each = .{ .once = &.{
17285 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17286 .{ ._, .vp_d, .sub, .dst0y, .src0y, .src1y, ._ },
17287 .{ ._, .vp_d, .maxs, .dst0y, .dst0y, .lea(.tmp0y), ._ },
17288 .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
17289 .{ ._, .vp_d, .mins, .dst0y, .dst0y, .lea(.tmp0y), ._ },
17290 } },
17291 }, .{
17292 .required_features = .{ .avx, null, null, null },
17293 .src_constraints = .{
17294 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
17295 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
17296 .any,
17297 },
17298 .patterns = &.{
17299 .{ .src = .{ .mem, .to_sse, .none } },
17300 .{ .src = .{ .to_sse, .to_sse, .none } },
17301 },
17302 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17303 .each = .{ .once = &.{
17304 .{ ._, .vp_d, .maxu, .dst0x, .src1x, .src0x, ._ },
17305 .{ ._, .vp_d, .sub, .dst0x, .dst0x, .src1x, ._ },
17306 } },
17307 }, .{
17308 .required_features = .{ .sse4_1, null, null, null },
17309 .src_constraints = .{
17310 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
17311 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
17312 .any,
17313 },
17314 .patterns = &.{
17315 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
17316 },
17317 .dst_temps = .{ .{ .ref = .src0 }, .unused },
17318 .each = .{ .once = &.{
17319 .{ ._, .p_d, .maxu, .src0x, .src1x, ._, ._ },
17320 .{ ._, .p_d, .sub, .dst0x, .src1x, ._, ._ },
17321 } },
17322 }, .{
17323 .required_features = .{ .avx2, null, null, null },
17324 .src_constraints = .{
17325 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
17326 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
17327 .any,
17328 },
17329 .patterns = &.{
17330 .{ .src = .{ .mem, .to_sse, .none } },
17331 .{ .src = .{ .to_sse, .to_sse, .none } },
17332 },
17333 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17334 .each = .{ .once = &.{
17335 .{ ._, .vp_d, .maxu, .dst0y, .src1y, .src0y, ._ },
17336 .{ ._, .vp_d, .sub, .dst0y, .dst0y, .src1y, ._ },
17337 } },
17338 }, .{
17339 .required_features = .{ .avx, null, null, null },
17340 .src_constraints = .{
17341 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
17342 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
17343 .any,
17344 },
17345 .patterns = &.{
17346 .{ .src = .{ .to_sse, .to_sse, .none } },
17347 },
17348 .extra_temps = .{
17349 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17350 .{ .type = .vector_2_i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17351 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17352 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17353 .unused,
17354 .unused,
17355 .unused,
17356 .unused,
17357 .unused,
17358 .unused,
17359 .unused,
17360 },
17361 .dst_temps = .{ .{ .rc = .sse }, .unused },
17362 .each = .{ .once = &.{
17363 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17364 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
17365 .{ ._, .vp_q, .sub, .dst0x, .src0x, .src1x, ._ },
17366 .{ ._, .vp_q, .cmpgt, .tmp2x, .tmp2x, .src0x, ._ },
17367 .{ ._, .vp_q, .cmpgt, .tmp3x, .dst0x, .src0x, ._ },
17368 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .lea(.tmp0x), ._ },
17369 .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .src1x, ._ },
17370 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
17371 } },
17372 }, .{
17373 .required_features = .{ .sse4_2, null, null, null },
17374 .src_constraints = .{
17375 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
17376 .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
17377 .any,
17378 },
17379 .patterns = &.{
17380 .{ .src = .{ .to_sse, .to_sse, .none } },
17381 },
17382 .extra_temps = .{
17383 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17384 .{ .type = .vector_2_i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17385 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17386 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
17387 .unused,
17388 .unused,
17389 .unused,
17390 .unused,
17391 .unused,
17392 .unused,
17393 .unused,
17394 },
17395 .dst_temps = .{ .{ .rc = .sse }, .unused },
17396 .each = .{ .once = &.{
17397 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17398 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
17399 .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
17400 .{ ._, .p_q, .sub, .dst0x, .src1x, ._, ._ },
17401 .{ ._, .p_q, .cmpgt, .tmp2x, .src0x, ._, ._ },
17402 .{ ._, ._dqa, .mov, .tmp3x, .dst0x, ._, ._ },
17403 .{ ._, .p_q, .cmpgt, .tmp3x, .src0x, ._, ._ },
17404 .{ ._, .p_, .xor, .tmp2x, .lea(.tmp0x), ._, ._ },
17405 .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },
17406 .{ ._, ._pd, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
17407 } },
17408 }, .{
17409 .required_features = .{ .avx2, null, null, null },
17410 .src_constraints = .{
17411 .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 64 } },
17412 .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 64 } },
17413 .any,
17414 },
17415 .patterns = &.{
17416 .{ .src = .{ .to_sse, .to_sse, .none } },
17417 },
17418 .extra_temps = .{
17419 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17420 .{ .type = .vector_4_i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17421 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
17422 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
17423 .unused,
17424 .unused,
17425 .unused,
17426 .unused,
17427 .unused,
17428 .unused,
17429 .unused,
17430 },
17431 .dst_temps = .{ .{ .rc = .sse }, .unused },
17432 .each = .{ .once = &.{
17433 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17434 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .tmp2y, ._ },
17435 .{ ._, .vp_q, .sub, .dst0y, .src0y, .src1y, ._ },
17436 .{ ._, .vp_q, .cmpgt, .tmp2y, .tmp2y, .src0y, ._ },
17437 .{ ._, .vp_q, .cmpgt, .tmp3y, .dst0y, .src0y, ._ },
17438 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .lea(.tmp0y), ._ },
17439 .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .src1y, ._ },
17440 .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .tmp2y, .tmp3y },
17441 } },
17442 }, .{
17443 .required_features = .{ .avx2, null, null, null },
17444 .src_constraints = .{
17445 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
17446 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
17447 .any,
17448 },
17449 .patterns = &.{
17450 .{ .src = .{ .to_sse, .mem, .none } },
17451 .{ .src = .{ .to_sse, .to_sse, .none } },
17452 },
17453 .extra_temps = .{
17454 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17455 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
17456 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17457 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17458 .unused,
17459 .unused,
17460 .unused,
17461 .unused,
17462 .unused,
17463 .unused,
17464 .unused,
17465 },
17466 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17467 .each = .{ .once = &.{
17468 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17469 .{ ._, .vp_q, .broadcast, .tmp2x, .lea(.tmp0q), ._, ._ },
17470 .{ ._, .vp_q, .sub, .dst0x, .src0x, .src1x, ._ },
17471 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp2x, .dst0x, ._ },
17472 .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
17473 .{ ._, .vp_q, .cmpeq, .tmp3x, .tmp3x, .tmp3x, ._ },
17474 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp3x, ._ },
17475 .{ ._, .vp_q, .cmpgt, .tmp3x, .dst0x, .tmp2x, ._ },
17476 .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
17477 } },
17478 }, .{
17479 .required_features = .{ .avx, null, null, null },
17480 .src_constraints = .{
17481 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
17482 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
17483 .any,
17484 },
17485 .patterns = &.{
17486 .{ .src = .{ .to_sse, .mem, .none } },
17487 .{ .src = .{ .to_sse, .to_sse, .none } },
17488 },
17489 .extra_temps = .{
17490 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17491 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
17492 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17493 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17494 .unused,
17495 .unused,
17496 .unused,
17497 .unused,
17498 .unused,
17499 .unused,
17500 .unused,
17501 },
17502 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17503 .each = .{ .once = &.{
17504 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17505 .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
17506 .{ ._, .vp_q, .sub, .dst0x, .src0x, .src1x, ._ },
17507 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp2x, .dst0x, ._ },
17508 .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
17509 .{ ._, .vp_q, .cmpeq, .tmp3x, .tmp3x, .tmp3x, ._ },
17510 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp3x, ._ },
17511 .{ ._, .vp_q, .cmpgt, .tmp3x, .dst0x, .tmp2x, ._ },
17512 .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
17513 } },
17514 }, .{
17515 .required_features = .{ .sse4_2, null, null, null },
17516 .src_constraints = .{
17517 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
17518 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
17519 .any,
17520 },
17521 .patterns = &.{
17522 .{ .src = .{ .to_mut_sse, .mem, .none } },
17523 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
17524 },
17525 .extra_temps = .{
17526 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17527 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
17528 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17529 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
17530 .unused,
17531 .unused,
17532 .unused,
17533 .unused,
17534 .unused,
17535 .unused,
17536 .unused,
17537 },
17538 .dst_temps = .{ .{ .ref = .src0 }, .unused },
17539 .each = .{ .once = &.{
17540 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17541 .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
17542 .{ ._, .p_q, .sub, .dst0x, .src1x, ._, ._ },
17543 .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
17544 .{ ._, .p_q, .cmpgt, .tmp3x, .dst0x, ._, ._ },
17545 .{ ._, .p_b, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
17546 .{ ._, .p_q, .cmpeq, .tmp3x, .tmp3x, ._, ._ },
17547 .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
17548 .{ ._, ._dqa, .mov, .tmp3x, .dst0x, ._, ._ },
17549 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
17550 .{ ._, .p_b, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
17551 } },
17552 }, .{
17553 .required_features = .{ .avx2, null, null, null },
17554 .src_constraints = .{
17555 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
17556 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
17557 .any,
17558 },
17559 .patterns = &.{
17560 .{ .src = .{ .to_sse, .mem, .none } },
17561 .{ .src = .{ .to_sse, .to_sse, .none } },
17562 },
17563 .extra_temps = .{
17564 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17565 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
17566 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
17567 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
17568 .unused,
17569 .unused,
17570 .unused,
17571 .unused,
17572 .unused,
17573 .unused,
17574 .unused,
17575 },
17576 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17577 .each = .{ .once = &.{
17578 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17579 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
17580 .{ ._, .vp_q, .sub, .dst0y, .src0y, .src1y, ._ },
17581 .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp2y, .dst0y, ._ },
17582 .{ ._, .vp_b, .blendv, .dst0y, .dst0y, .tmp2y, .tmp3y },
17583 .{ ._, .vp_q, .cmpeq, .tmp3y, .tmp3y, .tmp3y, ._ },
17584 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .tmp3y, ._ },
17585 .{ ._, .vp_q, .cmpgt, .tmp3y, .dst0y, .tmp2y, ._ },
17586 .{ ._, .vp_b, .blendv, .dst0y, .dst0y, .tmp2y, .tmp3y },
17587 } },
17588 }, .{
17589 .required_features = .{ .avx2, null, null, null },
17590 .src_constraints = .{
17591 .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
17592 .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
17593 .any,
17594 },
17595 .patterns = &.{
17596 .{ .src = .{ .to_sse, .to_sse, .none } },
17597 },
17598 .extra_temps = .{
17599 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17600 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
17601 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17602 .unused,
17603 .unused,
17604 .unused,
17605 .unused,
17606 .unused,
17607 .unused,
17608 .unused,
17609 .unused,
17610 },
17611 .dst_temps = .{ .{ .rc = .sse }, .unused },
17612 .each = .{ .once = &.{
17613 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17614 .{ ._, .vp_q, .broadcast, .tmp2x, .lea(.tmp0q), ._, ._ },
17615 .{ ._, .vp_, .xor, .dst0x, .src0x, .tmp2x, ._ },
17616 .{ ._, .vp_, .xor, .tmp2x, .src1x, .tmp2x, ._ },
17617 .{ ._, .vp_q, .cmpgt, .tmp2x, .dst0x, .tmp2x, ._ },
17618 .{ ._, .vp_q, .sub, .dst0x, .src0x, .src1x, ._ },
17619 .{ ._, .vp_, .@"and", .dst0x, .dst0x, .tmp2x, ._ },
17620 } },
17621 }, .{
17622 .required_features = .{ .avx, null, null, null },
17623 .src_constraints = .{
17624 .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
17625 .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
17626 .any,
17627 },
17628 .patterns = &.{
17629 .{ .src = .{ .to_sse, .to_sse, .none } },
17630 },
17631 .extra_temps = .{
17632 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17633 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
17634 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17635 .unused,
17636 .unused,
17637 .unused,
17638 .unused,
17639 .unused,
17640 .unused,
17641 .unused,
17642 .unused,
17643 },
17644 .dst_temps = .{ .{ .rc = .sse }, .unused },
17645 .each = .{ .once = &.{
17646 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17647 .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
17648 .{ ._, .vp_, .xor, .dst0x, .src0x, .tmp2x, ._ },
17649 .{ ._, .vp_, .xor, .tmp2x, .src1x, .tmp2x, ._ },
17650 .{ ._, .vp_q, .cmpgt, .tmp2x, .dst0x, .tmp2x, ._ },
17651 .{ ._, .vp_q, .sub, .dst0x, .src0x, .src1x, ._ },
17652 .{ ._, .vp_, .@"and", .dst0x, .dst0x, .tmp2x, ._ },
17653 } },
17654 }, .{
17655 .required_features = .{ .sse4_2, null, null, null },
17656 .src_constraints = .{
17657 .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
17658 .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
17659 .any,
17660 },
17661 .patterns = &.{
17662 .{ .src = .{ .to_mut_sse, .to_sse, .none } },
17663 },
17664 .extra_temps = .{
17665 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17666 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
17667 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17668 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
17669 .unused,
17670 .unused,
17671 .unused,
17672 .unused,
17673 .unused,
17674 .unused,
17675 .unused,
17676 },
17677 .dst_temps = .{ .{ .ref = .src0 }, .unused },
17678 .each = .{ .once = &.{
17679 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17680 .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
17681 .{ ._, ._dqa, .mov, .tmp3x, .src0x, ._, ._ },
17682 .{ ._, .p_, .xor, .tmp3x, .tmp2x, ._, ._ },
17683 .{ ._, .p_, .xor, .tmp2x, .src1x, ._, ._ },
17684 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
17685 .{ ._, .p_q, .sub, .dst0x, .src1x, ._, ._ },
17686 .{ ._, .p_, .@"and", .dst0x, .tmp3x, ._, ._ },
17687 } },
17688 }, .{
17689 .required_features = .{ .avx2, null, null, null },
17690 .src_constraints = .{
17691 .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 64 } },
17692 .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 64 } },
17693 .any,
17694 },
17695 .patterns = &.{
17696 .{ .src = .{ .to_sse, .to_sse, .none } },
17697 },
17698 .extra_temps = .{
17699 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17700 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
17701 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
17702 .unused,
17703 .unused,
17704 .unused,
17705 .unused,
17706 .unused,
17707 .unused,
17708 .unused,
17709 .unused,
17710 },
17711 .dst_temps = .{ .{ .rc = .sse }, .unused },
17712 .each = .{ .once = &.{
17713 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17714 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
17715 .{ ._, .vp_, .xor, .dst0y, .src0y, .tmp2y, ._ },
17716 .{ ._, .vp_, .xor, .tmp2y, .src1y, .tmp2y, ._ },
17717 .{ ._, .vp_q, .cmpgt, .tmp2y, .dst0y, .tmp2y, ._ },
17718 .{ ._, .vp_q, .sub, .dst0y, .src0y, .src1y, ._ },
17719 .{ ._, .vp_, .@"and", .dst0y, .dst0y, .tmp2y, ._ },
17720 } },
17721 }, .{
17722 .required_features = .{ .avx, null, null, null },
17723 .src_constraints = .{
17724 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
17725 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
17726 .any,
17727 },
17728 .patterns = &.{
17729 .{ .src = .{ .to_sse, .mem, .none } },
17730 .{ .src = .{ .to_sse, .to_sse, .none } },
17731 },
17732 .extra_temps = .{
17733 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
17734 .unused,
17735 .unused,
17736 .unused,
17737 .unused,
17738 .unused,
17739 .unused,
17740 .unused,
17741 .unused,
17742 .unused,
17743 .unused,
17744 },
17745 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17746 .each = .{ .once = &.{
17747 .{ ._, .vp_, .xor, .tmp0x, .tmp0x, .tmp0x, ._ },
17748 .{ ._, .vp_q, .sub, .dst0x, .src0x, .src1x, ._ },
17749 .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp0x, .dst0x },
17750 } },
17751 }, .{
17752 .required_features = .{ .sse4_1, null, null, null },
17753 .src_constraints = .{
17754 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
17755 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
17756 .any,
17757 },
17758 .patterns = &.{
17759 .{ .src = .{ .{ .to_reg = .xmm0 }, .mem, .none } },
17760 .{ .src = .{ .{ .to_reg = .xmm0 }, .to_sse, .none } },
17761 },
17762 .extra_temps = .{
17763 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
17764 .unused,
17765 .unused,
17766 .unused,
17767 .unused,
17768 .unused,
17769 .unused,
17770 .unused,
17771 .unused,
17772 .unused,
17773 .unused,
17774 },
17775 .dst_temps = .{ .{ .ref = .src0 }, .unused },
17776 .each = .{ .once = &.{
17777 .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
17778 .{ ._, .p_q, .sub, .dst0x, .src1x, ._, ._ },
17779 .{ ._, ._pd, .blendv, .dst0x, .tmp0x, .dst0x, ._ },
17780 } },
17781 }, .{
17782 .required_features = .{ .avx2, null, null, null },
17783 .src_constraints = .{
17784 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
17785 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
17786 .any,
17787 },
17788 .patterns = &.{
17789 .{ .src = .{ .to_sse, .mem, .none } },
17790 .{ .src = .{ .to_sse, .to_sse, .none } },
17791 },
17792 .extra_temps = .{
17793 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
17794 .unused,
17795 .unused,
17796 .unused,
17797 .unused,
17798 .unused,
17799 .unused,
17800 .unused,
17801 .unused,
17802 .unused,
17803 .unused,
17804 },
17805 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
17806 .each = .{ .once = &.{
17807 .{ ._, .vp_, .xor, .tmp0y, .tmp0y, .tmp0y, ._ },
17808 .{ ._, .vp_q, .sub, .dst0y, .src0y, .src1y, ._ },
17809 .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .tmp0y, .dst0y },
17810 } },
17811 }, .{
17812 .required_features = .{ .avx2, null, null, null },
17813 .src_constraints = .{
17814 .{ .multiple_scalar_exact_int = .{ .of = .yword, .is = 1 } },
17815 .{ .multiple_scalar_exact_int = .{ .of = .yword, .is = 1 } },
17816 .any,
17817 },
17818 .patterns = &.{
17819 .{ .src = .{ .to_mem, .to_mem, .none } },
17820 },
17821 .extra_temps = .{
17822 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
17823 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
17824 .unused,
17825 .unused,
17826 .unused,
17827 .unused,
17828 .unused,
17829 .unused,
17830 .unused,
17831 .unused,
17832 .unused,
17833 },
17834 .dst_temps = .{ .mem, .unused },
17835 .clobbers = .{ .eflags = true },
17836 .each = .{ .once = &.{
17837 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
17838 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._, ._ },
17839 .{ ._, .vp_, .andn, .tmp1y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
17840 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
17841 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
17842 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
17843 } },
17844 }, .{
17845 .required_features = .{ .avx, null, null, null },
17846 .src_constraints = .{
17847 .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
17848 .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
17849 .any,
17850 },
17851 .patterns = &.{
17852 .{ .src = .{ .to_mem, .to_mem, .none } },
17853 },
17854 .extra_temps = .{
17855 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
17856 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
17857 .unused,
17858 .unused,
17859 .unused,
17860 .unused,
17861 .unused,
17862 .unused,
17863 .unused,
17864 .unused,
17865 .unused,
17866 },
17867 .dst_temps = .{ .mem, .unused },
17868 .clobbers = .{ .eflags = true },
17869 .each = .{ .once = &.{
17870 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
17871 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
17872 .{ ._, .vp_, .andn, .tmp1x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
17873 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
17874 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
17875 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
17876 } },
17877 }, .{
17878 .required_features = .{ .sse2, null, null, null },
17879 .src_constraints = .{
17880 .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
17881 .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
17882 .any,
17883 },
17884 .patterns = &.{
17885 .{ .src = .{ .to_mem, .to_mem, .none } },
17886 },
17887 .extra_temps = .{
17888 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
17889 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
17890 .unused,
17891 .unused,
17892 .unused,
17893 .unused,
17894 .unused,
17895 .unused,
17896 .unused,
17897 .unused,
17898 .unused,
17899 },
17900 .dst_temps = .{ .mem, .unused },
17901 .clobbers = .{ .eflags = true },
17902 .each = .{ .once = &.{
17903 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
17904 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
17905 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
17906 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
17907 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
17908 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
17909 } },
17910 }, .{
17911 .required_features = .{ .sse, null, null, null },
17912 .src_constraints = .{
17913 .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
17914 .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
17915 .any,
17916 },
17917 .patterns = &.{
17918 .{ .src = .{ .to_mem, .to_mem, .none } },
17919 },
17920 .extra_temps = .{
17921 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
17922 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
17923 .unused,
17924 .unused,
17925 .unused,
17926 .unused,
17927 .unused,
17928 .unused,
17929 .unused,
17930 .unused,
17931 .unused,
17932 },
17933 .dst_temps = .{ .mem, .unused },
17934 .clobbers = .{ .eflags = true },
17935 .each = .{ .once = &.{
17936 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
17937 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
17938 .{ ._, ._ps, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
17939 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
17940 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
17941 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
17942 } },
17943 }, .{
17944 .required_features = .{ .mmx, null, null, null },
17945 .src_constraints = .{
17946 .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 1 } },
17947 .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 1 } },
17948 .any,
17949 },
17950 .patterns = &.{
17951 .{ .src = .{ .to_mem, .to_mem, .none } },
17952 },
17953 .extra_temps = .{
17954 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
17955 .{ .type = .vector_8_u8, .kind = .{ .rc = .mmx } },
17956 .unused,
17957 .unused,
17958 .unused,
17959 .unused,
17960 .unused,
17961 .unused,
17962 .unused,
17963 .unused,
17964 .unused,
17965 },
17966 .dst_temps = .{ .mem, .unused },
17967 .clobbers = .{ .eflags = true },
17968 .each = .{ .once = &.{
17969 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
17970 .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
17971 .{ ._, .p_, .andn, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
17972 .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
17973 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
17974 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
17975 } },
17976 }, .{
17977 .required_features = .{ .avx2, null, null, null },
17978 .src_constraints = .{
17979 .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 8 } },
17980 .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 8 } },
17981 .any,
17982 },
17983 .patterns = &.{
17984 .{ .src = .{ .to_mem, .to_mem, .none } },
17985 },
17986 .extra_temps = .{
17987 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
17988 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
17989 .unused,
17990 .unused,
17991 .unused,
17992 .unused,
17993 .unused,
17994 .unused,
17995 .unused,
17996 .unused,
17997 .unused,
17998 },
17999 .dst_temps = .{ .mem, .unused },
18000 .clobbers = .{ .eflags = true },
18001 .each = .{ .once = &.{
18002 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18003 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
18004 .{ ._, .vp_b, .subs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
18005 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
18006 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18007 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18008 } },
18009 }, .{
18010 .required_features = .{ .avx, null, null, null },
18011 .src_constraints = .{
18012 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
18013 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
18014 .any,
18015 },
18016 .patterns = &.{
18017 .{ .src = .{ .to_mem, .to_mem, .none } },
18018 },
18019 .extra_temps = .{
18020 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18021 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18022 .unused,
18023 .unused,
18024 .unused,
18025 .unused,
18026 .unused,
18027 .unused,
18028 .unused,
18029 .unused,
18030 .unused,
18031 },
18032 .dst_temps = .{ .mem, .unused },
18033 .clobbers = .{ .eflags = true },
18034 .each = .{ .once = &.{
18035 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18036 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18037 .{ ._, .vp_b, .subs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
18038 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
18039 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18040 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18041 } },
18042 }, .{
18043 .required_features = .{ .sse2, null, null, null },
18044 .src_constraints = .{
18045 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
18046 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
18047 .any,
18048 },
18049 .patterns = &.{
18050 .{ .src = .{ .to_mem, .to_mem, .none } },
18051 },
18052 .extra_temps = .{
18053 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18054 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18055 .unused,
18056 .unused,
18057 .unused,
18058 .unused,
18059 .unused,
18060 .unused,
18061 .unused,
18062 .unused,
18063 .unused,
18064 },
18065 .dst_temps = .{ .mem, .unused },
18066 .clobbers = .{ .eflags = true },
18067 .each = .{ .once = &.{
18068 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18069 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18070 .{ ._, .p_b, .subs, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
18071 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
18072 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18073 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18074 } },
18075 }, .{
18076 .required_features = .{ .mmx, null, null, null },
18077 .src_constraints = .{
18078 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 8 } },
18079 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 8 } },
18080 .any,
18081 },
18082 .patterns = &.{
18083 .{ .src = .{ .to_mem, .to_mem, .none } },
18084 },
18085 .extra_temps = .{
18086 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18087 .{ .type = .vector_8_i8, .kind = .{ .rc = .mmx } },
18088 .unused,
18089 .unused,
18090 .unused,
18091 .unused,
18092 .unused,
18093 .unused,
18094 .unused,
18095 .unused,
18096 .unused,
18097 },
18098 .dst_temps = .{ .mem, .unused },
18099 .clobbers = .{ .eflags = true },
18100 .each = .{ .once = &.{
18101 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18102 .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
18103 .{ ._, .p_b, .subs, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
18104 .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
18105 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
18106 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18107 } },
18108 }, .{
18109 .required_features = .{ .cmov, .slow_incdec, null, null },
18110 .src_constraints = .{
18111 .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
18112 .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
18113 .any,
18114 },
18115 .patterns = &.{
18116 .{ .src = .{ .to_mem, .to_mem, .none } },
18117 },
18118 .extra_temps = .{
18119 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18120 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18121 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18122 .unused,
18123 .unused,
18124 .unused,
18125 .unused,
18126 .unused,
18127 .unused,
18128 .unused,
18129 .unused,
18130 },
18131 .dst_temps = .{ .mem, .unused },
18132 .clobbers = .{ .eflags = true },
18133 .each = .{ .once = &.{
18134 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18135 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18136 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
18137 .{ ._, ._r, .sa, .tmp2b, .ui(7), ._, ._ },
18138 .{ ._, ._, .xor, .tmp2b, .sa(.src0, .add_smax), ._, ._ },
18139 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18140 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
18141 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18142 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
18143 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18144 } },
18145 }, .{
18146 .required_features = .{ .cmov, null, null, null },
18147 .src_constraints = .{
18148 .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
18149 .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
18150 .any,
18151 },
18152 .patterns = &.{
18153 .{ .src = .{ .to_mem, .to_mem, .none } },
18154 },
18155 .extra_temps = .{
18156 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18157 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18158 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18159 .unused,
18160 .unused,
18161 .unused,
18162 .unused,
18163 .unused,
18164 .unused,
18165 .unused,
18166 .unused,
18167 },
18168 .dst_temps = .{ .mem, .unused },
18169 .clobbers = .{ .eflags = true },
18170 .each = .{ .once = &.{
18171 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18172 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18173 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
18174 .{ ._, ._r, .sa, .tmp2b, .ui(7), ._, ._ },
18175 .{ ._, ._, .xor, .tmp2b, .sa(.src0, .add_smax), ._, ._ },
18176 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18177 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
18178 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18179 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
18180 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
18181 } },
18182 }, .{
18183 .required_features = .{ .slow_incdec, null, null, null },
18184 .src_constraints = .{
18185 .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
18186 .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
18187 .any,
18188 },
18189 .patterns = &.{
18190 .{ .src = .{ .to_mem, .to_mem, .none } },
18191 },
18192 .extra_temps = .{
18193 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18194 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18195 .unused,
18196 .unused,
18197 .unused,
18198 .unused,
18199 .unused,
18200 .unused,
18201 .unused,
18202 .unused,
18203 .unused,
18204 },
18205 .dst_temps = .{ .mem, .unused },
18206 .clobbers = .{ .eflags = true },
18207 .each = .{ .once = &.{
18208 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18209 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18210 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18211 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
18212 .{ ._, ._r, .sa, .tmp1b, .ui(7), ._, ._ },
18213 .{ ._, ._, .xor, .tmp1b, .sa(.src0, .add_smin), ._, ._ },
18214 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18215 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
18216 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18217 } },
18218 }, .{
18219 .src_constraints = .{
18220 .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
18221 .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
18222 .any,
18223 },
18224 .patterns = &.{
18225 .{ .src = .{ .to_mem, .to_mem, .none } },
18226 },
18227 .extra_temps = .{
18228 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18229 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18230 .unused,
18231 .unused,
18232 .unused,
18233 .unused,
18234 .unused,
18235 .unused,
18236 .unused,
18237 .unused,
18238 .unused,
18239 },
18240 .dst_temps = .{ .mem, .unused },
18241 .clobbers = .{ .eflags = true },
18242 .each = .{ .once = &.{
18243 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18244 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18245 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18246 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
18247 .{ ._, ._r, .sa, .tmp1b, .ui(7), ._, ._ },
18248 .{ ._, ._, .xor, .tmp1b, .sa(.src0, .add_smin), ._, ._ },
18249 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18250 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
18251 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
18252 } },
18253 }, .{
18254 .required_features = .{ .avx2, null, null, null },
18255 .src_constraints = .{
18256 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
18257 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
18258 .any,
18259 },
18260 .patterns = &.{
18261 .{ .src = .{ .to_mem, .to_mem, .none } },
18262 },
18263 .extra_temps = .{
18264 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18265 .{ .type = .i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
18266 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
18267 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
18268 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
18269 .unused,
18270 .unused,
18271 .unused,
18272 .unused,
18273 .unused,
18274 .unused,
18275 },
18276 .dst_temps = .{ .mem, .unused },
18277 .clobbers = .{ .eflags = true },
18278 .each = .{ .once = &.{
18279 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
18280 .{ ._, .vp_b, .cmpeq, .tmp2y, .tmp2y, .tmp2y, ._ },
18281 .{ ._, .vp_b, .broadcast, .tmp3y, .lea(.tmp0b), ._, ._ },
18282 .{ ._, .vp_, .xor, .tmp2y, .tmp3y, .tmp2y, ._ },
18283 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18284 .{ .@"0:", .v_dqa, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
18285 .{ ._, .vp_b, .sub, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
18286 .{ ._, .vp_b, .maxs, .tmp4y, .tmp4y, .tmp3y, ._ },
18287 .{ ._, .vp_b, .mins, .tmp4y, .tmp4y, .tmp2y, ._ },
18288 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp4y, ._, ._ },
18289 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18290 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18291 } },
18292 }, .{
18293 .required_features = .{ .avx, null, null, null },
18294 .src_constraints = .{
18295 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
18296 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
18297 .any,
18298 },
18299 .patterns = &.{
18300 .{ .src = .{ .to_mem, .to_mem, .none } },
18301 },
18302 .extra_temps = .{
18303 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18304 .{ .type = .vector_16_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
18305 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18306 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18307 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18308 .unused,
18309 .unused,
18310 .unused,
18311 .unused,
18312 .unused,
18313 .unused,
18314 },
18315 .dst_temps = .{ .mem, .unused },
18316 .clobbers = .{ .eflags = true },
18317 .each = .{ .once = &.{
18318 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
18319 .{ ._, .vp_b, .cmpeq, .tmp2x, .tmp2x, .tmp2x, ._ },
18320 .{ ._, .v_dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
18321 .{ ._, .vp_, .xor, .tmp2x, .tmp3x, .tmp2x, ._ },
18322 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18323 .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18324 .{ ._, .vp_b, .sub, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
18325 .{ ._, .vp_b, .maxs, .tmp4x, .tmp4x, .tmp3x, ._ },
18326 .{ ._, .vp_b, .mins, .tmp4x, .tmp4x, .tmp2x, ._ },
18327 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
18328 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18329 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18330 } },
18331 }, .{
18332 .required_features = .{ .sse4_1, null, null, null },
18333 .src_constraints = .{
18334 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
18335 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
18336 .any,
18337 },
18338 .patterns = &.{
18339 .{ .src = .{ .to_mem, .to_mem, .none } },
18340 },
18341 .extra_temps = .{
18342 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18343 .{ .type = .vector_16_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
18344 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18345 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18346 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18347 .unused,
18348 .unused,
18349 .unused,
18350 .unused,
18351 .unused,
18352 .unused,
18353 },
18354 .dst_temps = .{ .mem, .unused },
18355 .clobbers = .{ .eflags = true },
18356 .each = .{ .once = &.{
18357 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
18358 .{ ._, .p_b, .cmpeq, .tmp2x, .tmp2x, ._, ._ },
18359 .{ ._, ._dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
18360 .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
18361 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18362 .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18363 .{ ._, .p_b, .sub, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
18364 .{ ._, .p_b, .maxs, .tmp4x, .tmp3x, ._, ._ },
18365 .{ ._, .p_b, .mins, .tmp4x, .tmp2x, ._, ._ },
18366 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
18367 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18368 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18369 } },
18370 }, .{
18371 .required_features = .{ .sse2, null, null, null },
18372 .src_constraints = .{
18373 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
18374 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
18375 .any,
18376 },
18377 .patterns = &.{
18378 .{ .src = .{ .to_mem, .to_mem, .none } },
18379 },
18380 .extra_temps = .{
18381 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18382 .{ .type = .vector_16_i8, .kind = .{ .slimit_delta_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
18383 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18384 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
18385 .unused,
18386 .unused,
18387 .unused,
18388 .unused,
18389 .unused,
18390 .unused,
18391 .unused,
18392 },
18393 .dst_temps = .{ .mem, .unused },
18394 .clobbers = .{ .eflags = true },
18395 .each = .{ .once = &.{
18396 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
18397 .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
18398 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18399 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18400 .{ ._, .p_b, .sub, .tmp3x, .tmp2x, ._, ._ },
18401 .{ ._, .p_b, .subs, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
18402 .{ ._, .p_b, .add, .tmp3x, .tmp2x, ._, ._ },
18403 .{ ._, .p_b, .adds, .tmp3x, .tmp2x, ._, ._ },
18404 .{ ._, .p_b, .sub, .tmp3x, .tmp2x, ._, ._ },
18405 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
18406 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18407 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18408 } },
18409 }, .{
18410 .required_features = .{ .cmov, .slow_incdec, null, null },
18411 .src_constraints = .{
18412 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
18413 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
18414 .any,
18415 },
18416 .patterns = &.{
18417 .{ .src = .{ .to_mem, .to_mem, .none } },
18418 },
18419 .extra_temps = .{
18420 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18421 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18422 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18423 .unused,
18424 .unused,
18425 .unused,
18426 .unused,
18427 .unused,
18428 .unused,
18429 .unused,
18430 .unused,
18431 },
18432 .dst_temps = .{ .mem, .unused },
18433 .clobbers = .{ .eflags = true },
18434 .each = .{ .once = &.{
18435 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18436 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18437 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
18438 .{ ._, ._r, .sa, .tmp2b, .ui(7), ._, ._ },
18439 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18440 .{ ._, ._, .xor, .tmp2b, .sa(.src0, .add_smax), ._, ._ },
18441 .{ ._, ._, .@"test", .tmp1b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
18442 .{ ._, ._po, .cmov, .tmp1d, .tmp2d, ._, ._ },
18443 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18444 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
18445 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18446 } },
18447 }, .{
18448 .required_features = .{ .cmov, null, null, null },
18449 .src_constraints = .{
18450 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
18451 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
18452 .any,
18453 },
18454 .patterns = &.{
18455 .{ .src = .{ .to_mem, .to_mem, .none } },
18456 },
18457 .extra_temps = .{
18458 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18459 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18460 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18461 .unused,
18462 .unused,
18463 .unused,
18464 .unused,
18465 .unused,
18466 .unused,
18467 .unused,
18468 .unused,
18469 },
18470 .dst_temps = .{ .mem, .unused },
18471 .clobbers = .{ .eflags = true },
18472 .each = .{ .once = &.{
18473 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18474 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18475 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
18476 .{ ._, ._r, .sa, .tmp2b, .ui(7), ._, ._ },
18477 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18478 .{ ._, ._, .xor, .tmp2b, .sa(.src0, .add_smax), ._, ._ },
18479 .{ ._, ._, .@"test", .tmp1b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
18480 .{ ._, ._po, .cmov, .tmp1d, .tmp2d, ._, ._ },
18481 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18482 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
18483 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
18484 } },
18485 }, .{
18486 .required_features = .{ .slow_incdec, null, null, null },
18487 .src_constraints = .{
18488 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
18489 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
18490 .any,
18491 },
18492 .patterns = &.{
18493 .{ .src = .{ .to_mem, .to_mem, .none } },
18494 },
18495 .extra_temps = .{
18496 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18497 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18498 .unused,
18499 .unused,
18500 .unused,
18501 .unused,
18502 .unused,
18503 .unused,
18504 .unused,
18505 .unused,
18506 .unused,
18507 },
18508 .dst_temps = .{ .mem, .unused },
18509 .clobbers = .{ .eflags = true },
18510 .each = .{ .once = &.{
18511 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18512 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18513 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18514 .{ ._, ._, .@"test", .tmp1b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
18515 .{ ._, ._pe, .j, .@"1f", ._, ._, ._ },
18516 .{ ._, ._r, .sa, .tmp1b, .ui(7), ._, ._ },
18517 .{ ._, ._, .xor, .tmp1b, .sa(.src0, .add_smax), ._, ._ },
18518 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18519 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
18520 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18521 } },
18522 }, .{
18523 .src_constraints = .{
18524 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
18525 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
18526 .any,
18527 },
18528 .patterns = &.{
18529 .{ .src = .{ .to_mem, .to_mem, .none } },
18530 },
18531 .extra_temps = .{
18532 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18533 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
18534 .unused,
18535 .unused,
18536 .unused,
18537 .unused,
18538 .unused,
18539 .unused,
18540 .unused,
18541 .unused,
18542 .unused,
18543 },
18544 .dst_temps = .{ .mem, .unused },
18545 .clobbers = .{ .eflags = true },
18546 .each = .{ .once = &.{
18547 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18548 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18549 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18550 .{ ._, ._, .@"test", .tmp1b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
18551 .{ ._, ._pe, .j, .@"1f", ._, ._, ._ },
18552 .{ ._, ._r, .sa, .tmp1b, .ui(7), ._, ._ },
18553 .{ ._, ._, .xor, .tmp1b, .sa(.src0, .add_smax), ._, ._ },
18554 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18555 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
18556 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
18557 } },
18558 }, .{
18559 .required_features = .{ .avx2, null, null, null },
18560 .src_constraints = .{
18561 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
18562 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
18563 .any,
18564 },
18565 .patterns = &.{
18566 .{ .src = .{ .to_mem, .to_mem, .none } },
18567 },
18568 .extra_temps = .{
18569 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18570 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
18571 .unused,
18572 .unused,
18573 .unused,
18574 .unused,
18575 .unused,
18576 .unused,
18577 .unused,
18578 .unused,
18579 .unused,
18580 },
18581 .dst_temps = .{ .mem, .unused },
18582 .clobbers = .{ .eflags = true },
18583 .each = .{ .once = &.{
18584 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18585 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
18586 .{ ._, .vp_b, .subus, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
18587 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
18588 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18589 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18590 } },
18591 }, .{
18592 .required_features = .{ .avx, null, null, null },
18593 .src_constraints = .{
18594 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
18595 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
18596 .any,
18597 },
18598 .patterns = &.{
18599 .{ .src = .{ .to_mem, .to_mem, .none } },
18600 },
18601 .extra_temps = .{
18602 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18603 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
18604 .unused,
18605 .unused,
18606 .unused,
18607 .unused,
18608 .unused,
18609 .unused,
18610 .unused,
18611 .unused,
18612 .unused,
18613 },
18614 .dst_temps = .{ .mem, .unused },
18615 .clobbers = .{ .eflags = true },
18616 .each = .{ .once = &.{
18617 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18618 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18619 .{ ._, .vp_b, .subus, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
18620 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
18621 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18622 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18623 } },
18624 }, .{
18625 .required_features = .{ .sse2, null, null, null },
18626 .src_constraints = .{
18627 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
18628 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
18629 .any,
18630 },
18631 .patterns = &.{
18632 .{ .src = .{ .to_mem, .to_mem, .none } },
18633 },
18634 .extra_temps = .{
18635 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18636 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
18637 .unused,
18638 .unused,
18639 .unused,
18640 .unused,
18641 .unused,
18642 .unused,
18643 .unused,
18644 .unused,
18645 .unused,
18646 },
18647 .dst_temps = .{ .mem, .unused },
18648 .clobbers = .{ .eflags = true },
18649 .each = .{ .once = &.{
18650 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18651 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18652 .{ ._, .p_b, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
18653 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
18654 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18655 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18656 } },
18657 }, .{
18658 .required_features = .{ .mmx, null, null, null },
18659 .src_constraints = .{
18660 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
18661 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
18662 .any,
18663 },
18664 .patterns = &.{
18665 .{ .src = .{ .to_mem, .to_mem, .none } },
18666 },
18667 .extra_temps = .{
18668 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18669 .{ .type = .vector_8_u8, .kind = .{ .rc = .mmx } },
18670 .unused,
18671 .unused,
18672 .unused,
18673 .unused,
18674 .unused,
18675 .unused,
18676 .unused,
18677 .unused,
18678 .unused,
18679 },
18680 .dst_temps = .{ .mem, .unused },
18681 .clobbers = .{ .eflags = true },
18682 .each = .{ .once = &.{
18683 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18684 .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
18685 .{ ._, .p_b, .subus, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
18686 .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
18687 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
18688 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18689 } },
18690 }, .{
18691 .required_features = .{ .cmov, .slow_incdec, null, null },
18692 .src_constraints = .{
18693 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
18694 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
18695 .any,
18696 },
18697 .patterns = &.{
18698 .{ .src = .{ .to_mem, .to_mem, .none } },
18699 },
18700 .extra_temps = .{
18701 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18702 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
18703 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
18704 .unused,
18705 .unused,
18706 .unused,
18707 .unused,
18708 .unused,
18709 .unused,
18710 .unused,
18711 .unused,
18712 },
18713 .dst_temps = .{ .mem, .unused },
18714 .clobbers = .{ .eflags = true },
18715 .each = .{ .once = &.{
18716 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18717 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
18718 .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18719 .{ ._, ._, .sub, .tmp2b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18720 .{ ._, ._c, .cmov, .tmp2d, .tmp1d, ._, ._ },
18721 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
18722 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
18723 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18724 } },
18725 }, .{
18726 .required_features = .{ .cmov, null, null, null },
18727 .src_constraints = .{
18728 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
18729 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
18730 .any,
18731 },
18732 .patterns = &.{
18733 .{ .src = .{ .to_mem, .to_mem, .none } },
18734 },
18735 .extra_temps = .{
18736 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18737 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
18738 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
18739 .unused,
18740 .unused,
18741 .unused,
18742 .unused,
18743 .unused,
18744 .unused,
18745 .unused,
18746 .unused,
18747 },
18748 .dst_temps = .{ .mem, .unused },
18749 .clobbers = .{ .eflags = true },
18750 .each = .{ .once = &.{
18751 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18752 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
18753 .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18754 .{ ._, ._, .sub, .tmp2b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18755 .{ ._, ._c, .cmov, .tmp2d, .tmp1d, ._, ._ },
18756 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
18757 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
18758 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
18759 } },
18760 }, .{
18761 .required_features = .{ .slow_incdec, null, null, null },
18762 .src_constraints = .{
18763 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
18764 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
18765 .any,
18766 },
18767 .patterns = &.{
18768 .{ .src = .{ .to_mem, .to_mem, .none } },
18769 },
18770 .extra_temps = .{
18771 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18772 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
18773 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
18774 .unused,
18775 .unused,
18776 .unused,
18777 .unused,
18778 .unused,
18779 .unused,
18780 .unused,
18781 .unused,
18782 },
18783 .dst_temps = .{ .mem, .unused },
18784 .clobbers = .{ .eflags = true },
18785 .each = .{ .once = &.{
18786 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18787 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18788 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18789 .{ ._, ._, .cmc, ._, ._, ._, ._ },
18790 .{ ._, ._, .sbb, .tmp2d, .tmp2d, ._, ._ },
18791 .{ ._, ._, .@"and", .tmp1b, .tmp2b, ._, ._ },
18792 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18793 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
18794 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18795 } },
18796 }, .{
18797 .src_constraints = .{
18798 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
18799 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
18800 .any,
18801 },
18802 .patterns = &.{
18803 .{ .src = .{ .to_mem, .to_mem, .none } },
18804 },
18805 .extra_temps = .{
18806 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18807 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
18808 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
18809 .unused,
18810 .unused,
18811 .unused,
18812 .unused,
18813 .unused,
18814 .unused,
18815 .unused,
18816 .unused,
18817 },
18818 .dst_temps = .{ .mem, .unused },
18819 .clobbers = .{ .eflags = true },
18820 .each = .{ .once = &.{
18821 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18822 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
18823 .{ ._, ._, .sub, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
18824 .{ ._, ._, .cmc, ._, ._, ._, ._ },
18825 .{ ._, ._, .sbb, .tmp2d, .tmp2d, ._, ._ },
18826 .{ ._, ._, .@"and", .tmp1b, .tmp2b, ._, ._ },
18827 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
18828 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
18829 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
18830 } },
18831 }, .{
18832 .required_features = .{ .avx2, null, null, null },
18833 .src_constraints = .{
18834 .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 16 } },
18835 .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 16 } },
18836 .any,
18837 },
18838 .patterns = &.{
18839 .{ .src = .{ .to_mem, .to_mem, .none } },
18840 },
18841 .extra_temps = .{
18842 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18843 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
18844 .unused,
18845 .unused,
18846 .unused,
18847 .unused,
18848 .unused,
18849 .unused,
18850 .unused,
18851 .unused,
18852 .unused,
18853 },
18854 .dst_temps = .{ .mem, .unused },
18855 .clobbers = .{ .eflags = true },
18856 .each = .{ .once = &.{
18857 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18858 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
18859 .{ ._, .vp_w, .subs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
18860 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
18861 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18862 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18863 } },
18864 }, .{
18865 .required_features = .{ .avx, null, null, null },
18866 .src_constraints = .{
18867 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
18868 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
18869 .any,
18870 },
18871 .patterns = &.{
18872 .{ .src = .{ .to_mem, .to_mem, .none } },
18873 },
18874 .extra_temps = .{
18875 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18876 .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
18877 .unused,
18878 .unused,
18879 .unused,
18880 .unused,
18881 .unused,
18882 .unused,
18883 .unused,
18884 .unused,
18885 .unused,
18886 },
18887 .dst_temps = .{ .mem, .unused },
18888 .clobbers = .{ .eflags = true },
18889 .each = .{ .once = &.{
18890 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18891 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18892 .{ ._, .vp_w, .subs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
18893 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
18894 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18895 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18896 } },
18897 }, .{
18898 .required_features = .{ .sse2, null, null, null },
18899 .src_constraints = .{
18900 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
18901 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
18902 .any,
18903 },
18904 .patterns = &.{
18905 .{ .src = .{ .to_mem, .to_mem, .none } },
18906 },
18907 .extra_temps = .{
18908 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18909 .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
18910 .unused,
18911 .unused,
18912 .unused,
18913 .unused,
18914 .unused,
18915 .unused,
18916 .unused,
18917 .unused,
18918 .unused,
18919 },
18920 .dst_temps = .{ .mem, .unused },
18921 .clobbers = .{ .eflags = true },
18922 .each = .{ .once = &.{
18923 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18924 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
18925 .{ ._, .p_w, .subs, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
18926 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
18927 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18928 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18929 } },
18930 }, .{
18931 .required_features = .{ .cmov, .fast_imm16, null, null },
18932 .src_constraints = .{
18933 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
18934 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
18935 .any,
18936 },
18937 .patterns = &.{
18938 .{ .src = .{ .to_mem, .to_mem, .none } },
18939 },
18940 .extra_temps = .{
18941 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18942 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
18943 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
18944 .unused,
18945 .unused,
18946 .unused,
18947 .unused,
18948 .unused,
18949 .unused,
18950 .unused,
18951 .unused,
18952 },
18953 .dst_temps = .{ .mem, .unused },
18954 .clobbers = .{ .eflags = true },
18955 .each = .{ .once = &.{
18956 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18957 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
18958 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
18959 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
18960 .{ ._, ._, .xor, .tmp2w, .sa(.src0, .add_smax), ._, ._ },
18961 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
18962 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
18963 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
18964 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
18965 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18966 } },
18967 }, .{
18968 .required_features = .{ .cmov, null, null, null },
18969 .src_constraints = .{
18970 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
18971 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
18972 .any,
18973 },
18974 .patterns = &.{
18975 .{ .src = .{ .to_mem, .to_mem, .none } },
18976 },
18977 .extra_temps = .{
18978 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18979 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
18980 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
18981 .unused,
18982 .unused,
18983 .unused,
18984 .unused,
18985 .unused,
18986 .unused,
18987 .unused,
18988 .unused,
18989 },
18990 .dst_temps = .{ .mem, .unused },
18991 .clobbers = .{ .eflags = true },
18992 .each = .{ .once = &.{
18993 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
18994 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
18995 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
18996 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
18997 .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
18998 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
18999 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
19000 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19001 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19002 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19003 } },
19004 }, .{
19005 .required_features = .{ .fast_imm16, null, null, null },
19006 .src_constraints = .{
19007 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
19008 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
19009 .any,
19010 },
19011 .patterns = &.{
19012 .{ .src = .{ .to_mem, .to_mem, .none } },
19013 },
19014 .extra_temps = .{
19015 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19016 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19017 .unused,
19018 .unused,
19019 .unused,
19020 .unused,
19021 .unused,
19022 .unused,
19023 .unused,
19024 .unused,
19025 .unused,
19026 },
19027 .dst_temps = .{ .mem, .unused },
19028 .clobbers = .{ .eflags = true },
19029 .each = .{ .once = &.{
19030 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19031 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19032 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19033 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
19034 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
19035 .{ ._, ._, .xor, .tmp1w, .sa(.src0, .add_smax), ._, ._ },
19036 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19037 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19038 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19039 } },
19040 }, .{
19041 .src_constraints = .{
19042 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
19043 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
19044 .any,
19045 },
19046 .patterns = &.{
19047 .{ .src = .{ .to_mem, .to_mem, .none } },
19048 },
19049 .extra_temps = .{
19050 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19051 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19052 .unused,
19053 .unused,
19054 .unused,
19055 .unused,
19056 .unused,
19057 .unused,
19058 .unused,
19059 .unused,
19060 .unused,
19061 },
19062 .dst_temps = .{ .mem, .unused },
19063 .clobbers = .{ .eflags = true },
19064 .each = .{ .once = &.{
19065 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19066 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19067 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19068 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
19069 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
19070 .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
19071 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19072 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19073 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19074 } },
19075 }, .{
19076 .required_features = .{ .avx2, null, null, null },
19077 .src_constraints = .{
19078 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
19079 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
19080 .any,
19081 },
19082 .patterns = &.{
19083 .{ .src = .{ .to_mem, .to_mem, .none } },
19084 },
19085 .extra_temps = .{
19086 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19087 .{ .type = .i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
19088 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
19089 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
19090 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
19091 .unused,
19092 .unused,
19093 .unused,
19094 .unused,
19095 .unused,
19096 .unused,
19097 },
19098 .dst_temps = .{ .mem, .unused },
19099 .clobbers = .{ .eflags = true },
19100 .each = .{ .once = &.{
19101 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
19102 .{ ._, .vp_w, .cmpeq, .tmp2y, .tmp2y, .tmp2y, ._ },
19103 .{ ._, .vp_w, .broadcast, .tmp3y, .lea(.tmp0w), ._, ._ },
19104 .{ ._, .vp_, .xor, .tmp2y, .tmp3y, .tmp2y, ._ },
19105 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19106 .{ .@"0:", .v_dqa, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
19107 .{ ._, .vp_w, .sub, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
19108 .{ ._, .vp_w, .maxs, .tmp4y, .tmp4y, .tmp3y, ._ },
19109 .{ ._, .vp_w, .mins, .tmp4y, .tmp4y, .tmp2y, ._ },
19110 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp4y, ._, ._ },
19111 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
19112 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19113 } },
19114 }, .{
19115 .required_features = .{ .avx, null, null, null },
19116 .src_constraints = .{
19117 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
19118 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
19119 .any,
19120 },
19121 .patterns = &.{
19122 .{ .src = .{ .to_mem, .to_mem, .none } },
19123 },
19124 .extra_temps = .{
19125 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19126 .{ .type = .vector_8_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
19127 .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
19128 .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
19129 .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
19130 .unused,
19131 .unused,
19132 .unused,
19133 .unused,
19134 .unused,
19135 .unused,
19136 },
19137 .dst_temps = .{ .mem, .unused },
19138 .clobbers = .{ .eflags = true },
19139 .each = .{ .once = &.{
19140 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
19141 .{ ._, .vp_w, .cmpeq, .tmp2x, .tmp2x, .tmp2x, ._ },
19142 .{ ._, .v_dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
19143 .{ ._, .vp_, .xor, .tmp2x, .tmp3x, .tmp2x, ._ },
19144 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19145 .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
19146 .{ ._, .vp_w, .sub, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
19147 .{ ._, .vp_w, .maxs, .tmp4x, .tmp4x, .tmp3x, ._ },
19148 .{ ._, .vp_w, .mins, .tmp4x, .tmp4x, .tmp2x, ._ },
19149 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
19150 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
19151 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19152 } },
19153 }, .{
19154 .required_features = .{ .sse2, null, null, null },
19155 .src_constraints = .{
19156 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
19157 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
19158 .any,
19159 },
19160 .patterns = &.{
19161 .{ .src = .{ .to_mem, .to_mem, .none } },
19162 },
19163 .extra_temps = .{
19164 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19165 .{ .type = .vector_8_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
19166 .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
19167 .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
19168 .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
19169 .unused,
19170 .unused,
19171 .unused,
19172 .unused,
19173 .unused,
19174 .unused,
19175 },
19176 .dst_temps = .{ .mem, .unused },
19177 .clobbers = .{ .eflags = true },
19178 .each = .{ .once = &.{
19179 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
19180 .{ ._, .p_w, .cmpeq, .tmp2x, .tmp2x, ._, ._ },
19181 .{ ._, ._dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
19182 .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
19183 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19184 .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
19185 .{ ._, .p_w, .sub, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
19186 .{ ._, .p_w, .maxs, .tmp4x, .tmp3x, ._, ._ },
19187 .{ ._, .p_w, .mins, .tmp4x, .tmp2x, ._, ._ },
19188 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
19189 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
19190 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19191 } },
19192 }, .{
19193 .required_features = .{ .cmov, .fast_imm16, null, null },
19194 .src_constraints = .{
19195 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
19196 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
19197 .any,
19198 },
19199 .patterns = &.{
19200 .{ .src = .{ .to_mem, .to_mem, .none } },
19201 },
19202 .extra_temps = .{
19203 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19204 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19205 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19206 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19207 .unused,
19208 .unused,
19209 .unused,
19210 .unused,
19211 .unused,
19212 .unused,
19213 .unused,
19214 },
19215 .dst_temps = .{ .mem, .unused },
19216 .clobbers = .{ .eflags = true },
19217 .each = .{ .once = &.{
19218 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19219 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19220 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19221 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
19222 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19223 .{ ._, ._, .xor, .tmp2w, .sa(.src0, .add_smax), ._, ._ },
19224 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
19225 .{ ._, ._, .add, .tmp3w, .tmp3w, ._, ._ },
19226 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
19227 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19228 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19229 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19230 } },
19231 }, .{
19232 .required_features = .{ .cmov, null, null, null },
19233 .src_constraints = .{
19234 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
19235 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
19236 .any,
19237 },
19238 .patterns = &.{
19239 .{ .src = .{ .to_mem, .to_mem, .none } },
19240 },
19241 .extra_temps = .{
19242 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19243 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19244 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19245 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19246 .unused,
19247 .unused,
19248 .unused,
19249 .unused,
19250 .unused,
19251 .unused,
19252 .unused,
19253 },
19254 .dst_temps = .{ .mem, .unused },
19255 .clobbers = .{ .eflags = true },
19256 .each = .{ .once = &.{
19257 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19258 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19259 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19260 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
19261 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19262 .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
19263 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
19264 .{ ._, ._, .add, .tmp3w, .tmp3w, ._, ._ },
19265 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
19266 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19267 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19268 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19269 } },
19270 }, .{
19271 .required_features = .{ .fast_imm16, null, null, null },
19272 .src_constraints = .{
19273 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
19274 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
19275 .any,
19276 },
19277 .patterns = &.{
19278 .{ .src = .{ .to_mem, .to_mem, .none } },
19279 },
19280 .extra_temps = .{
19281 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19282 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19283 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19284 .unused,
19285 .unused,
19286 .unused,
19287 .unused,
19288 .unused,
19289 .unused,
19290 .unused,
19291 .unused,
19292 },
19293 .dst_temps = .{ .mem, .unused },
19294 .clobbers = .{ .eflags = true },
19295 .each = .{ .once = &.{
19296 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19297 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19298 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19299 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19300 .{ ._, ._, .add, .tmp2w, .tmp2w, ._, ._ },
19301 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
19302 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
19303 .{ ._, ._, .xor, .tmp1w, .sa(.src0, .add_smax), ._, ._ },
19304 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19305 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19306 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19307 } },
19308 }, .{
19309 .src_constraints = .{
19310 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
19311 .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
19312 .any,
19313 },
19314 .patterns = &.{
19315 .{ .src = .{ .to_mem, .to_mem, .none } },
19316 },
19317 .extra_temps = .{
19318 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19319 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19320 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19321 .unused,
19322 .unused,
19323 .unused,
19324 .unused,
19325 .unused,
19326 .unused,
19327 .unused,
19328 .unused,
19329 },
19330 .dst_temps = .{ .mem, .unused },
19331 .clobbers = .{ .eflags = true },
19332 .each = .{ .once = &.{
19333 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19334 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19335 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19336 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19337 .{ ._, ._, .add, .tmp2w, .tmp2w, ._, ._ },
19338 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
19339 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
19340 .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
19341 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19342 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19343 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19344 } },
19345 }, .{
19346 .required_features = .{ .bmi2, .cmov, .fast_imm16, null },
19347 .src_constraints = .{
19348 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19349 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19350 .any,
19351 },
19352 .patterns = &.{
19353 .{ .src = .{ .to_mem, .to_mem, .none } },
19354 },
19355 .extra_temps = .{
19356 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19357 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19358 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19359 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19360 .unused,
19361 .unused,
19362 .unused,
19363 .unused,
19364 .unused,
19365 .unused,
19366 .unused,
19367 },
19368 .dst_temps = .{ .mem, .unused },
19369 .clobbers = .{ .eflags = true },
19370 .each = .{ .once = &.{
19371 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19372 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19373 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19374 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
19375 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19376 .{ ._, ._, .xor, .tmp2w, .sa(.src0, .add_smax), ._, ._ },
19377 .{ ._, ._rx, .ro, .tmp3d, .tmp1d, .uia(1, .src0, .add_bit_size_rem_64), ._ },
19378 .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
19379 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
19380 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19381 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19382 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19383 } },
19384 }, .{
19385 .required_features = .{ .bmi2, .cmov, null, null },
19386 .src_constraints = .{
19387 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19388 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19389 .any,
19390 },
19391 .patterns = &.{
19392 .{ .src = .{ .to_mem, .to_mem, .none } },
19393 },
19394 .extra_temps = .{
19395 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19396 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19397 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19398 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19399 .unused,
19400 .unused,
19401 .unused,
19402 .unused,
19403 .unused,
19404 .unused,
19405 .unused,
19406 },
19407 .dst_temps = .{ .mem, .unused },
19408 .clobbers = .{ .eflags = true },
19409 .each = .{ .once = &.{
19410 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19411 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19412 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19413 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
19414 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19415 .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
19416 .{ ._, ._rx, .ro, .tmp3d, .tmp1d, .uia(1, .src0, .add_bit_size_rem_64), ._ },
19417 .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
19418 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
19419 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19420 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19421 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19422 } },
19423 }, .{
19424 .required_features = .{ .cmov, .fast_imm16, null, null },
19425 .src_constraints = .{
19426 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19427 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19428 .any,
19429 },
19430 .patterns = &.{
19431 .{ .src = .{ .to_mem, .to_mem, .none } },
19432 },
19433 .extra_temps = .{
19434 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19435 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19436 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19437 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19438 .unused,
19439 .unused,
19440 .unused,
19441 .unused,
19442 .unused,
19443 .unused,
19444 .unused,
19445 },
19446 .dst_temps = .{ .mem, .unused },
19447 .clobbers = .{ .eflags = true },
19448 .each = .{ .once = &.{
19449 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19450 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19451 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19452 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
19453 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19454 .{ ._, ._, .xor, .tmp2w, .sa(.src0, .add_smax), ._, ._ },
19455 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
19456 .{ ._, ._l, .sa, .tmp3d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
19457 .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
19458 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
19459 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19460 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19461 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19462 } },
19463 }, .{
19464 .required_features = .{ .cmov, null, null, null },
19465 .src_constraints = .{
19466 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19467 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19468 .any,
19469 },
19470 .patterns = &.{
19471 .{ .src = .{ .to_mem, .to_mem, .none } },
19472 },
19473 .extra_temps = .{
19474 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19475 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19476 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19477 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19478 .unused,
19479 .unused,
19480 .unused,
19481 .unused,
19482 .unused,
19483 .unused,
19484 .unused,
19485 },
19486 .dst_temps = .{ .mem, .unused },
19487 .clobbers = .{ .eflags = true },
19488 .each = .{ .once = &.{
19489 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19490 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19491 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19492 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
19493 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19494 .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
19495 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
19496 .{ ._, ._l, .sa, .tmp3d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
19497 .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
19498 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
19499 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19500 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19501 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19502 } },
19503 }, .{
19504 .required_features = .{ .fast_imm16, null, null, null },
19505 .src_constraints = .{
19506 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19507 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19508 .any,
19509 },
19510 .patterns = &.{
19511 .{ .src = .{ .to_mem, .to_mem, .none } },
19512 },
19513 .extra_temps = .{
19514 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19515 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19516 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19517 .unused,
19518 .unused,
19519 .unused,
19520 .unused,
19521 .unused,
19522 .unused,
19523 .unused,
19524 .unused,
19525 },
19526 .dst_temps = .{ .mem, .unused },
19527 .clobbers = .{ .eflags = true },
19528 .each = .{ .once = &.{
19529 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19530 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19531 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19532 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19533 .{ ._, ._l, .sa, .tmp2d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
19534 .{ ._, ._, .add, .tmp2d, .tmp2d, ._, ._ },
19535 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
19536 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
19537 .{ ._, ._, .xor, .tmp1w, .sa(.src0, .add_smax), ._, ._ },
19538 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19539 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19540 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19541 } },
19542 }, .{
19543 .src_constraints = .{
19544 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19545 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
19546 .any,
19547 },
19548 .patterns = &.{
19549 .{ .src = .{ .to_mem, .to_mem, .none } },
19550 },
19551 .extra_temps = .{
19552 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19553 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19554 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
19555 .unused,
19556 .unused,
19557 .unused,
19558 .unused,
19559 .unused,
19560 .unused,
19561 .unused,
19562 .unused,
19563 },
19564 .dst_temps = .{ .mem, .unused },
19565 .clobbers = .{ .eflags = true },
19566 .each = .{ .once = &.{
19567 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19568 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19569 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19570 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19571 .{ ._, ._l, .sa, .tmp2d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
19572 .{ ._, ._, .add, .tmp2d, .tmp2d, ._, ._ },
19573 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
19574 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
19575 .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
19576 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19577 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19578 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19579 } },
19580 }, .{
19581 .required_features = .{ .mmx, null, null, null },
19582 .src_constraints = .{
19583 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } },
19584 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } },
19585 .any,
19586 },
19587 .patterns = &.{
19588 .{ .src = .{ .to_mem, .to_mem, .none } },
19589 },
19590 .extra_temps = .{
19591 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19592 .{ .type = .vector_4_i16, .kind = .{ .rc = .mmx } },
19593 .unused,
19594 .unused,
19595 .unused,
19596 .unused,
19597 .unused,
19598 .unused,
19599 .unused,
19600 .unused,
19601 .unused,
19602 },
19603 .dst_temps = .{ .mem, .unused },
19604 .clobbers = .{ .eflags = true },
19605 .each = .{ .once = &.{
19606 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19607 .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
19608 .{ ._, .p_w, .subus, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
19609 .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
19610 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
19611 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19612 } },
19613 }, .{
19614 .required_features = .{ .avx2, null, null, null },
19615 .src_constraints = .{
19616 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
19617 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
19618 .any,
19619 },
19620 .patterns = &.{
19621 .{ .src = .{ .to_mem, .to_mem, .none } },
19622 },
19623 .extra_temps = .{
19624 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19625 .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
19626 .unused,
19627 .unused,
19628 .unused,
19629 .unused,
19630 .unused,
19631 .unused,
19632 .unused,
19633 .unused,
19634 .unused,
19635 },
19636 .dst_temps = .{ .mem, .unused },
19637 .clobbers = .{ .eflags = true },
19638 .each = .{ .once = &.{
19639 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19640 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
19641 .{ ._, .vp_w, .subus, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
19642 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
19643 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
19644 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19645 } },
19646 }, .{
19647 .required_features = .{ .avx, null, null, null },
19648 .src_constraints = .{
19649 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
19650 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
19651 .any,
19652 },
19653 .patterns = &.{
19654 .{ .src = .{ .to_mem, .to_mem, .none } },
19655 },
19656 .extra_temps = .{
19657 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19658 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
19659 .unused,
19660 .unused,
19661 .unused,
19662 .unused,
19663 .unused,
19664 .unused,
19665 .unused,
19666 .unused,
19667 .unused,
19668 },
19669 .dst_temps = .{ .mem, .unused },
19670 .clobbers = .{ .eflags = true },
19671 .each = .{ .once = &.{
19672 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19673 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
19674 .{ ._, .vp_w, .subus, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
19675 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
19676 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
19677 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19678 } },
19679 }, .{
19680 .required_features = .{ .sse2, null, null, null },
19681 .src_constraints = .{
19682 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
19683 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
19684 .any,
19685 },
19686 .patterns = &.{
19687 .{ .src = .{ .to_mem, .to_mem, .none } },
19688 },
19689 .extra_temps = .{
19690 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19691 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
19692 .unused,
19693 .unused,
19694 .unused,
19695 .unused,
19696 .unused,
19697 .unused,
19698 .unused,
19699 .unused,
19700 .unused,
19701 },
19702 .dst_temps = .{ .mem, .unused },
19703 .clobbers = .{ .eflags = true },
19704 .each = .{ .once = &.{
19705 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19706 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
19707 .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
19708 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
19709 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
19710 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19711 } },
19712 }, .{
19713 .required_features = .{ .mmx, null, null, null },
19714 .src_constraints = .{
19715 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } },
19716 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } },
19717 .any,
19718 },
19719 .patterns = &.{
19720 .{ .src = .{ .to_mem, .to_mem, .none } },
19721 },
19722 .extra_temps = .{
19723 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19724 .{ .type = .vector_4_u16, .kind = .{ .rc = .mmx } },
19725 .unused,
19726 .unused,
19727 .unused,
19728 .unused,
19729 .unused,
19730 .unused,
19731 .unused,
19732 .unused,
19733 .unused,
19734 },
19735 .dst_temps = .{ .mem, .unused },
19736 .clobbers = .{ .eflags = true },
19737 .each = .{ .once = &.{
19738 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19739 .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
19740 .{ ._, .p_w, .subus, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
19741 .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
19742 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
19743 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19744 } },
19745 }, .{
19746 .required_features = .{ .cmov, null, null, null },
19747 .src_constraints = .{
19748 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
19749 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
19750 .any,
19751 },
19752 .patterns = &.{
19753 .{ .src = .{ .to_mem, .to_mem, .none } },
19754 },
19755 .extra_temps = .{
19756 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19757 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
19758 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
19759 .unused,
19760 .unused,
19761 .unused,
19762 .unused,
19763 .unused,
19764 .unused,
19765 .unused,
19766 .unused,
19767 },
19768 .dst_temps = .{ .mem, .unused },
19769 .clobbers = .{ .eflags = true },
19770 .each = .{ .once = &.{
19771 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19772 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
19773 .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19774 .{ ._, ._, .sub, .tmp2w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19775 .{ ._, ._c, .cmov, .tmp2d, .tmp1d, ._, ._ },
19776 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
19777 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19778 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19779 } },
19780 }, .{
19781 .src_constraints = .{
19782 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
19783 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
19784 .any,
19785 },
19786 .patterns = &.{
19787 .{ .src = .{ .to_mem, .to_mem, .none } },
19788 },
19789 .extra_temps = .{
19790 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19791 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
19792 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
19793 .unused,
19794 .unused,
19795 .unused,
19796 .unused,
19797 .unused,
19798 .unused,
19799 .unused,
19800 .unused,
19801 },
19802 .dst_temps = .{ .mem, .unused },
19803 .clobbers = .{ .eflags = true },
19804 .each = .{ .once = &.{
19805 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19806 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
19807 .{ ._, ._, .sub, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
19808 .{ ._, ._, .cmc, ._, ._, ._, ._ },
19809 .{ ._, ._, .sbb, .tmp2d, .tmp2d, ._, ._ },
19810 .{ ._, ._, .@"and", .tmp1d, .tmp2d, ._, ._ },
19811 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
19812 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
19813 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19814 } },
19815 }, .{
19816 .required_features = .{ .avx2, null, null, null },
19817 .src_constraints = .{
19818 .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 32 } },
19819 .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 32 } },
19820 .any,
19821 },
19822 .patterns = &.{
19823 .{ .src = .{ .to_mem, .to_mem, .none } },
19824 },
19825 .extra_temps = .{
19826 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19827 .{ .type = .i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
19828 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
19829 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
19830 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
19831 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
19832 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
19833 .unused,
19834 .unused,
19835 .unused,
19836 .unused,
19837 },
19838 .dst_temps = .{ .mem, .unused },
19839 .clobbers = .{ .eflags = true },
19840 .each = .{ .once = &.{
19841 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
19842 .{ ._, .vp_d, .broadcast, .tmp2y, .lea(.tmp0d), ._, ._ },
19843 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19844 .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
19845 .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._, ._ },
19846 .{ ._, .vp_d, .sub, .tmp5y, .tmp3y, .tmp4y, ._ },
19847 .{ ._, .vp_d, .sra, .tmp6y, .tmp3y, .ui(31), ._ },
19848 .{ ._, .vp_d, .cmpgt, .tmp3y, .tmp5y, .tmp3y, ._ },
19849 .{ ._, .vp_, .xor, .tmp6y, .tmp6y, .tmp2y, ._ },
19850 .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp4y, ._ },
19851 .{ ._, .v_ps, .blendv, .tmp3y, .tmp5y, .tmp6y, .tmp3y },
19852 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
19853 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
19854 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19855 } },
19856 }, .{
19857 .required_features = .{ .avx, null, null, null },
19858 .src_constraints = .{
19859 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
19860 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
19861 .any,
19862 },
19863 .patterns = &.{
19864 .{ .src = .{ .to_mem, .to_mem, .none } },
19865 },
19866 .extra_temps = .{
19867 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19868 .{ .type = .i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
19869 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19870 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19871 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19872 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19873 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19874 .unused,
19875 .unused,
19876 .unused,
19877 .unused,
19878 },
19879 .dst_temps = .{ .mem, .unused },
19880 .clobbers = .{ .eflags = true },
19881 .each = .{ .once = &.{
19882 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
19883 .{ ._, .v_ss, .broadcast, .tmp2x, .lea(.tmp0d), ._, ._ },
19884 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19885 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
19886 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
19887 .{ ._, .vp_d, .sub, .tmp5x, .tmp3x, .tmp4x, ._ },
19888 .{ ._, .vp_d, .sra, .tmp6x, .tmp3x, .ui(31), ._ },
19889 .{ ._, .vp_d, .cmpgt, .tmp3x, .tmp5x, .tmp3x, ._ },
19890 .{ ._, .vp_, .xor, .tmp6x, .tmp6x, .tmp2x, ._ },
19891 .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp4x, ._ },
19892 .{ ._, .v_ps, .blendv, .tmp3x, .tmp5x, .tmp6x, .tmp3x },
19893 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
19894 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
19895 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19896 } },
19897 }, .{
19898 .required_features = .{ .sse4_1, null, null, null },
19899 .src_constraints = .{
19900 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
19901 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
19902 .any,
19903 },
19904 .patterns = &.{
19905 .{ .src = .{ .to_mem, .to_mem, .none } },
19906 },
19907 .extra_temps = .{
19908 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19909 .{ .type = .i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
19910 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19911 .{ .type = .vector_4_i32, .kind = .{ .reg = .xmm0 } },
19912 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19913 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19914 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
19915 .unused,
19916 .unused,
19917 .unused,
19918 .unused,
19919 },
19920 .dst_temps = .{ .mem, .unused },
19921 .clobbers = .{ .eflags = true },
19922 .each = .{ .once = &.{
19923 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
19924 .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
19925 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19926 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
19927 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
19928 .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
19929 .{ ._, .p_d, .sub, .tmp5x, .tmp4x, ._, ._ },
19930 .{ ._, ._dqa, .mov, .tmp6x, .tmp3x, ._, ._ },
19931 .{ ._, .p_d, .sra, .tmp6x, .ui(31), ._, ._ },
19932 .{ ._, .p_d, .cmpgt, .tmp3x, .tmp5x, ._, ._ },
19933 .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ },
19934 .{ ._, .p_, .xor, .tmp3x, .tmp4x, ._, ._ },
19935 .{ ._, ._ps, .blendv, .tmp6x, .tmp5x, .tmp3x, ._ },
19936 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp6x, ._, ._ },
19937 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
19938 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19939 } },
19940 }, .{
19941 .required_features = .{ .cmov, null, null, null },
19942 .src_constraints = .{
19943 .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 32 } },
19944 .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 32 } },
19945 .any,
19946 },
19947 .patterns = &.{
19948 .{ .src = .{ .to_mem, .to_mem, .none } },
19949 },
19950 .extra_temps = .{
19951 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19952 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
19953 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
19954 .unused,
19955 .unused,
19956 .unused,
19957 .unused,
19958 .unused,
19959 .unused,
19960 .unused,
19961 .unused,
19962 },
19963 .dst_temps = .{ .mem, .unused },
19964 .clobbers = .{ .eflags = true },
19965 .each = .{ .once = &.{
19966 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
19967 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
19968 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
19969 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
19970 .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
19971 .{ ._, ._, .sub, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
19972 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
19973 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
19974 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
19975 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
19976 } },
19977 }, .{
19978 .src_constraints = .{
19979 .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 32 } },
19980 .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 32 } },
19981 .any,
19982 },
19983 .patterns = &.{
19984 .{ .src = .{ .to_mem, .to_mem, .none } },
19985 },
19986 .extra_temps = .{
19987 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
19988 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
19989 .unused,
19990 .unused,
19991 .unused,
19992 .unused,
19993 .unused,
19994 .unused,
19995 .unused,
19996 .unused,
19997 .unused,
19998 },
19999 .dst_temps = .{ .mem, .unused },
20000 .clobbers = .{ .eflags = true },
20001 .each = .{ .once = &.{
20002 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20003 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
20004 .{ ._, ._, .sub, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
20005 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
20006 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
20007 .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smin), ._, ._ },
20008 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
20009 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
20010 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20011 } },
20012 }, .{
20013 .required_features = .{ .avx2, null, null, null },
20014 .src_constraints = .{
20015 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
20016 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
20017 .any,
20018 },
20019 .patterns = &.{
20020 .{ .src = .{ .to_mem, .to_mem, .none } },
20021 },
20022 .extra_temps = .{
20023 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20024 .{ .type = .i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
20025 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
20026 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
20027 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
20028 .unused,
20029 .unused,
20030 .unused,
20031 .unused,
20032 .unused,
20033 .unused,
20034 },
20035 .dst_temps = .{ .mem, .unused },
20036 .clobbers = .{ .eflags = true },
20037 .each = .{ .once = &.{
20038 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20039 .{ ._, .vp_d, .cmpeq, .tmp2y, .tmp2y, .tmp2y, ._ },
20040 .{ ._, .vp_d, .broadcast, .tmp3y, .lea(.tmp0d), ._, ._ },
20041 .{ ._, .vp_, .xor, .tmp2y, .tmp3y, .tmp2y, ._ },
20042 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20043 .{ .@"0:", .v_dqa, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
20044 .{ ._, .vp_d, .sub, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
20045 .{ ._, .vp_d, .maxs, .tmp4y, .tmp4y, .tmp3y, ._ },
20046 .{ ._, .vp_d, .mins, .tmp4y, .tmp4y, .tmp2y, ._ },
20047 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp4y, ._, ._ },
20048 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
20049 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20050 } },
20051 }, .{
20052 .required_features = .{ .avx, null, null, null },
20053 .src_constraints = .{
20054 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
20055 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
20056 .any,
20057 },
20058 .patterns = &.{
20059 .{ .src = .{ .to_mem, .to_mem, .none } },
20060 },
20061 .extra_temps = .{
20062 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20063 .{ .type = .i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
20064 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
20065 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
20066 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
20067 .unused,
20068 .unused,
20069 .unused,
20070 .unused,
20071 .unused,
20072 .unused,
20073 },
20074 .dst_temps = .{ .mem, .unused },
20075 .clobbers = .{ .eflags = true },
20076 .each = .{ .once = &.{
20077 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20078 .{ ._, .vp_d, .cmpeq, .tmp2x, .tmp2x, .tmp2x, ._ },
20079 .{ ._, .v_ss, .broadcast, .tmp3x, .lea(.tmp0d), ._, ._ },
20080 .{ ._, .vp_, .xor, .tmp2x, .tmp3x, .tmp2x, ._ },
20081 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20082 .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
20083 .{ ._, .vp_d, .sub, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
20084 .{ ._, .vp_d, .maxs, .tmp4x, .tmp4x, .tmp3x, ._ },
20085 .{ ._, .vp_d, .mins, .tmp4x, .tmp4x, .tmp2x, ._ },
20086 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
20087 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
20088 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20089 } },
20090 }, .{
20091 .required_features = .{ .sse4_1, null, null, null },
20092 .src_constraints = .{
20093 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
20094 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
20095 .any,
20096 },
20097 .patterns = &.{
20098 .{ .src = .{ .to_mem, .to_mem, .none } },
20099 },
20100 .extra_temps = .{
20101 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20102 .{ .type = .vector_4_i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
20103 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
20104 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
20105 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
20106 .unused,
20107 .unused,
20108 .unused,
20109 .unused,
20110 .unused,
20111 .unused,
20112 },
20113 .dst_temps = .{ .mem, .unused },
20114 .clobbers = .{ .eflags = true },
20115 .each = .{ .once = &.{
20116 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20117 .{ ._, .p_d, .cmpeq, .tmp2x, .tmp2x, ._, ._ },
20118 .{ ._, ._dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
20119 .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
20120 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20121 .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
20122 .{ ._, .p_d, .sub, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
20123 .{ ._, .p_d, .maxs, .tmp4x, .tmp3x, ._, ._ },
20124 .{ ._, .p_d, .mins, .tmp4x, .tmp2x, ._, ._ },
20125 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
20126 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
20127 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20128 } },
20129 }, .{
20130 .required_features = .{ .cmov, null, null, null },
20131 .src_constraints = .{
20132 .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 31 } },
20133 .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 31 } },
20134 .any,
20135 },
20136 .patterns = &.{
20137 .{ .src = .{ .to_mem, .to_mem, .none } },
20138 },
20139 .extra_temps = .{
20140 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20141 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20142 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20143 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20144 .unused,
20145 .unused,
20146 .unused,
20147 .unused,
20148 .unused,
20149 .unused,
20150 .unused,
20151 },
20152 .dst_temps = .{ .mem, .unused },
20153 .clobbers = .{ .eflags = true },
20154 .each = .{ .once = &.{
20155 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20156 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
20157 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
20158 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
20159 .{ ._, ._, .sub, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
20160 .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
20161 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
20162 .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
20163 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
20164 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
20165 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
20166 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20167 } },
20168 }, .{
20169 .src_constraints = .{
20170 .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 31 } },
20171 .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 31 } },
20172 .any,
20173 },
20174 .patterns = &.{
20175 .{ .src = .{ .to_mem, .to_mem, .none } },
20176 },
20177 .extra_temps = .{
20178 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20179 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20180 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20181 .unused,
20182 .unused,
20183 .unused,
20184 .unused,
20185 .unused,
20186 .unused,
20187 .unused,
20188 .unused,
20189 },
20190 .dst_temps = .{ .mem, .unused },
20191 .clobbers = .{ .eflags = true },
20192 .each = .{ .once = &.{
20193 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20194 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
20195 .{ ._, ._, .sub, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
20196 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
20197 .{ ._, ._, .add, .tmp2d, .tmp2d, ._, ._ },
20198 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
20199 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
20200 .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
20201 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
20202 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
20203 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20204 } },
20205 }, .{
20206 .required_features = .{ .bmi2, .cmov, null, null },
20207 .src_constraints = .{
20208 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
20209 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
20210 .any,
20211 },
20212 .patterns = &.{
20213 .{ .src = .{ .to_mem, .to_mem, .none } },
20214 },
20215 .extra_temps = .{
20216 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20217 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20218 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20219 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20220 .unused,
20221 .unused,
20222 .unused,
20223 .unused,
20224 .unused,
20225 .unused,
20226 .unused,
20227 },
20228 .dst_temps = .{ .mem, .unused },
20229 .clobbers = .{ .eflags = true },
20230 .each = .{ .once = &.{
20231 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20232 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
20233 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
20234 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
20235 .{ ._, ._, .sub, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
20236 .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
20237 .{ ._, ._rx, .ro, .tmp3d, .tmp1d, .uia(1, .src0, .add_bit_size_rem_64), ._ },
20238 .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
20239 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
20240 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
20241 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
20242 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20243 } },
20244 }, .{
20245 .required_features = .{ .cmov, null, null, null },
20246 .src_constraints = .{
20247 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
20248 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
20249 .any,
20250 },
20251 .patterns = &.{
20252 .{ .src = .{ .to_mem, .to_mem, .none } },
20253 },
20254 .extra_temps = .{
20255 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20256 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20257 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20258 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20259 .unused,
20260 .unused,
20261 .unused,
20262 .unused,
20263 .unused,
20264 .unused,
20265 .unused,
20266 },
20267 .dst_temps = .{ .mem, .unused },
20268 .clobbers = .{ .eflags = true },
20269 .each = .{ .once = &.{
20270 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20271 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
20272 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
20273 .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
20274 .{ ._, ._, .sub, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
20275 .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
20276 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
20277 .{ ._, ._l, .sa, .tmp3d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
20278 .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
20279 .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
20280 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
20281 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
20282 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20283 } },
20284 }, .{
20285 .src_constraints = .{
20286 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
20287 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
20288 .any,
20289 },
20290 .patterns = &.{
20291 .{ .src = .{ .to_mem, .to_mem, .none } },
20292 },
20293 .extra_temps = .{
20294 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20295 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20296 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
20297 .unused,
20298 .unused,
20299 .unused,
20300 .unused,
20301 .unused,
20302 .unused,
20303 .unused,
20304 .unused,
20305 },
20306 .dst_temps = .{ .mem, .unused },
20307 .clobbers = .{ .eflags = true },
20308 .each = .{ .once = &.{
20309 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20310 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
20311 .{ ._, ._, .sub, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
20312 .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
20313 .{ ._, ._l, .sa, .tmp2d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
20314 .{ ._, ._, .add, .tmp2d, .tmp2d, ._, ._ },
20315 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
20316 .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
20317 .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
20318 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
20319 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
20320 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20321 } },
20322 }, .{
20323 .required_features = .{ .avx2, null, null, null },
20324 .src_constraints = .{
20325 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
20326 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
20327 .any,
20328 },
20329 .patterns = &.{
20330 .{ .src = .{ .to_mem, .to_mem, .none } },
20331 },
20332 .extra_temps = .{
20333 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20334 .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
20335 .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
20336 .unused,
20337 .unused,
20338 .unused,
20339 .unused,
20340 .unused,
20341 .unused,
20342 .unused,
20343 .unused,
20344 },
20345 .dst_temps = .{ .mem, .unused },
20346 .clobbers = .{ .eflags = true },
20347 .each = .{ .once = &.{
20348 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20349 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._, ._ },
20350 .{ ._, .vp_d, .maxu, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
20351 .{ ._, .vp_d, .sub, .tmp1y, .tmp2y, .tmp1y, ._ },
20352 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
20353 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
20354 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20355 } },
20356 }, .{
20357 .required_features = .{ .avx, null, null, null },
20358 .src_constraints = .{
20359 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
20360 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
20361 .any,
20362 },
20363 .patterns = &.{
20364 .{ .src = .{ .to_mem, .to_mem, .none } },
20365 },
20366 .extra_temps = .{
20367 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20368 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
20369 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
20370 .unused,
20371 .unused,
20372 .unused,
20373 .unused,
20374 .unused,
20375 .unused,
20376 .unused,
20377 .unused,
20378 },
20379 .dst_temps = .{ .mem, .unused },
20380 .clobbers = .{ .eflags = true },
20381 .each = .{ .once = &.{
20382 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20383 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
20384 .{ ._, .vp_d, .maxu, .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
20385 .{ ._, .vp_d, .sub, .tmp1x, .tmp2x, .tmp1x, ._ },
20386 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
20387 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
20388 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20389 } },
20390 }, .{
20391 .required_features = .{ .sse4_1, null, null, null },
20392 .src_constraints = .{
20393 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
20394 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
20395 .any,
20396 },
20397 .patterns = &.{
20398 .{ .src = .{ .to_mem, .to_mem, .none } },
20399 },
20400 .extra_temps = .{
20401 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20402 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
20403 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
20404 .unused,
20405 .unused,
20406 .unused,
20407 .unused,
20408 .unused,
20409 .unused,
20410 .unused,
20411 .unused,
20412 },
20413 .dst_temps = .{ .mem, .unused },
20414 .clobbers = .{ .eflags = true },
20415 .each = .{ .once = &.{
20416 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20417 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
20418 .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
20419 .{ ._, .p_d, .maxu, .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
20420 .{ ._, .p_d, .sub, .tmp2x, .tmp1x, ._, ._ },
20421 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
20422 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
20423 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20424 } },
20425 }, .{
20426 .required_features = .{ .cmov, null, null, null },
20427 .src_constraints = .{
20428 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
20429 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
20430 .any,
20431 },
20432 .patterns = &.{
20433 .{ .src = .{ .to_mem, .to_mem, .none } },
20434 },
20435 .extra_temps = .{
20436 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20437 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
20438 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
20439 .unused,
20440 .unused,
20441 .unused,
20442 .unused,
20443 .unused,
20444 .unused,
20445 .unused,
20446 .unused,
20447 },
20448 .dst_temps = .{ .mem, .unused },
20449 .clobbers = .{ .eflags = true },
20450 .each = .{ .once = &.{
20451 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20452 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
20453 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
20454 .{ ._, ._, .sub, .tmp2d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
20455 .{ ._, ._c, .cmov, .tmp2d, .tmp1d, ._, ._ },
20456 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
20457 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
20458 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20459 } },
20460 }, .{
20461 .src_constraints = .{
20462 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
20463 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
20464 .any,
20465 },
20466 .patterns = &.{
20467 .{ .src = .{ .to_mem, .to_mem, .none } },
20468 },
20469 .extra_temps = .{
20470 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20471 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
20472 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
20473 .unused,
20474 .unused,
20475 .unused,
20476 .unused,
20477 .unused,
20478 .unused,
20479 .unused,
20480 .unused,
20481 },
20482 .dst_temps = .{ .mem, .unused },
20483 .clobbers = .{ .eflags = true },
20484 .each = .{ .once = &.{
20485 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20486 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
20487 .{ ._, ._, .sub, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
20488 .{ ._, ._, .cmc, ._, ._, ._, ._ },
20489 .{ ._, ._, .sbb, .tmp2d, .tmp2d, ._, ._ },
20490 .{ ._, ._, .@"and", .tmp1d, .tmp2d, ._, ._ },
20491 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
20492 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
20493 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20494 } },
20495 }, .{
20496 .required_features = .{ .avx2, null, null, null },
20497 .src_constraints = .{
20498 .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 64 } },
20499 .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 64 } },
20500 .any,
20501 },
20502 .patterns = &.{
20503 .{ .src = .{ .to_mem, .to_mem, .none } },
20504 },
20505 .extra_temps = .{
20506 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20507 .{ .type = .i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
20508 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20509 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20510 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20511 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20512 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20513 .unused,
20514 .unused,
20515 .unused,
20516 .unused,
20517 },
20518 .dst_temps = .{ .mem, .unused },
20519 .clobbers = .{ .eflags = true },
20520 .each = .{ .once = &.{
20521 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20522 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
20523 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20524 .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
20525 .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._, ._ },
20526 .{ ._, .vp_, .xor, .tmp5y, .tmp5y, .tmp5y, ._ },
20527 .{ ._, .vp_q, .sub, .tmp6y, .tmp3y, .tmp4y, ._ },
20528 .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp3y, ._ },
20529 .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp6y, .tmp3y, ._ },
20530 .{ ._, .vp_, .xor, .tmp5y, .tmp5y, .tmp2y, ._ },
20531 .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp4y, ._ },
20532 .{ ._, .v_pd, .blendv, .tmp5y, .tmp6y, .tmp5y, .tmp3y },
20533 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp5y, ._, ._ },
20534 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
20535 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20536 } },
20537 }, .{
20538 .required_features = .{ .avx, null, null, null },
20539 .src_constraints = .{
20540 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
20541 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
20542 .any,
20543 },
20544 .patterns = &.{
20545 .{ .src = .{ .to_mem, .to_mem, .none } },
20546 },
20547 .extra_temps = .{
20548 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20549 .{ .type = .i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
20550 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20551 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20552 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20553 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20554 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20555 .unused,
20556 .unused,
20557 .unused,
20558 .unused,
20559 },
20560 .dst_temps = .{ .mem, .unused },
20561 .clobbers = .{ .eflags = true },
20562 .each = .{ .once = &.{
20563 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20564 .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
20565 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20566 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
20567 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
20568 .{ ._, .vp_, .xor, .tmp5x, .tmp5x, .tmp5x, ._ },
20569 .{ ._, .vp_q, .sub, .tmp6x, .tmp3x, .tmp4x, ._ },
20570 .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp3x, ._ },
20571 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp6x, .tmp3x, ._ },
20572 .{ ._, .vp_, .xor, .tmp5x, .tmp5x, .tmp2x, ._ },
20573 .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp4x, ._ },
20574 .{ ._, .v_pd, .blendv, .tmp5x, .tmp6x, .tmp5x, .tmp3x },
20575 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp5x, ._, ._ },
20576 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
20577 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20578 } },
20579 }, .{
20580 .required_features = .{ .sse4_2, null, null, null },
20581 .src_constraints = .{
20582 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
20583 .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
20584 .any,
20585 },
20586 .patterns = &.{
20587 .{ .src = .{ .to_mem, .to_mem, .none } },
20588 },
20589 .extra_temps = .{
20590 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20591 .{ .type = .i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
20592 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20593 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20594 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20595 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20596 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20597 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
20598 .unused,
20599 .unused,
20600 .unused,
20601 },
20602 .dst_temps = .{ .mem, .unused },
20603 .clobbers = .{ .eflags = true },
20604 .each = .{ .once = &.{
20605 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20606 .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
20607 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20608 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
20609 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
20610 .{ ._, .p_, .xor, .tmp5x, .tmp5x, ._, ._ },
20611 .{ ._, ._dqa, .mov, .tmp6x, .tmp3x, ._, ._ },
20612 .{ ._, .p_q, .sub, .tmp6x, .tmp4x, ._, ._ },
20613 .{ ._, .p_q, .cmpgt, .tmp5x, .tmp3x, ._, ._ },
20614 .{ ._, ._dqa, .mov, .tmp7x, .tmp6x, ._, ._ },
20615 .{ ._, .p_q, .cmpgt, .tmp7x, .tmp3x, ._, ._ },
20616 .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ },
20617 .{ ._, .p_, .xor, .tmp7x, .tmp4x, ._, ._ },
20618 .{ ._, ._pd, .blendv, .tmp6x, .tmp5x, .tmp7x, ._ },
20619 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp6x, ._, ._ },
20620 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
20621 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20622 } },
20623 }, .{
20624 .required_features = .{ .@"64bit", .cmov, null, null },
20625 .src_constraints = .{
20626 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 64 } },
20627 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 64 } },
20628 .any,
20629 },
20630 .patterns = &.{
20631 .{ .src = .{ .to_mem, .to_mem, .none } },
20632 },
20633 .extra_temps = .{
20634 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20635 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20636 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20637 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20638 .unused,
20639 .unused,
20640 .unused,
20641 .unused,
20642 .unused,
20643 .unused,
20644 .unused,
20645 },
20646 .dst_temps = .{ .mem, .unused },
20647 .clobbers = .{ .eflags = true },
20648 .each = .{ .once = &.{
20649 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20650 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
20651 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
20652 .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
20653 .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
20654 .{ ._, ._, .xor, .tmp3q, .tmp1q, ._, ._ },
20655 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
20656 .{ ._, ._o, .cmov, .tmp2q, .tmp3q, ._, ._ },
20657 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
20658 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
20659 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20660 } },
20661 }, .{
20662 .required_features = .{ .@"64bit", null, null, null },
20663 .src_constraints = .{
20664 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 64 } },
20665 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 64 } },
20666 .any,
20667 },
20668 .patterns = &.{
20669 .{ .src = .{ .to_mem, .to_mem, .none } },
20670 },
20671 .extra_temps = .{
20672 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20673 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20674 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20675 .unused,
20676 .unused,
20677 .unused,
20678 .unused,
20679 .unused,
20680 .unused,
20681 .unused,
20682 .unused,
20683 },
20684 .dst_temps = .{ .mem, .unused },
20685 .clobbers = .{ .eflags = true },
20686 .each = .{ .once = &.{
20687 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20688 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smin), ._, ._ },
20689 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
20690 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
20691 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
20692 .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
20693 .{ ._, ._, .xor, .tmp2q, .tmp1q, ._, ._ },
20694 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
20695 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
20696 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20697 } },
20698 }, .{
20699 .required_features = .{ .avx2, null, null, null },
20700 .src_constraints = .{
20701 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
20702 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
20703 .any,
20704 },
20705 .patterns = &.{
20706 .{ .src = .{ .to_mem, .to_mem, .none } },
20707 },
20708 .extra_temps = .{
20709 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20710 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
20711 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20712 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20713 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20714 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
20715 .unused,
20716 .unused,
20717 .unused,
20718 .unused,
20719 .unused,
20720 },
20721 .dst_temps = .{ .mem, .unused },
20722 .clobbers = .{ .eflags = true },
20723 .each = .{ .once = &.{
20724 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20725 .{ ._, .vp_q, .cmpeq, .tmp2y, .tmp2y, .tmp2y, ._ },
20726 .{ ._, .vp_q, .broadcast, .tmp3y, .lea(.tmp0q), ._, ._ },
20727 .{ ._, .vp_, .xor, .tmp2y, .tmp3y, .tmp2y, ._ },
20728 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20729 .{ .@"0:", .v_dqa, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
20730 .{ ._, .vp_q, .sub, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
20731 .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp3y, .tmp4y, ._ },
20732 .{ ._, .vp_b, .blendv, .tmp4y, .tmp4y, .tmp3y, .tmp5y },
20733 .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp4y, .tmp2y, ._ },
20734 .{ ._, .vp_b, .blendv, .tmp4y, .tmp4y, .tmp2y, .tmp5y },
20735 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp4y, ._, ._ },
20736 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
20737 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20738 } },
20739 }, .{
20740 .required_features = .{ .avx, null, null, null },
20741 .src_constraints = .{
20742 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
20743 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
20744 .any,
20745 },
20746 .patterns = &.{
20747 .{ .src = .{ .to_mem, .to_mem, .none } },
20748 },
20749 .extra_temps = .{
20750 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20751 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
20752 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20753 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20754 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20755 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20756 .unused,
20757 .unused,
20758 .unused,
20759 .unused,
20760 .unused,
20761 },
20762 .dst_temps = .{ .mem, .unused },
20763 .clobbers = .{ .eflags = true },
20764 .each = .{ .once = &.{
20765 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20766 .{ ._, .vp_q, .cmpeq, .tmp2x, .tmp2x, .tmp2x, ._ },
20767 .{ ._, .v_, .movddup, .tmp3x, .lea(.tmp0q), ._, ._ },
20768 .{ ._, .vp_, .xor, .tmp2x, .tmp3x, .tmp2x, ._ },
20769 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20770 .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
20771 .{ ._, .vp_q, .sub, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
20772 .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp3x, .tmp4x, ._ },
20773 .{ ._, .vp_b, .blendv, .tmp4x, .tmp4x, .tmp3x, .tmp5x },
20774 .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp4x, .tmp2x, ._ },
20775 .{ ._, .vp_b, .blendv, .tmp4x, .tmp4x, .tmp2x, .tmp5x },
20776 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
20777 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
20778 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20779 } },
20780 }, .{
20781 .required_features = .{ .sse4_2, null, null, null },
20782 .src_constraints = .{
20783 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
20784 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
20785 .any,
20786 },
20787 .patterns = &.{
20788 .{ .src = .{ .to_mem, .to_mem, .none } },
20789 },
20790 .extra_temps = .{
20791 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20792 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
20793 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20794 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20795 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
20796 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
20797 .unused,
20798 .unused,
20799 .unused,
20800 .unused,
20801 .unused,
20802 },
20803 .dst_temps = .{ .mem, .unused },
20804 .clobbers = .{ .eflags = true },
20805 .each = .{ .once = &.{
20806 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
20807 .{ ._, .p_q, .cmpeq, .tmp2x, .tmp2x, ._, ._ },
20808 .{ ._, ._, .movddup, .tmp3x, .lea(.tmp0q), ._, ._ },
20809 .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
20810 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20811 .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
20812 .{ ._, .p_q, .sub, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
20813 .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
20814 .{ ._, .p_q, .cmpgt, .tmp5x, .tmp4x, ._, ._ },
20815 .{ ._, .p_b, .blendv, .tmp4x, .tmp3x, .tmp5x, ._ },
20816 .{ ._, ._dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
20817 .{ ._, .p_q, .cmpgt, .tmp5x, .tmp2x, ._, ._ },
20818 .{ ._, .p_b, .blendv, .tmp4x, .tmp2x, .tmp5x, ._ },
20819 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
20820 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
20821 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20822 } },
20823 }, .{
20824 .required_features = .{ .@"64bit", .cmov, null, null },
20825 .src_constraints = .{
20826 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 63 } },
20827 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 63 } },
20828 .any,
20829 },
20830 .patterns = &.{
20831 .{ .src = .{ .to_mem, .to_mem, .none } },
20832 },
20833 .extra_temps = .{
20834 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20835 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20836 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20837 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20838 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20839 .unused,
20840 .unused,
20841 .unused,
20842 .unused,
20843 .unused,
20844 .unused,
20845 },
20846 .dst_temps = .{ .mem, .unused },
20847 .clobbers = .{ .eflags = true },
20848 .each = .{ .once = &.{
20849 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20850 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
20851 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
20852 .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
20853 .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
20854 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
20855 .{ ._, ._, .xor, .tmp3q, .tmp1q, ._, ._ },
20856 .{ ._, ._, .mov, .tmp4q, .tmp2q, ._, ._ },
20857 .{ ._, ._, .add, .tmp4q, .tmp4q, ._, ._ },
20858 .{ ._, ._o, .cmov, .tmp2q, .tmp3q, ._, ._ },
20859 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
20860 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
20861 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20862 } },
20863 }, .{
20864 .required_features = .{ .@"64bit", null, null, null },
20865 .src_constraints = .{
20866 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 63 } },
20867 .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 63 } },
20868 .any,
20869 },
20870 .patterns = &.{
20871 .{ .src = .{ .to_mem, .to_mem, .none } },
20872 },
20873 .extra_temps = .{
20874 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20875 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20876 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20877 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20878 .unused,
20879 .unused,
20880 .unused,
20881 .unused,
20882 .unused,
20883 .unused,
20884 .unused,
20885 },
20886 .dst_temps = .{ .mem, .unused },
20887 .clobbers = .{ .eflags = true },
20888 .each = .{ .once = &.{
20889 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20890 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
20891 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
20892 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
20893 .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
20894 .{ ._, ._, .add, .tmp3q, .tmp3q, ._, ._ },
20895 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
20896 .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
20897 .{ ._, ._, .xor, .tmp2q, .tmp1q, ._, ._ },
20898 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
20899 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
20900 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20901 } },
20902 }, .{
20903 .required_features = .{ .@"64bit", .bmi2, .cmov, null },
20904 .src_constraints = .{
20905 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
20906 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
20907 .any,
20908 },
20909 .patterns = &.{
20910 .{ .src = .{ .to_mem, .to_mem, .none } },
20911 },
20912 .extra_temps = .{
20913 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20914 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20915 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20916 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20917 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20918 .unused,
20919 .unused,
20920 .unused,
20921 .unused,
20922 .unused,
20923 .unused,
20924 },
20925 .dst_temps = .{ .mem, .unused },
20926 .clobbers = .{ .eflags = true },
20927 .each = .{ .once = &.{
20928 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20929 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
20930 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
20931 .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
20932 .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
20933 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
20934 .{ ._, ._, .xor, .tmp3q, .tmp1q, ._, ._ },
20935 .{ ._, ._rx, .ro, .tmp4q, .tmp2q, .sia(-31, .src0, .add_bit_size_rem_64), ._ },
20936 .{ ._, ._, .add, .tmp4d, .tmp4d, ._, ._ },
20937 .{ ._, ._o, .cmov, .tmp2q, .tmp3q, ._, ._ },
20938 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
20939 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
20940 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20941 } },
20942 }, .{
20943 .required_features = .{ .@"64bit", .cmov, null, null },
20944 .src_constraints = .{
20945 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
20946 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
20947 .any,
20948 },
20949 .patterns = &.{
20950 .{ .src = .{ .to_mem, .to_mem, .none } },
20951 },
20952 .extra_temps = .{
20953 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20954 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20955 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20956 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20957 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20958 .unused,
20959 .unused,
20960 .unused,
20961 .unused,
20962 .unused,
20963 .unused,
20964 },
20965 .dst_temps = .{ .mem, .unused },
20966 .clobbers = .{ .eflags = true },
20967 .each = .{ .once = &.{
20968 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
20969 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
20970 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
20971 .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
20972 .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
20973 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
20974 .{ ._, ._, .xor, .tmp3q, .tmp1q, ._, ._ },
20975 .{ ._, ._, .mov, .tmp4q, .tmp2q, ._, ._ },
20976 .{ ._, ._r, .sa, .tmp4q, .sia(-31, .src0, .add_bit_size_rem_64), ._, ._ },
20977 .{ ._, ._, .add, .tmp4d, .tmp4d, ._, ._ },
20978 .{ ._, ._o, .cmov, .tmp2q, .tmp3q, ._, ._ },
20979 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
20980 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
20981 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
20982 } },
20983 }, .{
20984 .required_features = .{ .@"64bit", null, null, null },
20985 .src_constraints = .{
20986 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
20987 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
20988 .any,
20989 },
20990 .patterns = &.{
20991 .{ .src = .{ .to_mem, .to_mem, .none } },
20992 },
20993 .extra_temps = .{
20994 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
20995 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20996 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20997 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
20998 .unused,
20999 .unused,
21000 .unused,
21001 .unused,
21002 .unused,
21003 .unused,
21004 .unused,
21005 },
21006 .dst_temps = .{ .mem, .unused },
21007 .clobbers = .{ .eflags = true },
21008 .each = .{ .once = &.{
21009 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21010 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
21011 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
21012 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
21013 .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
21014 .{ ._, ._r, .sa, .tmp3q, .sia(-31, .src0, .add_bit_size_rem_64), ._, ._ },
21015 .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
21016 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
21017 .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
21018 .{ ._, ._, .xor, .tmp2q, .tmp1q, ._, ._ },
21019 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
21020 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
21021 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21022 } },
21023 }, .{
21024 .required_features = .{ .avx2, null, null, null },
21025 .src_constraints = .{
21026 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 64 } },
21027 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 64 } },
21028 .any,
21029 },
21030 .patterns = &.{
21031 .{ .src = .{ .to_mem, .to_mem, .none } },
21032 },
21033 .extra_temps = .{
21034 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21035 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
21036 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
21037 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
21038 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
21039 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
21040 .unused,
21041 .unused,
21042 .unused,
21043 .unused,
21044 .unused,
21045 },
21046 .dst_temps = .{ .mem, .unused },
21047 .clobbers = .{ .eflags = true },
21048 .each = .{ .once = &.{
21049 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
21050 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
21051 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21052 .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
21053 .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._, ._ },
21054 .{ ._, .vp_q, .sub, .tmp5y, .tmp3y, .tmp4y, ._ },
21055 .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp2y, ._ },
21056 .{ ._, .vp_, .xor, .tmp4y, .tmp4y, .tmp2y, ._ },
21057 .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp3y, .tmp4y, ._ },
21058 .{ ._, .vp_, .@"and", .tmp3y, .tmp5y, .tmp3y, ._ },
21059 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
21060 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
21061 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21062 } },
21063 }, .{
21064 .required_features = .{ .avx, null, null, null },
21065 .src_constraints = .{
21066 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
21067 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
21068 .any,
21069 },
21070 .patterns = &.{
21071 .{ .src = .{ .to_mem, .to_mem, .none } },
21072 },
21073 .extra_temps = .{
21074 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21075 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
21076 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21077 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21078 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21079 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21080 .unused,
21081 .unused,
21082 .unused,
21083 .unused,
21084 .unused,
21085 },
21086 .dst_temps = .{ .mem, .unused },
21087 .clobbers = .{ .eflags = true },
21088 .each = .{ .once = &.{
21089 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
21090 .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
21091 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21092 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
21093 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
21094 .{ ._, .vp_q, .sub, .tmp5x, .tmp3x, .tmp4x, ._ },
21095 .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp2x, ._ },
21096 .{ ._, .vp_, .xor, .tmp4x, .tmp4x, .tmp2x, ._ },
21097 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp3x, .tmp4x, ._ },
21098 .{ ._, .vp_, .@"and", .tmp3x, .tmp5x, .tmp3x, ._ },
21099 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
21100 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
21101 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21102 } },
21103 }, .{
21104 .required_features = .{ .sse4_2, null, null, null },
21105 .src_constraints = .{
21106 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
21107 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
21108 .any,
21109 },
21110 .patterns = &.{
21111 .{ .src = .{ .to_mem, .to_mem, .none } },
21112 },
21113 .extra_temps = .{
21114 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21115 .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
21116 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21117 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21118 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21119 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21120 .unused,
21121 .unused,
21122 .unused,
21123 .unused,
21124 .unused,
21125 },
21126 .dst_temps = .{ .mem, .unused },
21127 .clobbers = .{ .eflags = true },
21128 .each = .{ .once = &.{
21129 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
21130 .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
21131 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21132 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
21133 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
21134 .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
21135 .{ ._, .p_q, .sub, .tmp5x, .tmp4x, ._, ._ },
21136 .{ ._, .p_, .xor, .tmp3x, .tmp2x, ._, ._ },
21137 .{ ._, .p_, .xor, .tmp4x, .tmp2x, ._, ._ },
21138 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp4x, ._, ._ },
21139 .{ ._, .p_, .@"and", .tmp3x, .tmp5x, ._, ._ },
21140 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
21141 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
21142 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21143 } },
21144 }, .{
21145 .required_features = .{ .@"64bit", .cmov, null, null },
21146 .src_constraints = .{
21147 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 64 } },
21148 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 64 } },
21149 .any,
21150 },
21151 .patterns = &.{
21152 .{ .src = .{ .to_mem, .to_mem, .none } },
21153 },
21154 .extra_temps = .{
21155 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21156 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
21157 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
21158 .unused,
21159 .unused,
21160 .unused,
21161 .unused,
21162 .unused,
21163 .unused,
21164 .unused,
21165 .unused,
21166 },
21167 .dst_temps = .{ .mem, .unused },
21168 .clobbers = .{ .eflags = true },
21169 .each = .{ .once = &.{
21170 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21171 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
21172 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
21173 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
21174 .{ ._, ._c, .cmov, .tmp2q, .tmp1q, ._, ._ },
21175 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
21176 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
21177 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21178 } },
21179 }, .{
21180 .required_features = .{ .@"64bit", null, null, null },
21181 .src_constraints = .{
21182 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 64 } },
21183 .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 64 } },
21184 .any,
21185 },
21186 .patterns = &.{
21187 .{ .src = .{ .to_mem, .to_mem, .none } },
21188 },
21189 .extra_temps = .{
21190 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21191 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
21192 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
21193 .unused,
21194 .unused,
21195 .unused,
21196 .unused,
21197 .unused,
21198 .unused,
21199 .unused,
21200 .unused,
21201 },
21202 .dst_temps = .{ .mem, .unused },
21203 .clobbers = .{ .eflags = true },
21204 .each = .{ .once = &.{
21205 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21206 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
21207 .{ ._, ._, .sub, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
21208 .{ ._, ._, .cmc, ._, ._, ._, ._ },
21209 .{ ._, ._, .sbb, .tmp2q, .tmp2q, ._, ._ },
21210 .{ ._, ._, .@"and", .tmp1q, .tmp2q, ._, ._ },
21211 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
21212 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
21213 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21214 } },
21215 }, .{
21216 .required_features = .{ .avx2, null, null, null },
21217 .src_constraints = .{
21218 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
21219 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
21220 .any,
21221 },
21222 .patterns = &.{
21223 .{ .src = .{ .to_mem, .to_mem, .none } },
21224 },
21225 .extra_temps = .{
21226 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21227 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
21228 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
21229 .unused,
21230 .unused,
21231 .unused,
21232 .unused,
21233 .unused,
21234 .unused,
21235 .unused,
21236 .unused,
21237 },
21238 .dst_temps = .{ .mem, .unused },
21239 .clobbers = .{ .eflags = true },
21240 .each = .{ .once = &.{
21241 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21242 .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
21243 .{ .@"0:", .v_dqa, .mov, .tmp2y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
21244 .{ ._, .vp_q, .sub, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
21245 .{ ._, .v_pd, .blendv, .tmp2y, .tmp2y, .tmp1y, .tmp2y },
21246 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp2y, ._, ._ },
21247 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
21248 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21249 } },
21250 }, .{
21251 .required_features = .{ .avx, null, null, null },
21252 .src_constraints = .{
21253 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
21254 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
21255 .any,
21256 },
21257 .patterns = &.{
21258 .{ .src = .{ .to_mem, .to_mem, .none } },
21259 },
21260 .extra_temps = .{
21261 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21262 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21263 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21264 .unused,
21265 .unused,
21266 .unused,
21267 .unused,
21268 .unused,
21269 .unused,
21270 .unused,
21271 .unused,
21272 },
21273 .dst_temps = .{ .mem, .unused },
21274 .clobbers = .{ .eflags = true },
21275 .each = .{ .once = &.{
21276 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21277 .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
21278 .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
21279 .{ ._, .vp_q, .sub, .tmp2x, .tmp2x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
21280 .{ ._, .v_pd, .blendv, .tmp2x, .tmp2x, .tmp1x, .tmp2x },
21281 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
21282 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
21283 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21284 } },
21285 }, .{
21286 .required_features = .{ .sse4_1, null, null, null },
21287 .src_constraints = .{
21288 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
21289 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
21290 .any,
21291 },
21292 .patterns = &.{
21293 .{ .src = .{ .to_mem, .to_mem, .none } },
21294 },
21295 .extra_temps = .{
21296 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21297 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
21298 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
21299 .unused,
21300 .unused,
21301 .unused,
21302 .unused,
21303 .unused,
21304 .unused,
21305 .unused,
21306 .unused,
21307 },
21308 .dst_temps = .{ .mem, .unused },
21309 .clobbers = .{ .eflags = true },
21310 .each = .{ .once = &.{
21311 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21312 .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
21313 .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
21314 .{ ._, .p_q, .sub, .tmp2x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
21315 .{ ._, ._pd, .blendv, .tmp2x, .tmp1x, .tmp2x, ._ },
21316 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
21317 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
21318 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21319 } },
21320 }, .{
21321 .required_features = .{ .@"64bit", .cmov, null, null },
21322 .src_constraints = .{
21323 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
21324 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
21325 .any,
21326 },
21327 .patterns = &.{
21328 .{ .src = .{ .to_mem, .to_mem, .none } },
21329 },
21330 .extra_temps = .{
21331 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21332 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
21333 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
21334 .unused,
21335 .unused,
21336 .unused,
21337 .unused,
21338 .unused,
21339 .unused,
21340 .unused,
21341 .unused,
21342 },
21343 .dst_temps = .{ .mem, .unused },
21344 .clobbers = .{ .eflags = true },
21345 .each = .{ .once = &.{
21346 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21347 .{ ._, ._, .xor, .tmp1q, .tmp1q, ._, ._ },
21348 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
21349 .{ ._, ._, .sub, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
21350 .{ ._, ._c, .cmov, .tmp2q, .tmp1q, ._, ._ },
21351 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
21352 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
21353 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21354 } },
21355 }, .{
21356 .required_features = .{ .@"64bit", null, null, null },
21357 .src_constraints = .{
21358 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
21359 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
21360 .any,
21361 },
21362 .patterns = &.{
21363 .{ .src = .{ .to_mem, .to_mem, .none } },
21364 },
21365 .extra_temps = .{
21366 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21367 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
21368 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
21369 .unused,
21370 .unused,
21371 .unused,
21372 .unused,
21373 .unused,
21374 .unused,
21375 .unused,
21376 .unused,
21377 },
21378 .dst_temps = .{ .mem, .unused },
21379 .clobbers = .{ .eflags = true },
21380 .each = .{ .once = &.{
21381 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21382 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
21383 .{ ._, ._, .sub, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
21384 .{ ._, ._, .cmc, ._, ._, ._, ._ },
21385 .{ ._, ._, .sbb, .tmp2q, .tmp2q, ._, ._ },
21386 .{ ._, ._, .@"and", .tmp1q, .tmp2q, ._, ._ },
21387 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
21388 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
21389 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21390 } },
21391 }, .{
21392 .required_features = .{ .@"64bit", null, null, null },
21393 .src_constraints = .{
21394 .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
21395 .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
21396 .any,
21397 },
21398 .patterns = &.{
21399 .{ .src = .{ .to_mem, .to_mem, .none } },
21400 },
21401 .extra_temps = .{
21402 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21403 .{ .type = .usize, .kind = .{ .reg = .rdi } },
21404 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21405 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21406 .{ .type = .isize, .kind = .{ .reg = .rcx } },
21407 .{ .type = .i64, .kind = .{ .reg = .rax } },
21408 .unused,
21409 .unused,
21410 .unused,
21411 .unused,
21412 .unused,
21413 },
21414 .dst_temps = .{ .mem, .unused },
21415 .clobbers = .{ .eflags = true },
21416 .each = .{ .once = &.{
21417 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21418 .{ ._, ._c, .cl, ._, ._, ._, ._ },
21419 .{ .@"0:", ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
21420 .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
21421 .{ ._, ._, .lea, .tmp3p, .memiad(.dst0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
21422 .{ ._, ._, .mov, .tmp4p, .sia(1, .src0, .sub_elem_size_div_8), ._, ._ },
21423 .{ .@"1:", ._, .mov, .tmp5q, .leasi(.tmp1q, .@"8", .tmp4), ._, ._ },
21424 .{ ._, ._, .sbb, .tmp5q, .leasi(.tmp2q, .@"8", .tmp4), ._, ._ },
21425 .{ ._, ._, .mov, .leasi(.tmp3q, .@"8", .tmp4), .tmp5q, ._, ._ },
21426 .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
21427 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
21428 .{ ._, ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
21429 .{ ._, ._, .sbb, .tmp5q, .lea(.tmp2q), ._, ._ },
21430 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
21431 .{ ._, ._, .lea, .tmp1p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },
21432 .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
21433 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
21434 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
21435 .{ ._, ._, .mov, .tmp4q, .ua(.src0, .add_smin), ._, ._ },
21436 .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
21437 .{ .@"1:", ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
21438 .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
21439 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21440 } },
21441 }, .{
21442 .required_features = .{ .@"64bit", null, null, null },
21443 .src_constraints = .{
21444 .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
21445 .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
21446 .any,
21447 },
21448 .patterns = &.{
21449 .{ .src = .{ .to_mem, .to_mem, .none } },
21450 },
21451 .extra_temps = .{
21452 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21453 .{ .type = .usize, .kind = .{ .reg = .rdi } },
21454 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21455 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21456 .{ .type = .isize, .kind = .{ .reg = .rcx } },
21457 .{ .type = .i64, .kind = .{ .reg = .rax } },
21458 .unused,
21459 .unused,
21460 .unused,
21461 .unused,
21462 .unused,
21463 },
21464 .dst_temps = .{ .mem, .unused },
21465 .clobbers = .{ .eflags = true },
21466 .each = .{ .once = &.{
21467 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21468 .{ ._, ._c, .cl, ._, ._, ._, ._ },
21469 .{ .@"0:", ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_unaligned_size_add_elem_size, -16), ._, ._ },
21470 .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size_add_elem_size, -16), ._, ._ },
21471 .{ ._, ._, .lea, .tmp3p, .memiad(.dst0, .tmp0, .add_unaligned_size_add_elem_size, -16), ._, ._ },
21472 .{ ._, ._, .mov, .tmp4p, .sia(2, .src0, .sub_elem_size_div_8), ._, ._ },
21473 .{ .@"1:", ._, .mov, .tmp5q, .leasi(.tmp1q, .@"8", .tmp4), ._, ._ },
21474 .{ ._, ._, .sbb, .tmp5q, .leasi(.tmp2q, .@"8", .tmp4), ._, ._ },
21475 .{ ._, ._, .mov, .leasi(.tmp3q, .@"8", .tmp4), .tmp5q, ._, ._ },
21476 .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
21477 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
21478 .{ ._, ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
21479 .{ ._, ._, .sbb, .tmp5q, .lea(.tmp2q), ._, ._ },
21480 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
21481 .{ ._, ._, .lea, .tmp1p, .leaad(.tmp3, .sub_src0_elem_size, 16), ._, ._ },
21482 .{ ._, ._, .mov, .tmp4d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
21483 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
21484 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
21485 .{ ._, ._, .mov, .tmp4q, .ua(.src0, .add_smin), ._, ._ },
21486 .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
21487 .{ .@"1:", ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
21488 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
21489 .{ ._, ._, .mov, .lead(.tmp3q, 8), .tmp5q, ._, ._ },
21490 .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
21491 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21492 } },
21493 }, .{
21494 .required_features = .{ .@"64bit", null, null, null },
21495 .src_constraints = .{
21496 .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .qword } },
21497 .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .qword } },
21498 .any,
21499 },
21500 .patterns = &.{
21501 .{ .src = .{ .to_mem, .to_mem, .none } },
21502 },
21503 .extra_temps = .{
21504 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21505 .{ .type = .usize, .kind = .{ .reg = .rdi } },
21506 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21507 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21508 .{ .type = .isize, .kind = .{ .reg = .rcx } },
21509 .{ .type = .i64, .kind = .{ .reg = .rax } },
21510 .unused,
21511 .unused,
21512 .unused,
21513 .unused,
21514 .unused,
21515 },
21516 .dst_temps = .{ .mem, .unused },
21517 .clobbers = .{ .eflags = true },
21518 .each = .{ .once = &.{
21519 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21520 .{ ._, ._c, .cl, ._, ._, ._, ._ },
21521 .{ .@"0:", ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
21522 .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
21523 .{ ._, ._, .lea, .tmp3p, .memiad(.dst0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
21524 .{ ._, ._, .mov, .tmp4p, .sia(1, .src0, .sub_elem_size_div_8), ._, ._ },
21525 .{ .@"1:", ._, .mov, .tmp5q, .leasi(.tmp1q, .@"8", .tmp4), ._, ._ },
21526 .{ ._, ._, .sbb, .tmp5q, .leasi(.tmp2q, .@"8", .tmp4), ._, ._ },
21527 .{ ._, ._, .mov, .leasi(.tmp3q, .@"8", .tmp4), .tmp5q, ._, ._ },
21528 .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
21529 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
21530 .{ ._, ._l, .sa, .tmp5q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
21531 .{ ._, ._, .add, .tmp5q, .tmp5q, ._, ._ },
21532 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
21533 .{ ._, ._, .lea, .tmp1p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },
21534 .{ ._, ._, .mov, .tmp4d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
21535 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
21536 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
21537 .{ ._, ._, .mov, .tmp4q, .ua(.src0, .add_smin), ._, ._ },
21538 .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
21539 .{ ._, ._, .mov, .lead(.tmp3q, -8), .tmp5q, ._, ._ },
21540 .{ .@"1:", ._r, .sa, .tmp5q, .ui(63), ._, ._ },
21541 .{ ._, ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
21542 .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
21543 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21544 } },
21545 }, .{
21546 .required_features = .{ .@"64bit", null, null, null },
21547 .src_constraints = .{
21548 .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .xword } },
21549 .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .xword } },
21550 .any,
21551 },
21552 .patterns = &.{
21553 .{ .src = .{ .to_mem, .to_mem, .none } },
21554 },
21555 .extra_temps = .{
21556 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21557 .{ .type = .usize, .kind = .{ .reg = .rdi } },
21558 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21559 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21560 .{ .type = .isize, .kind = .{ .reg = .rcx } },
21561 .{ .type = .i64, .kind = .{ .reg = .rax } },
21562 .unused,
21563 .unused,
21564 .unused,
21565 .unused,
21566 .unused,
21567 },
21568 .dst_temps = .{ .mem, .unused },
21569 .clobbers = .{ .eflags = true },
21570 .each = .{ .once = &.{
21571 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21572 .{ ._, ._c, .cl, ._, ._, ._, ._ },
21573 .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
21574 .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
21575 .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
21576 .{ ._, ._, .mov, .tmp4p, .sa(.src0, .sub_elem_size_div_8), ._, ._ },
21577 .{ .@"1:", ._, .mov, .tmp5q, .leasi(.tmp1q, .@"8", .tmp4), ._, ._ },
21578 .{ ._, ._, .sbb, .tmp5q, .leasi(.tmp2q, .@"8", .tmp4), ._, ._ },
21579 .{ ._, ._, .mov, .leasi(.tmp3q, .@"8", .tmp4), .tmp5q, ._, ._ },
21580 .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
21581 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
21582 .{ ._, ._l, .sa, .tmp5q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
21583 .{ ._, ._, .add, .tmp5q, .tmp5q, ._, ._ },
21584 .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
21585 .{ ._, ._, .lea, .tmp1p, .leaa(.tmp3, .sub_src0_elem_size), ._, ._ },
21586 .{ ._, ._, .mov, .tmp4d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
21587 .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
21588 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
21589 .{ ._, ._, .mov, .tmp4q, .ua(.src0, .add_smin), ._, ._ },
21590 .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
21591 .{ ._, ._, .mov, .lead(.tmp3q, -8), .tmp5q, ._, ._ },
21592 .{ .@"1:", ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
21593 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21594 } },
21595 }, .{
21596 .required_features = .{ .@"64bit", null, null, null },
21597 .src_constraints = .{
21598 .{ .scalar_remainder_unsigned_int = .{ .of = .qword, .is = .qword } },
21599 .{ .scalar_remainder_unsigned_int = .{ .of = .qword, .is = .qword } },
21600 .any,
21601 },
21602 .patterns = &.{
21603 .{ .src = .{ .to_mem, .to_mem, .none } },
21604 },
21605 .extra_temps = .{
21606 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21607 .{ .type = .u64, .kind = .{ .reg = .rax } },
21608 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21609 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21610 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
21611 .{ .type = .isize, .kind = .{ .reg = .rdi } },
21612 .{ .type = .u64, .kind = .{ .reg = .rcx } },
21613 .unused,
21614 .unused,
21615 .unused,
21616 .unused,
21617 },
21618 .dst_temps = .{ .mem, .unused },
21619 .clobbers = .{ .eflags = true },
21620 .each = .{ .once = &.{
21621 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
21622 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
21623 .{ .@"0:", ._, .lea, .tmp2p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
21624 .{ ._, ._, .lea, .tmp3p, .memia(.src1, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
21625 .{ ._, ._, .lea, .tmp4p, .memia(.dst0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
21626 .{ ._, ._, .mov, .tmp5p, .sa(.src0, .sub_elem_size_div_8), ._, ._ },
21627 .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
21628 .{ ._, ._, .sbb, .tmp6q, .leasi(.tmp3q, .@"8", .tmp5), ._, ._ },
21629 .{ ._, ._, .mov, .leasi(.tmp4q, .@"8", .tmp5), .tmp6q, ._, ._ },
21630 .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
21631 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
21632 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
21633 .{ ._, ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size), ._, ._ },
21634 .{ ._, ._, .mov, .tmp6d, .sa(.src0, .add_elem_size_div_8), ._, ._ },
21635 .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
21636 .{ .@"1:", ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
21637 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21638 } },
16520 } }) catch |err| switch (err) {21639 } }) catch |err| switch (err) {
16521 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{21640 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
16522 @tagName(air_tag),21641 @tagName(air_tag),
test/behavior/vector.zig+1-1
...@@ -965,12 +965,12 @@ test "saturating add" {...@@ -965,12 +965,12 @@ test "saturating add" {
965965
966test "saturating subtraction" {966test "saturating subtraction" {
967 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO967 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
968 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
969 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO968 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
970 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO969 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
971 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO970 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
972 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;971 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
973 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;972 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
973 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
974974
975 const S = struct {975 const S = struct {
976 fn doTheTest() !void {976 fn doTheTest() !void {
test/behavior/x86_64/binary.zig+1
...@@ -5103,6 +5103,7 @@ inline fn subSat(comptime Type: type, lhs: Type, rhs: Type) Type {...@@ -5103,6 +5103,7 @@ inline fn subSat(comptime Type: type, lhs: Type, rhs: Type) Type {
5103test subSat {5103test subSat {
5104 const test_sub_sat = binary(subSat, .{});5104 const test_sub_sat = binary(subSat, .{});
5105 try test_sub_sat.testInts();5105 try test_sub_sat.testInts();
5106 try test_sub_sat.testIntVectors();
5106}5107}
51075108
5108inline fn mulUnsafe(comptime Type: type, lhs: Type, rhs: Type) DoubleBits(Type) {5109inline fn mulUnsafe(comptime Type: type, lhs: Type, rhs: Type) DoubleBits(Type) {