Commit 6d68a494c8
Changed files (15)
lib
std
zig
src
test
lib/std/zig/Zir.zig
@@ -2142,7 +2142,7 @@ pub const Inst = struct {
ref_start_index = static_len,
_,
- pub const static_len = 97;
+ pub const static_len = 100;
pub fn toRef(i: Index) Inst.Ref {
return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
@@ -2225,6 +2225,7 @@ pub const Inst = struct {
single_const_pointer_to_comptime_int_type,
slice_const_u8_type,
slice_const_u8_sentinel_0_type,
+ vector_8_i8_type,
vector_16_i8_type,
vector_32_i8_type,
vector_1_u8_type,
@@ -2233,8 +2234,10 @@ pub const Inst = struct {
vector_8_u8_type,
vector_16_u8_type,
vector_32_u8_type,
+ vector_4_i16_type,
vector_8_i16_type,
vector_16_i16_type,
+ vector_4_u16_type,
vector_8_u16_type,
vector_16_u16_type,
vector_4_i32_type,
src/arch/x86_64/CodeGen.zig
@@ -2408,7 +2408,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}
fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
- @setEvalBranchQuota(15_900);
+ @setEvalBranchQuota(16_900);
const pt = cg.pt;
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
@@ -2691,6 +2691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
@@ -2723,6 +2724,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -2755,6 +2757,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -2787,6 +2790,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
@@ -2818,6 +2822,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
@@ -2898,6 +2903,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
@@ -2930,6 +2936,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -2962,6 +2969,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -2993,6 +3001,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3073,6 +3082,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3105,6 +3115,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3137,6 +3148,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3168,6 +3180,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3248,6 +3261,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3280,6 +3294,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3312,6 +3327,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3344,6 +3360,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
@@ -3376,6 +3393,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
@@ -3414,6 +3432,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
@@ -4085,6 +4104,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -4178,6 +4198,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -4345,12 +4366,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
},
.add_safe => unreachable,
- .add_sat => |air_tag| if (use_old) try cg.airAddSat(inst) else fallback: {
+ .add_sat => |air_tag| if (use_old) try cg.airAddSat(inst) else {
const bin_op = air_datas[@intFromEnum(inst)].bin_op;
- if (cg.typeOf(bin_op.lhs).isVector(zcu)) break :fallback try cg.airAddSat(inst);
var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
var res: [1]Temp = undefined;
cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
+ .src_constraints = .{ .{ .exact_int = 1 }, .{ .exact_int = 1 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .imm8, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .@"or", .dst0b, .src1b, ._, ._ },
+ } },
+ }, .{
.required_features = .{ .cmov, null, null, null },
.src_constraints = .{ .{ .exact_signed_int = 8 }, .{ .exact_signed_int = 8 }, .any },
.patterns = &.{
@@ -4427,8 +4461,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
.{ ._, ._r, .sa, .tmp0b, .ui(7), ._, ._ },
- .{ ._, ._, .xor, .tmp0b, .sa(.src0, .add_smax), ._, ._ },
.{ ._, ._, .add, .dst0b, .src1b, ._, ._ },
+ .{ ._, ._, .xor, .tmp0b, .sa(.src0, .add_smax), ._, ._ },
.{ ._, ._, .@"test", .dst0b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
.{ ._, ._po, .cmov, .dst0d, .tmp0d, ._, ._ },
} },
@@ -4528,7 +4562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .dst0b, .ua(.src0, .add_umax), ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, .cmov, null, null },
+ .required_features = .{ .cmov, .fast_imm16, null, null },
.src_constraints = .{ .{ .exact_signed_int = 16 }, .{ .exact_signed_int = 16 }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_gpr, .imm16, .none } },
@@ -4538,7 +4572,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
},
.extra_temps = .{
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -4627,7 +4661,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .xor, .dst0d, .sa(.src0, .add_smin), ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, .cmov, null, null },
+ .required_features = .{ .cmov, .fast_imm16, null, null },
.src_constraints = .{ .{ .exact_signed_int = 15 }, .{ .exact_signed_int = 15 }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_gpr, .imm16, .none } },
@@ -4660,7 +4694,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._o, .cmov, .dst0d, .tmp0d, ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, .cmov, null, null },
+ .required_features = .{ .cmov, .fast_imm16, null, null },
.src_constraints = .{ .{ .exact_signed_int = 15 }, .{ .exact_signed_int = 15 }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
@@ -4873,7 +4907,133 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .xor, .dst0d, .sa(.src0, .add_smax), ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, .cmov, null, null },
+ .required_features = .{ .bmi2, .cmov, .fast_imm16, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0w, .ui(15), ._, ._ },
+ .{ ._, ._, .add, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._, .xor, .tmp0w, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._rx, .ro, .tmp1d, .dst0d, .uia(1, .src0, .add_bit_size), ._ },
+ .{ ._, ._, .add, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._o, .cmov, .dst0d, .tmp0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .bmi2, .cmov, .fast_imm16, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0w, .ui(15), ._, ._ },
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0w, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._rx, .ro, .tmp1d, .dst0d, .uia(1, .src0, .add_bit_size), ._ },
+ .{ ._, ._, .add, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._o, .cmov, .dst0d, .tmp0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .bmi2, .cmov, null, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0w, .ui(15), ._, ._ },
+ .{ ._, ._, .add, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._rx, .ro, .tmp1d, .dst0d, .uia(1, .src0, .add_bit_size), ._ },
+ .{ ._, ._, .add, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._o, .cmov, .dst0d, .tmp0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .bmi2, .cmov, null, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0w, .ui(15), ._, ._ },
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._rx, .ro, .tmp1d, .dst0d, .uia(1, .src0, .add_bit_size), ._ },
+ .{ ._, ._, .add, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._o, .cmov, .dst0d, .tmp0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, .fast_imm16, null, null },
.src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_gpr, .imm16, .none } },
@@ -4907,7 +5067,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._o, .cmov, .dst0d, .tmp0d, ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, .cmov, null, null },
+ .required_features = .{ .cmov, .fast_imm16, null, null },
.src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
@@ -5387,6 +5547,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._r, .sa, .dst0d, .ui(31), ._, ._ },
.{ ._, ._, .xor, .dst0d, .sa(.src0, .add_smax), ._, ._ },
} },
+ }, .{
+ .required_features = .{ .bmi2, .cmov, null, null },
+ .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .imm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._rx, .ro, .tmp1d, .dst0d, .uia(1, .src0, .add_bit_size), ._ },
+ .{ ._, ._, .add, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._o, .cmov, .dst0d, .tmp0d, ._, ._ },
+ } },
}, .{
.required_features = .{ .cmov, null, null, null },
.src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword }, .any },
@@ -5636,18 +5830,6497 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{ .{ .exact_signed_int = 63 }, .{ .exact_signed_int = 63 }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_gpr, .simm32, .none } },
- .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._, .add, .tmp0q, .tmp0q, ._, ._ },
+ .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .xor, .dst0q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .cmov, null },
+ .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .xor, .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._rx, .ro, .tmp1q, .dst0q, .sia(-31, .src0, .add_bit_size), ._ },
+ .{ ._, ._, .add, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._o, .cmov, .dst0q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .xor, .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .dst0q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .sia(-31, .src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._o, .cmov, .dst0q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0q, .sia(-31, .src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .xor, .dst0q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .{ .exact_unsigned_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .cmp, .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._a, .cmov, .dst0q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .cmp, .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._na, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .cmp, .dst0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._na, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_smin), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp2q, ._, ._ },
+ .{ .@"0:", ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_size), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-2, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_smin), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp2q, ._, ._ },
+ .{ .@"0:", ._, .mov, .memad(.dst0q, .add_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._l, .sa, .tmp1q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp1q, .tmp1q, ._, ._ },
+ .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-2, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_smin), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp2q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp1q, ._, ._ },
+ .{ .@"0:", ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp2q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -8), .tmp2q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._na, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-2, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_size), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._l, .sa, .tmp1q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp1q, .tmp1q, ._, ._ },
+ .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_smin), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp2q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp2q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_size), .tmp2q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._na, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_int = .{ .of = .qword, .is = 1 } },
+ .{ .scalar_exact_int = .{ .of = .qword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .@"or", .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_, .@"or", .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .@"or", .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .{ .scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .@"or", .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_int = .{ .of = .yword, .is = 1 } },
+ .{ .scalar_exact_int = .{ .of = .yword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_, .@"or", .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .qword, .is = 8 } },
+ .{ .scalar_exact_signed_int = .{ .of = .qword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_b, .adds, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_b, .adds, .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_b, .adds, .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 8 } },
+ .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_b, .adds, .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_16_i8, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_b, .maxs, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_b, .mins, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_16_i8, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_b, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_b, .maxs, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .p_b, .mins, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i8, .kind = .{ .slimit_delta_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_b, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .adds, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_b, .add, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .adds, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .sub, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
+ .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .type = .vector_32_i8, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_b, .maxs, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_b, .mins, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .qword, .is = 8 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .qword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_b, .addus, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 8 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_b, .addus, .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 8 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_b, .addus, .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 8 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_b, .addus, .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .mmx, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
+ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_b, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_b, .minu, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_b, .minu, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_b, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_b, .minu, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
+ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_b, .minu, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .qword, .is = 16 } },
+ .{ .scalar_exact_signed_int = .{ .of = .qword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_w, .adds, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .adds, .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_w, .adds, .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 16 } },
+ .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .adds, .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .mmx, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .qword } } },
+ .{ .type = .vector_4_i16, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .qword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_w, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, .p_w, .maxs, .dst0q, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .p_w, .mins, .dst0q, .lea(.tmp0q), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_8_i16, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_w, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_w, .maxs, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_w, .mins, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_8_i16, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_w, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_w, .maxs, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .p_w, .mins, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
+ .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .type = .vector_16_i16, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_w, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_w, .maxs, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_w, .mins, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .qword, .is = 16 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .qword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_w, .addus, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 16 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .addus, .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 16 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_w, .addus, .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 16 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .addus, .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_w, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_w, .minu, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_w, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_w, .minu, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .umax_delta_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_w, .add, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .addus, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_w, .sub, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
+ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u16, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_w, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_w, .minu, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_d, .sra, .tmp2x, .src0x, .ui(31), ._ },
+ .{ ._, .vp_d, .cmpgt, .tmp3x, .dst0x, .src0x, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .lea(.tmp0x), ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .src1x, ._ },
+ .{ ._, .v_ps, .blendv, .dst0x, .tmp2x, .dst0x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_d, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .src0x, ._, ._ },
+ .{ ._, .p_d, .sra, .tmp2x, .ui(31), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .src0x, ._, ._ },
+ .{ ._, .p_d, .cmpgt, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 32 } },
+ .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_d, .sra, .tmp2y, .src0y, .ui(31), ._ },
+ .{ ._, .vp_d, .cmpgt, .tmp3y, .dst0y, .src0y, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .lea(.tmp0y), ._ },
+ .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .src1y, ._ },
+ .{ ._, .v_ps, .blendv, .dst0y, .tmp2y, .dst0y, .tmp3y },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_4_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_d, .maxs, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_d, .mins, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_4_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_d, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_d, .maxs, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .p_d, .mins, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
+ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .type = .vector_8_i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_d, .maxs, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_d, .mins, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 32 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .cmpeq, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .vp_, .xor, .dst0x, .src0x, .dst0x, ._ },
+ .{ ._, .vp_d, .minu, .dst0x, .dst0x, .src1x, ._ },
+ .{ ._, .vp_d, .add, .dst0x, .dst0x, .src0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 32 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_d, .minu, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_d, .add, .dst0x, .src0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 32 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .cmpeq, .dst0y, .dst0y, .dst0y, ._ },
+ .{ ._, .vp_, .xor, .dst0y, .src0y, .dst0y, ._ },
+ .{ ._, .vp_d, .minu, .dst0y, .dst0y, .src1y, ._ },
+ .{ ._, .vp_d, .add, .dst0y, .dst0y, .src0y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_d, .minu, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_d, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_d, .minu, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
+ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u32, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_d, .minu, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp2x, .tmp2x, .src0x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .dst0x, .src0x, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .lea(.tmp0x), ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .src1x, ._ },
+ .{ ._, .v_pd, .blendv, .dst0x, .tmp2x, .dst0x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
+ .{ .scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_q, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp2x, .src0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .src0x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },
+ .{ ._, ._pd, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 64 } },
+ .{ .scalar_exact_signed_int = .{ .of = .yword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .tmp2y, ._ },
+ .{ ._, .vp_q, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp2y, .tmp2y, .src0y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3y, .dst0y, .src0y, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .lea(.tmp0y), ._ },
+ .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .src1y, ._ },
+ .{ ._, .v_pd, .blendv, .dst0y, .tmp2y, .dst0y, .tmp3y },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp2x, .dst0x, ._ },
+ .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
+ .{ ._, .vp_q, .cmpeq, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp3x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp2x, .dst0x, ._ },
+ .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
+ .{ ._, .vp_q, .cmpeq, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp3x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .p_q, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, .p_b, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
+ .{ ._, .p_q, .cmpeq, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
+ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_q, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp2y, .dst0y, ._ },
+ .{ ._, .vp_b, .blendv, .dst0y, .dst0y, .tmp2y, .tmp3y },
+ .{ ._, .vp_q, .cmpeq, .tmp3y, .tmp3y, .tmp3y, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .tmp3y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3y, .dst0y, .tmp2y, ._ },
+ .{ ._, .vp_b, .blendv, .dst0y, .dst0y, .tmp2y, .tmp3y },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .src0x, .tmp2x, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_, .@"or", .dst0x, .dst0x, .tmp3x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .src0x, .tmp2x, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_, .@"or", .dst0x, .dst0x, .tmp3x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .src0x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_q, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .@"or", .dst0x, .tmp3x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 64 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp3y, .src0y, .tmp2y, ._ },
+ .{ ._, .vp_q, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .dst0y, .tmp2y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .@"or", .dst0y, .dst0y, .tmp3y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp2x, .tmp2x, .dst0x, ._ },
+ .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .lea(.tmp0x), .tmp2x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp2x, .tmp2x, .dst0x, ._ },
+ .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .lea(.tmp0x), .tmp2x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_q, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_b, .blendv, .dst0x, .lea(.tmp0x), .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 63 } },
+ .{ .scalar_exact_unsigned_int = .{ .of = .yword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .tmp2y, ._ },
+ .{ ._, .vp_q, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp2y, .tmp2y, .dst0y, ._ },
+ .{ ._, .vp_b, .blendv, .dst0y, .dst0y, .lea(.tmp0y), .tmp2y },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .src0x, .src1x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_b, .blendv, .dst0x, .dst0x, .tmp2x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .p_q, .add, .dst0x, .src1x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .blendv, .dst0x, .tmp2x, .tmp3x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
+ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_q, .add, .dst0y, .src0y, .src1y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3y, .dst0y, .tmp2y, ._ },
+ .{ ._, .vp_b, .blendv, .dst0y, .dst0y, .tmp2y, .tmp3y },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_int = .{ .of = .yword, .is = 1 } },
+ .{ .multiple_scalar_exact_int = .{ .of = .yword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .@"or", .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_, .@"or", .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .{ .multiple_scalar_exact_int = .{ .of = .xword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .@"or", .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 1 } },
+ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 1 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u8, .kind = .{ .rc = .mmx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_, .@"or", .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 8 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_b, .adds, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_b, .adds, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .adds, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 8 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i8, .kind = .{ .rc = .mmx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .adds, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2b, .ui(7), ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2b, .ui(7), ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .ui(7), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .sa(.src0, .add_smin), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .ui(7), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .sa(.src0, .add_smin), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
+ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp2y, .tmp2y, .tmp2y, ._ },
+ .{ ._, .vp_b, .broadcast, .tmp3y, .lea(.tmp0b), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_b, .add, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_b, .maxs, .tmp4y, .tmp4y, .tmp3y, ._ },
+ .{ ._, .vp_b, .mins, .tmp4y, .tmp4y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp4y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_b, .add, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_b, .maxs, .tmp4x, .tmp4x, .tmp3x, ._ },
+ .{ ._, .vp_b, .mins, .tmp4x, .tmp4x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i8, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .add, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .maxs, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, .p_b, .mins, .tmp4x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i8, .kind = .{ .slimit_delta_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .sub, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .adds, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .add, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .adds, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .sub, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
+ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2b, .ui(7), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
+ .{ ._, ._po, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
+ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2b, .ui(7), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
+ .{ ._, ._po, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
+ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
+ .{ ._, ._pe, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .ui(7), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
+ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
+ .{ ._, ._pe, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .ui(7), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 8 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_b, .addus, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 8 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_b, .addus, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 8 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .addus, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 8 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u8, .kind = .{ .rc = .mmx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .addus, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .byte, .is = 8 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .byte, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .sbb, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1b, .tmp2b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .byte, .is = 8 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .byte, .is = 8 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .sbb, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1b, .tmp2b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .broadcast, .tmp2y, .lea(.tmp0b), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_b, .add, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_b, .minu, .tmp3y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_b, .add, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_b, .minu, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .add, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .minu, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .mmx, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u8, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .qword } } },
+ .{ .type = .vector_8_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._q, .mov, .tmp2q, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .add, .tmp3q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .minu, .tmp3q, .tmp2q, ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2b, .tmp1b, ._, ._ },
+ .{ ._, ._a, .cmov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2b, .tmp1b, ._, ._ },
+ .{ ._, ._a, .cmov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._na, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1b, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .memia(.src1b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._na, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1b, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 16 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .adds, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .adds, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .adds, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, .fast_imm16, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp2w, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1w, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp2y, .tmp2y, .tmp2y, ._ },
+ .{ ._, .vp_w, .broadcast, .tmp3y, .lea(.tmp0w), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .add, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_w, .maxs, .tmp4y, .tmp4y, .tmp3y, ._ },
+ .{ ._, .vp_w, .mins, .tmp4y, .tmp4y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp4y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .add, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_w, .maxs, .tmp4x, .tmp4x, .tmp3x, ._ },
+ .{ ._, .vp_w, .mins, .tmp4x, .tmp4x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .add, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .maxs, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, .p_w, .mins, .tmp4x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, .fast_imm16, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2w, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp3w, .tmp3w, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp3w, .tmp3w, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp2w, .tmp2w, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1w, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .word, .is = 15 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp2w, .tmp2w, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .bmi2, .cmov, .fast_imm16, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2w, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._rx, .ro, .tmp3d, .tmp1d, .uia(1, .src0, .add_bit_size_rem_64), ._ },
+ .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .bmi2, .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._rx, .ro, .tmp3d, .tmp1d, .uia(1, .src0, .add_bit_size_rem_64), ._ },
+ .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, .fast_imm16, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2w, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sa, .tmp3d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sa, .tmp3d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sa, .tmp2d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1w, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sa, .tmp2d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 16 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i16, .kind = .{ .rc = .mmx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .addus, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 16 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .addus, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 16 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .addus, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 16 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .addus, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 16 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u16, .kind = .{ .rc = .mmx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .addus, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .word, .is = 16 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .word, .is = 16 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .sbb, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_w, .broadcast, .tmp2y, .lea(.tmp0w), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .add, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_w, .minu, .tmp3y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .add, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_w, .minu, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .add, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .minu, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .umax_delta_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .add, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .addus, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .sub, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._a, .cmov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp1w, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._na, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1w, .memia(.src1w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._na, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 32 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .broadcast, .tmp2y, .lea(.tmp0d), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .add, .tmp5y, .tmp3y, .tmp4y, ._ },
+ .{ ._, .vp_d, .sra, .tmp6y, .tmp3y, .ui(31), ._ },
+ .{ ._, .vp_d, .cmpgt, .tmp3y, .tmp5y, .tmp3y, ._ },
+ .{ ._, .vp_, .xor, .tmp6y, .tmp6y, .tmp2y, ._ },
+ .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp4y, ._ },
+ .{ ._, .v_ps, .blendv, .tmp3y, .tmp6y, .tmp5y, .tmp3y },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ss, .broadcast, .tmp2x, .lea(.tmp0d), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .add, .tmp5x, .tmp3x, .tmp4x, ._ },
+ .{ ._, .vp_d, .sra, .tmp6x, .tmp3x, .ui(31), ._ },
+ .{ ._, .vp_d, .cmpgt, .tmp3x, .tmp5x, .tmp3x, ._ },
+ .{ ._, .vp_, .xor, .tmp6x, .tmp6x, .tmp2x, ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp4x, ._ },
+ .{ ._, .v_ps, .blendv, .tmp3x, .tmp6x, .tmp5x, .tmp3x },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
+ .{ ._, .p_d, .add, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp6x, .tmp3x, ._, ._ },
+ .{ ._, .p_d, .sra, .tmp6x, .ui(31), ._, ._ },
+ .{ ._, .p_d, .cmpgt, .tmp3x, .tmp5x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3x, .tmp4x, ._, ._ },
+ .{ ._, ._ps, .blendv, .tmp5x, .tmp6x, .tmp3x, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 32 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 32 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smin), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp2y, .tmp2y, .tmp2y, ._ },
+ .{ ._, .vp_d, .broadcast, .tmp3y, .lea(.tmp0d), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .add, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_d, .maxs, .tmp4y, .tmp4y, .tmp3y, ._ },
+ .{ ._, .vp_d, .mins, .tmp4y, .tmp4y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp4y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .v_ss, .broadcast, .tmp3x, .lea(.tmp0d), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .add, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_d, .maxs, .tmp4x, .tmp4x, .tmp3x, ._ },
+ .{ ._, .vp_d, .mins, .tmp4x, .tmp4x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_d, .add, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_d, .maxs, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, .p_d, .mins, .tmp4x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 31 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 31 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 31 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .dword, .is = 31 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .bmi2, .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._rx, .ro, .tmp3d, .tmp1d, .uia(1, .src0, .add_bit_size_rem_64), ._ },
+ .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .ui(31), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .sa(.src0, .add_smax), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sa, .tmp3d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sa, .tmp2d, .uia(31, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .sa(.src0, .add_smax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 32 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp2y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp3y, .tmp2y, .tmp1y, ._ },
+ .{ ._, .vp_d, .minu, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_d, .add, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp2y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 32 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .tmp2x, .tmp1x, ._ },
+ .{ ._, .vp_d, .minu, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_d, .add, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 32 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_d, .cmpeq, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_d, .add, .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .dword, .is = 32 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .dword, .is = 32 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .sbb, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_d, .broadcast, .tmp2y, .lea(.tmp0d), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .add, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_d, .minu, .tmp3y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ss, .broadcast, .tmp2x, .lea(.tmp0d), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .add, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_d, .minu, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_d, .add, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_d, .minu, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .cmov, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._a, .cmov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .memia(.src1d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._na, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 64 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .yword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp5y, .tmp5y, .tmp5y, ._ },
+ .{ ._, .vp_q, .add, .tmp6y, .tmp3y, .tmp4y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp3y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp6y, .tmp3y, ._ },
+ .{ ._, .vp_, .xor, .tmp5y, .tmp5y, .tmp2y, ._ },
+ .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp4y, ._ },
+ .{ ._, .v_pd, .blendv, .tmp5y, .tmp5y, .tmp6y, .tmp3y },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp5y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp5x, .tmp5x, .tmp5x, ._ },
+ .{ ._, .vp_q, .add, .tmp6x, .tmp3x, .tmp4x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp3x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp6x, .tmp3x, ._ },
+ .{ ._, .vp_, .xor, .tmp5x, .tmp5x, .tmp2x, ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp4x, ._ },
+ .{ ._, .v_pd, .blendv, .tmp5x, .tmp5x, .tmp6x, .tmp3x },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp5x, .tmp5x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp6x, .tmp3x, ._, ._ },
+ .{ ._, .p_q, .add, .tmp6x, .tmp4x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp5x, .tmp3x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp7x, .tmp6x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp7x, .tmp3x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp7x, .tmp4x, ._, ._ },
+ .{ ._, ._pd, .blendv, .tmp5x, .tmp6x, .tmp7x, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 64 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ ._, ._, .xor, .tmp3q, .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._o, .cmov, .tmp2q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 64 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smin), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+ .{ ._, ._, .xor, .tmp2q, .tmp1q, ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp2y, .tmp2y, .tmp2y, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp3y, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_q, .add, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp3y, .tmp4y, ._ },
+ .{ ._, .vp_b, .blendv, .tmp4y, .tmp4y, .tmp3y, .tmp5y },
+ .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp4y, .tmp2y, ._ },
+ .{ ._, .vp_b, .blendv, .tmp4y, .tmp4y, .tmp2y, .tmp5y },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp4y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .v_, .movddup, .tmp3x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_q, .add, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp3x, .tmp4x, ._ },
+ .{ ._, .vp_b, .blendv, .tmp4x, .tmp4x, .tmp3x, .tmp5x },
+ .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp4x, .tmp2x, ._ },
+ .{ ._, .vp_b, .blendv, .tmp4x, .tmp4x, .tmp2x, .tmp5x },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_q, .cmpeq, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, ._, .movddup, .tmp3x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_q, .add, .tmp4x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, .p_b, .blendv, .tmp4x, .tmp3x, .tmp5x, ._ },
+ .{ ._, ._dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp5x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .blendv, .tmp4x, .tmp2x, .tmp5x, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 63 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp3q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp4q, .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp4q, .tmp4q, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp2q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 63 } },
+ .{ .multiple_scalar_exact_signed_int = .{ .of = .qword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp3q, .tmp3q, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+ .{ ._, ._, .xor, .tmp2q, .tmp1q, ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .cmov, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp3q, .tmp1q, ._, ._ },
+ .{ ._, ._rx, .ro, .tmp4q, .tmp2q, .sia(-31, .src0, .add_bit_size_rem_64), ._ },
+ .{ ._, ._, .add, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp2q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp3q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp4q, .tmp2q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp4q, .sia(-31, .src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._o, .cmov, .tmp2q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .tmp2q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .sia(-31, .src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+ .{ ._, ._, .xor, .tmp2q, .tmp1q, ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 64 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp4y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_q, .add, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp4y, .tmp4y, .tmp5y, ._ },
+ .{ ._, .vp_, .@"or", .tmp3y, .tmp3y, .tmp4y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp4x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_q, .add, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp4x, .tmp4x, .tmp5x, ._ },
+ .{ ._, .vp_, .@"or", .tmp3x, .tmp3x, .tmp4x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, .p_q, .add, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp4x, .tmp5x, ._, ._ },
+ .{ ._, .p_, .@"or", .tmp3x, .tmp4x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 64 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .qword, .is = 64 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .sbb, .tmp2q, .tmp2q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp2q, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 63 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .yword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp4y, .tmp4y, .tmp4y, ._ },
+ .{ ._, .vp_q, .add, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp4y, .tmp4y, .tmp3y, ._ },
+ .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp2y, .tmp4y },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp4x, .tmp4x, .tmp4x, ._ },
+ .{ ._, .vp_q, .add, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp4x, .tmp4x, .tmp3x, ._ },
+ .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp2x, .tmp4x },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .{ .multiple_scalar_exact_unsigned_int = .{ .of = .xword, .is = 63 } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -5655,33 +12328,37 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .tmp0q, ._, ._ },
- .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_smax), ._, ._ },
- .{ ._, ._, .xor, .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp4x, .tmp4x, ._, ._ },
+ .{ ._, .p_q, .add, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, .p_b, .blendv, .tmp3x, .tmp2x, .tmp4x, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .cmov, null, null },
- .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_mut_gpr, .simm32, .none } },
- .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -5689,35 +12366,36 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
- .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
- .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_smax), ._, ._ },
- .{ ._, ._, .xor, .tmp0q, .tmp1q, ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .dst0q, ._, ._ },
- .{ ._, ._r, .sh, .tmp1q, .sia(-31, .src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .add, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._o, .cmov, .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_q, .add, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp4y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp2y, .tmp4y },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_mut_gpr, .simm32, .none } },
- .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -5725,34 +12403,36 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
- .{ ._, ._r, .sh, .tmp0q, .sia(-31, .src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .add, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_smax), ._, ._ },
- .{ ._, ._, .xor, .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_q, .add, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_q, .cmpgt, .tmp4x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp2x, .tmp4x },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .{ .exact_unsigned_int = 64 }, .any },
+ .required_features = .{ .sse4_2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_mut_gpr, .simm32, .none } },
- .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .umax_mem = .{ .ref = .src0, .vectorize_to = .none } } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -5760,27 +12440,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
- .{ ._, ._, .sbb, .tmp0q, .tmp0q, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_q, .add, .tmp3x, .memia(.src1x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, .p_q, .cmpgt, .tmp4x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .blendv, .tmp3x, .tmp2x, .tmp4x, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .cmov, null, null },
- .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_mut_gpr, .simm32, .none } },
- .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
.unused,
.unused,
.unused,
@@ -5790,25 +12478,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
- .{ ._, ._, .cmp, .dst0q, .tmp0q, ._, ._ },
- .{ ._, ._a, .cmov, .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._a, .cmov, .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .src_constraints = .{
+ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_mut_gpr, .simm32, .none } },
- .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
@@ -5818,47 +12513,36 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
- .{ ._, ._, .cmp, .dst0q, .tmp0q, ._, ._ },
- .{ ._, ._na, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .simm32, .none } },
- .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
- .{ ._, ._, .cmp, .dst0q, .ua(.src0, .add_umax), ._, ._ },
- .{ ._, ._na, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .add, .tmp2q, .memia(.src1q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._na, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .tmp1q, ._, ._ },
+ .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
- .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
- .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
.any,
},
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rcx } },
@@ -5866,82 +12550,94 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
- .unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._c, .cl, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
- .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -8), .tmp1q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
- .{ ._, ._, .adc, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
- .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp3p, .memiad(.dst0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp4p, .sia(1, .src0, .sub_elem_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp5q, .leasi(.tmp1q, .@"8", .tmp4), ._, ._ },
+ .{ ._, ._, .adc, .tmp5q, .leasi(.tmp2q, .@"8", .tmp4), ._, ._ },
+ .{ ._, ._, .mov, .leasi(.tmp3q, .@"8", .tmp4), .tmp5q, ._, ._ },
+ .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._, .adc, .tmp5q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp4p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },
+ .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_smin), ._, ._ },
- .{ ._, ._, .xor, .tmp1q, .tmp2q, ._, ._ },
- .{ .@"0:", ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .ua(.src0, .add_smin), ._, ._ },
+ .{ ._, ._, .xor, .tmp5q, .tmp6q, ._, ._ },
+ .{ .@"1:", ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
- .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
- .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .scalar_exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .scalar_exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
.any,
},
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rcx } },
.unused,
.unused,
.unused,
.unused,
- .unused,
- .unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
- .{ ._, ._c, .cl, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .adc, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_size), .tmp1q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp3p, .memia(.src1, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp4p, .memia(.dst0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp5p, .sa(.src0, .sub_elem_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .adc, .tmp6q, .leasi(.tmp3q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .mov, .leasi(.tmp4q, .@"8", .tmp5), .tmp6q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .leaa(.tmp4, .sub_src0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .sa(.src0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
- .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
- .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
.any,
},
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rcx } },
@@ -5949,85 +12645,97 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
- .unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._c, .cl, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
- .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -16), .tmp1q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -16), ._, ._ },
- .{ ._, ._, .adc, .tmp1q, .memad(.src1q, .add_size, -16), ._, ._ },
- .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-2, .src0, .add_size_div_8), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_unaligned_size_add_elem_size, -16), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size_add_elem_size, -16), ._, ._ },
+ .{ ._, ._, .lea, .tmp3p, .memiad(.dst0, .tmp0, .add_unaligned_size_add_elem_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp4p, .sia(2, .src0, .sub_elem_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp5q, .leasi(.tmp1q, .@"8", .tmp4), ._, ._ },
+ .{ ._, ._, .adc, .tmp5q, .leasi(.tmp2q, .@"8", .tmp4), ._, ._ },
+ .{ ._, ._, .mov, .leasi(.tmp3q, .@"8", .tmp4), .tmp5q, ._, ._ },
+ .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._, .adc, .tmp5q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp4p, .leaad(.tmp3, .sub_src0_elem_size, 16), ._, ._ },
+ .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_smin), ._, ._ },
- .{ ._, ._, .xor, .tmp1q, .tmp2q, ._, ._ },
- .{ .@"0:", ._, .mov, .memad(.dst0q, .add_size, -16), .tmp1q, ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .ua(.src0, .add_smin), ._, ._ },
+ .{ ._, ._, .xor, .tmp5q, .tmp6q, ._, ._ },
+ .{ .@"1:", ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp3q, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
- .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
- .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
.any,
},
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rcx } },
.unused,
.unused,
.unused,
.unused,
- .unused,
- .unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
- .{ ._, ._c, .cl, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
- .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -8), .tmp1q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2p, .memiad(.src0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp3p, .memiad(.src1, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp4p, .memiad(.dst0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5p, .sia(1, .src0, .sub_elem_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .adc, .tmp6q, .leasi(.tmp3q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .mov, .leasi(.tmp4q, .@"8", .tmp5), .tmp6q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .leaad(.tmp4, .sub_src0_elem_size, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+ .{ .@"1:", ._, .mov, .lea(.tmp4q), .si(0), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
- .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
- .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .qword } },
.any,
},
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rcx } },
@@ -6035,88 +12743,100 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
- .unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._c, .cl, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
- .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -8), .tmp1q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._l, .sa, .tmp1q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .add, .tmp1q, .tmp1q, ._, ._ },
- .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-2, .src0, .add_size_div_8), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp3p, .memiad(.dst0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp4p, .sia(1, .src0, .sub_elem_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp5q, .leasi(.tmp1q, .@"8", .tmp4), ._, ._ },
+ .{ ._, ._, .adc, .tmp5q, .leasi(.tmp2q, .@"8", .tmp4), ._, ._ },
+ .{ ._, ._, .mov, .leasi(.tmp3q, .@"8", .tmp4), .tmp5q, ._, ._ },
+ .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._l, .sa, .tmp5q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp5q, .tmp5q, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp4p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },
+ .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_smin), ._, ._ },
- .{ ._, ._, .xor, .tmp1q, .tmp2q, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp1q, ._, ._ },
- .{ .@"0:", ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .ua(.src0, .add_smin), ._, ._ },
+ .{ ._, ._, .xor, .tmp5q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp3q, -8), .tmp5q, ._, ._ },
+ .{ .@"1:", ._r, .sa, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp3q), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
.any,
},
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rcx } },
.unused,
.unused,
.unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .si(-1), ._, ._ },
.{ ._, ._c, .cl, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
- .{ ._, ._, .adc, .tmp2q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_size, -8), .tmp2q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp2q, .tmp1q, ._, ._ },
- .{ ._, ._na, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp1q, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-2, .src0, .add_size_div_8), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .memiad(.src0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp4p, .memiad(.src1, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .memiad(.dst0, .tmp0, .add_unaligned_size_add_elem_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6p, .sia(1, .src0, .sub_elem_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp7q, .leasi(.tmp3q, .@"8", .tmp6), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .leasi(.tmp4q, .@"8", .tmp6), ._, ._ },
+ .{ ._, ._, .mov, .leasi(.tmp5q, .@"8", .tmp6), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp6p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp7q, .tmp1q, ._, ._ },
+ .{ ._, ._na, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp5q, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .lea, .tmp6p, .leaad(.tmp5, .sub_src0_elem_size, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .sia(-2, .src0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+ .{ .@"1:", ._, .mov, .lea(.tmp5q), .si(0), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
- .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
- .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .xword } },
.any,
},
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .reg = .rdi } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rcx } },
@@ -6124,73 +12844,81 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
- .unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._c, .cl, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .adc, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_size), .tmp1q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._l, .sa, .tmp1q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .add, .tmp1q, .tmp1q, ._, ._ },
- .{ ._, ._no, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp3p, .memia(.dst0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp4p, .sa(.src0, .sub_elem_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp5q, .leasi(.tmp1q, .@"8", .tmp4), ._, ._ },
+ .{ ._, ._, .adc, .tmp5q, .leasi(.tmp2q, .@"8", .tmp4), ._, ._ },
+ .{ ._, ._, .mov, .leasi(.tmp3q, .@"8", .tmp4), .tmp5q, ._, ._ },
+ .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._l, .sa, .tmp5q, .uia(63, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .add, .tmp5q, .tmp5q, ._, ._ },
+ .{ ._, ._no, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp4p, .leaa(.tmp3, .sub_src0_elem_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_smin), ._, ._ },
- .{ ._, ._, .xor, .tmp1q, .tmp2q, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .ua(.src0, .add_smin), ._, ._ },
+ .{ ._, ._, .xor, .tmp5q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp3q, -8), .tmp5q, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
.any,
},
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .reg = .rdi } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rcx } },
.unused,
.unused,
.unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .si(-1), ._, ._ },
.{ ._, ._c, .cl, ._, ._, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .adc, .tmp2q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_size), .tmp2q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp2q, .tmp1q, ._, ._ },
- .{ ._, ._na, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp4p, .memia(.src1, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .memia(.dst0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp6p, .sa(.src0, .sub_elem_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp7q, .leasi(.tmp3q, .@"8", .tmp6), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .leasi(.tmp4q, .@"8", .tmp6), ._, ._ },
+ .{ ._, ._, .mov, .leasi(.tmp5q, .@"8", .tmp6), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp6p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp7q, .tmp1q, ._, ._ },
+ .{ ._, ._na, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp6p, .leaa(.tmp5, .sub_src0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp5q, -8), .tmp1q, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .sa(.src0, .add_elem_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
} }) catch |err| switch (err) {
error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
@@ -6404,6 +13132,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6436,6 +13165,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6468,6 +13198,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6500,6 +13231,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6531,6 +13263,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6608,6 +13341,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6640,6 +13374,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6672,6 +13407,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6703,6 +13439,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6780,6 +13517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6812,6 +13550,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6844,6 +13583,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6875,6 +13615,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6952,6 +13693,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
@@ -6984,6 +13726,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -7016,6 +13759,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -7048,6 +13792,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
@@ -7080,6 +13825,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
@@ -7118,6 +13864,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_unaligned_size_add_elem_size), ._, ._ },
@@ -7900,6 +14647,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -10484,6 +17232,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -10577,6 +17326,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -13174,6 +19924,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -13267,6 +20018,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -14084,6 +20836,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -14205,6 +20958,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -121246,8 +128000,10 @@ const Select = struct {
mem_of_type: Select.Operand.Ref,
smin_mem: ConstSpec,
smax_mem: ConstSpec,
+ slimit_delta_mem: ConstSpec,
umin_mem: ConstSpec,
umax_mem: ConstSpec,
+ umax_delta_mem: ConstSpec,
@"0x1p63_mem": ConstSpec,
f64_0x1p52_0x1p84_mem,
u32_0x1p52_hi_0x1p84_hi_0_0_mem,
@@ -121356,7 +128112,14 @@ const Select = struct {
},
.mem => .{ try cg.tempAllocMem(spec.type), true },
.mem_of_type => |ref| .{ try cg.tempAllocMem(ref.typeOf(s)), true },
- .smin_mem, .smax_mem, .umin_mem, .umax_mem, .@"0x1p63_mem" => |const_spec| {
+ .smin_mem,
+ .smax_mem,
+ .slimit_delta_mem,
+ .umin_mem,
+ .umax_mem,
+ .umax_delta_mem,
+ .@"0x1p63_mem",
+ => |const_spec| {
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
const ty = if (const_spec.ref == .none) spec.type else const_spec.ref.typeOf(s);
@@ -121369,40 +128132,47 @@ const Select = struct {
else => @intCast(@divExact(@divExact(vectorize_to.bitSize(cg.target), 8), scalar_ty.abiSize(pt.zcu))),
} else vector_len;
const res_scalar_ty, const res_scalar_val: Value = res_scalar: switch (scalar_ty.toIntern()) {
- .bool_type => .{
- scalar_ty,
- .fromInterned(switch (spec.kind) {
- else => unreachable,
- .smin_mem, .umax_mem => .bool_true,
- .smax_mem, .umin_mem => .bool_false,
- }),
- },
+ .bool_type => .{ scalar_ty, .fromInterned(switch (spec.kind) {
+ else => unreachable,
+ .smin_mem, .umax_mem => .bool_true,
+ .smax_mem, .umin_mem => .bool_false,
+ }) },
else => {
const scalar_info: std.builtin.Type.Int = cg.intInfo(scalar_ty) orelse .{
.signedness = .signed,
.bits = cg.floatBits(scalar_ty).?,
};
- const scalar_signedness = const_spec.to_signedness orelse scalar_info.signedness;
- const scalar_int_ty = try pt.intType(scalar_signedness, scalar_info.bits);
+ const res_scalar_info: std.builtin.Type.Int = .{
+ .signedness = const_spec.to_signedness orelse scalar_info.signedness,
+ .bits = switch (spec.kind) {
+ else => scalar_info.bits,
+ .slimit_delta_mem, .umax_delta_mem => cg.intInfo(spec.type.scalarType(zcu)).?.bits,
+ },
+ };
+ const res_scalar_ty = try pt.intType(res_scalar_info.signedness, res_scalar_info.bits);
- if (scalar_info.bits <= 64) {
+ if (res_scalar_info.bits <= 64) {
const int_val: i64 = switch (spec.kind) {
else => unreachable,
.smin_mem => std.math.minInt(i64),
.smax_mem => std.math.maxInt(i64),
+ .slimit_delta_mem => std.math.maxInt(i64) -
+ (@as(i64, std.math.maxInt(i64)) >> @intCast(res_scalar_info.bits - scalar_info.bits)),
.umin_mem => 0,
.umax_mem => -1,
- .@"0x1p63_mem" => switch (scalar_info.bits) {
+ .umax_delta_mem => @bitCast(std.math.maxInt(u64) -
+ (@as(u64, std.math.maxInt(u64)) >> @intCast(res_scalar_info.bits - scalar_info.bits))),
+ .@"0x1p63_mem" => switch (res_scalar_info.bits) {
else => unreachable,
16 => @as(i64, @as(i16, @bitCast(@as(f16, 0x1p63)))) << 64 - 16,
32 => @as(i64, @as(i32, @bitCast(@as(f32, 0x1p63)))) << 64 - 32,
64 => @as(i64, @as(i64, @bitCast(@as(f64, 0x1p63)))) << 64 - 64,
},
};
- const shift: u6 = @intCast(64 - scalar_info.bits);
- break :res_scalar .{ scalar_int_ty, switch (scalar_signedness) {
- .signed => try pt.intValue_i64(scalar_int_ty, int_val >> shift),
- .unsigned => try pt.intValue_u64(scalar_int_ty, @as(u64, @bitCast(int_val)) >> shift),
+ const shift: u6 = @intCast(64 - res_scalar_info.bits);
+ break :res_scalar .{ res_scalar_ty, switch (res_scalar_info.signedness) {
+ .signed => try pt.intValue_i64(res_scalar_ty, int_val >> shift),
+ .unsigned => try pt.intValue_u64(res_scalar_ty, @as(u64, @bitCast(int_val)) >> shift),
} };
}
@@ -121410,18 +128180,18 @@ const Select = struct {
var stack align(@max(@alignOf(ExpectedContents), @alignOf(std.heap.StackFallbackAllocator(0)))) =
std.heap.stackFallback(@sizeOf(ExpectedContents), cg.gpa);
const allocator = stack.get();
- var big_int: std.math.big.int.Mutable = .{
+ var res_big_int: std.math.big.int.Mutable = .{
.limbs = try allocator.alloc(
std.math.big.Limb,
- std.math.big.int.calcTwosCompLimbCount(scalar_info.bits),
+ std.math.big.int.calcTwosCompLimbCount(res_scalar_info.bits),
),
.len = undefined,
.positive = undefined,
};
- defer allocator.free(big_int.limbs);
+ defer allocator.free(res_big_int.limbs);
switch (spec.kind) {
else => unreachable,
- .smin_mem, .smax_mem, .umin_mem, .umax_mem => big_int.setTwosCompIntLimit(switch (spec.kind) {
+ .smin_mem, .smax_mem, .umin_mem, .umax_mem => res_big_int.setTwosCompIntLimit(switch (spec.kind) {
else => unreachable,
.smin_mem, .umin_mem => .min,
.smax_mem, .umax_mem => .max,
@@ -121429,15 +128199,34 @@ const Select = struct {
else => unreachable,
.smin_mem, .smax_mem => .signed,
.umin_mem, .umax_mem => .unsigned,
- }, scalar_info.bits),
- .@"0x1p63_mem" => switch (scalar_info.bits) {
+ }, res_scalar_info.bits),
+ .slimit_delta_mem, .umax_delta_mem => {
+ var big_int: std.math.big.int.Mutable = .{
+ .limbs = try allocator.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcTwosCompLimbCount(scalar_info.bits),
+ ),
+ .len = undefined,
+ .positive = undefined,
+ };
+ defer allocator.free(big_int.limbs);
+ const signedness: std.builtin.Signedness = switch (spec.kind) {
+ else => unreachable,
+ .slimit_delta_mem => .signed,
+ .umax_delta_mem => .unsigned,
+ };
+ big_int.setTwosCompIntLimit(.max, signedness, scalar_info.bits);
+ res_big_int.setTwosCompIntLimit(.max, signedness, res_scalar_info.bits);
+ res_big_int.sub(res_big_int.toConst(), big_int.toConst());
+ },
+ .@"0x1p63_mem" => switch (res_scalar_info.bits) {
else => unreachable,
- 80 => big_int.set(@as(u80, @bitCast(@as(f80, 0x1p63)))),
- 128 => big_int.set(@as(u128, @bitCast(@as(f128, 0x1p63)))),
+ 80 => res_big_int.set(@as(u80, @bitCast(@as(f80, 0x1p63)))),
+ 128 => res_big_int.set(@as(u128, @bitCast(@as(f128, 0x1p63)))),
},
}
- big_int.truncate(big_int.toConst(), scalar_signedness, scalar_info.bits);
- break :res_scalar .{ scalar_int_ty, try pt.intValue_big(scalar_int_ty, big_int.toConst()) };
+ res_big_int.truncate(res_big_int.toConst(), res_scalar_info.signedness, res_scalar_info.bits);
+ break :res_scalar .{ res_scalar_ty, try pt.intValue_big(res_scalar_ty, res_big_int.toConst()) };
},
};
const res_val: Value = if (res_vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{
src/arch/x86_64/encodings.zon
@@ -2330,8 +2330,8 @@
.{ .pext, .rvm, .{ .r32, .r32, .rm32 }, .{ 0xf3, 0x0f, 0x38, 0xf5 }, 0, .vex_lz_w0, .bmi2 },
.{ .pext, .rvm, .{ .r64, .r64, .rm64 }, .{ 0xf3, 0x0f, 0x38, 0xf5 }, 0, .vex_lz_w1, .bmi2 },
- .{ .rorx, .rmi, .{ .r32, .rm32, .imm8 }, .{ 0xf2, 0x0f, 0x3a }, 0, .vex_lz_w0, .bmi2 },
- .{ .rorx, .rmi, .{ .r64, .rm64, .imm8 }, .{ 0xf2, 0x0f, 0x3a }, 0, .vex_lz_w1, .bmi2 },
+ .{ .rorx, .rmi, .{ .r32, .rm32, .imm8 }, .{ 0xf2, 0x0f, 0x3a, 0xf0 }, 0, .vex_lz_w0, .bmi2 },
+ .{ .rorx, .rmi, .{ .r64, .rm64, .imm8 }, .{ 0xf2, 0x0f, 0x3a, 0xf0 }, 0, .vex_lz_w1, .bmi2 },
.{ .sarx, .rmv, .{ .r32, .rm32, .r32 }, .{ 0xf3, 0x0f, 0x38, 0xf7 }, 0, .vex_lz_w0, .bmi2 },
.{ .shlx, .rmv, .{ .r32, .rm32, .r32 }, .{ 0x66, 0x0f, 0x38, 0xf7 }, 0, .vex_lz_w0, .bmi2 },
src/codegen/c/Type.zig
@@ -1443,6 +1443,21 @@ pub const Pool = struct {
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
+ .vector_8_i8_type => {
+ const vector_ctype = try pool.getVector(allocator, .{
+ .elem_ctype = .i8,
+ .len = 8,
+ });
+ if (!kind.isParameter()) return vector_ctype;
+ var fields = [_]Info.Field{
+ .{
+ .name = .{ .index = .array },
+ .ctype = vector_ctype,
+ .alignas = AlignAs.fromAbiAlignment(Type.i8.abiAlignment(zcu)),
+ },
+ };
+ return pool.fromFields(allocator, .@"struct", &fields, kind);
+ },
.vector_16_i8_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .i8,
@@ -1563,6 +1578,21 @@ pub const Pool = struct {
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
+ .vector_4_i16_type => {
+ const vector_ctype = try pool.getVector(allocator, .{
+ .elem_ctype = .i16,
+ .len = 4,
+ });
+ if (!kind.isParameter()) return vector_ctype;
+ var fields = [_]Info.Field{
+ .{
+ .name = .{ .index = .array },
+ .ctype = vector_ctype,
+ .alignas = AlignAs.fromAbiAlignment(Type.i16.abiAlignment(zcu)),
+ },
+ };
+ return pool.fromFields(allocator, .@"struct", &fields, kind);
+ },
.vector_8_i16_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .i16,
@@ -1593,6 +1623,21 @@ pub const Pool = struct {
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
+ .vector_4_u16_type => {
+ const vector_ctype = try pool.getVector(allocator, .{
+ .elem_ctype = .u16,
+ .len = 4,
+ });
+ if (!kind.isParameter()) return vector_ctype;
+ var fields = [_]Info.Field{
+ .{
+ .name = .{ .index = .array },
+ .ctype = vector_ctype,
+ .alignas = AlignAs.fromAbiAlignment(Type.u16.abiAlignment(zcu)),
+ },
+ };
+ return pool.fromFields(allocator, .@"struct", &fields, kind);
+ },
.vector_8_u16_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .u16,
src/Air.zig
@@ -995,6 +995,7 @@ pub const Inst = struct {
single_const_pointer_to_comptime_int_type = @intFromEnum(InternPool.Index.single_const_pointer_to_comptime_int_type),
slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type),
slice_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.slice_const_u8_sentinel_0_type),
+ vector_8_i8_type = @intFromEnum(InternPool.Index.vector_8_i8_type),
vector_16_i8_type = @intFromEnum(InternPool.Index.vector_16_i8_type),
vector_32_i8_type = @intFromEnum(InternPool.Index.vector_32_i8_type),
vector_1_u8_type = @intFromEnum(InternPool.Index.vector_1_u8_type),
@@ -1003,8 +1004,10 @@ pub const Inst = struct {
vector_8_u8_type = @intFromEnum(InternPool.Index.vector_8_u8_type),
vector_16_u8_type = @intFromEnum(InternPool.Index.vector_16_u8_type),
vector_32_u8_type = @intFromEnum(InternPool.Index.vector_32_u8_type),
+ vector_4_i16_type = @intFromEnum(InternPool.Index.vector_4_i16_type),
vector_8_i16_type = @intFromEnum(InternPool.Index.vector_8_i16_type),
vector_16_i16_type = @intFromEnum(InternPool.Index.vector_16_i16_type),
+ vector_4_u16_type = @intFromEnum(InternPool.Index.vector_4_u16_type),
vector_8_u16_type = @intFromEnum(InternPool.Index.vector_8_u16_type),
vector_16_u16_type = @intFromEnum(InternPool.Index.vector_16_u16_type),
vector_4_i32_type = @intFromEnum(InternPool.Index.vector_4_i32_type),
src/InternPool.zig
@@ -4572,6 +4572,7 @@ pub const Index = enum(u32) {
slice_const_u8_type,
slice_const_u8_sentinel_0_type,
+ vector_8_i8_type,
vector_16_i8_type,
vector_32_i8_type,
vector_1_u8_type,
@@ -4580,8 +4581,10 @@ pub const Index = enum(u32) {
vector_8_u8_type,
vector_16_u8_type,
vector_32_u8_type,
+ vector_4_i16_type,
vector_8_i16_type,
vector_16_i16_type,
+ vector_4_u16_type,
vector_8_u16_type,
vector_16_u16_type,
vector_4_i32_type,
@@ -5090,6 +5093,8 @@ pub const static_keys = [_]Key{
},
} },
+ // @Vector(8, i8)
+ .{ .vector_type = .{ .len = 8, .child = .i8_type } },
// @Vector(16, i8)
.{ .vector_type = .{ .len = 16, .child = .i8_type } },
// @Vector(32, i8)
@@ -5106,10 +5111,14 @@ pub const static_keys = [_]Key{
.{ .vector_type = .{ .len = 16, .child = .u8_type } },
// @Vector(32, u8)
.{ .vector_type = .{ .len = 32, .child = .u8_type } },
+ // @Vector(4, i16)
+ .{ .vector_type = .{ .len = 4, .child = .i16_type } },
// @Vector(8, i16)
.{ .vector_type = .{ .len = 8, .child = .i16_type } },
// @Vector(16, i16)
.{ .vector_type = .{ .len = 16, .child = .i16_type } },
+ // @Vector(4, u16)
+ .{ .vector_type = .{ .len = 4, .child = .u16_type } },
// @Vector(8, u16)
.{ .vector_type = .{ .len = 8, .child = .u16_type } },
// @Vector(16, u16)
@@ -11777,6 +11786,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
.single_const_pointer_to_comptime_int_type,
.slice_const_u8_type,
.slice_const_u8_sentinel_0_type,
+ .vector_8_i8_type,
.vector_16_i8_type,
.vector_32_i8_type,
.vector_1_u8_type,
@@ -11785,8 +11795,10 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
.vector_8_u8_type,
.vector_16_u8_type,
.vector_32_u8_type,
+ .vector_4_i16_type,
.vector_8_i16_type,
.vector_16_i16_type,
+ .vector_4_u16_type,
.vector_8_u16_type,
.vector_16_u16_type,
.vector_4_i32_type,
@@ -12121,6 +12133,7 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
.slice_const_u8_sentinel_0_type,
=> .pointer,
+ .vector_8_i8_type,
.vector_16_i8_type,
.vector_32_i8_type,
.vector_1_u8_type,
@@ -12129,8 +12142,10 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
.vector_8_u8_type,
.vector_16_u8_type,
.vector_32_u8_type,
+ .vector_4_i16_type,
.vector_8_i16_type,
.vector_16_i16_type,
+ .vector_4_u16_type,
.vector_8_u16_type,
.vector_16_u16_type,
.vector_4_i32_type,
src/Sema.zig
@@ -36502,6 +36502,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
.single_const_pointer_to_comptime_int_type,
.slice_const_u8_type,
.slice_const_u8_sentinel_0_type,
+ .vector_8_i8_type,
.vector_16_i8_type,
.vector_32_i8_type,
.vector_1_u8_type,
@@ -36510,8 +36511,10 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
.vector_8_u8_type,
.vector_16_u8_type,
.vector_32_u8_type,
+ .vector_4_i16_type,
.vector_8_i16_type,
.vector_16_i16_type,
+ .vector_4_u16_type,
.vector_8_u16_type,
.vector_16_u16_type,
.vector_4_i32_type,
src/Type.zig
@@ -4096,6 +4096,7 @@ pub const single_const_pointer_to_comptime_int: Type = .{ .ip_index = .single_co
pub const slice_const_u8: Type = .{ .ip_index = .slice_const_u8_type };
pub const slice_const_u8_sentinel_0: Type = .{ .ip_index = .slice_const_u8_sentinel_0_type };
+pub const vector_8_i8: Type = .{ .ip_index = .vector_8_i8_type };
pub const vector_16_i8: Type = .{ .ip_index = .vector_16_i8_type };
pub const vector_32_i8: Type = .{ .ip_index = .vector_32_i8_type };
pub const vector_1_u8: Type = .{ .ip_index = .vector_1_u8_type };
@@ -4104,8 +4105,10 @@ pub const vector_4_u8: Type = .{ .ip_index = .vector_4_u8_type };
pub const vector_8_u8: Type = .{ .ip_index = .vector_8_u8_type };
pub const vector_16_u8: Type = .{ .ip_index = .vector_16_u8_type };
pub const vector_32_u8: Type = .{ .ip_index = .vector_32_u8_type };
+pub const vector_4_i16: Type = .{ .ip_index = .vector_4_i16_type };
pub const vector_8_i16: Type = .{ .ip_index = .vector_8_i16_type };
pub const vector_16_i16: Type = .{ .ip_index = .vector_16_i16_type };
+pub const vector_4_u16: Type = .{ .ip_index = .vector_4_u16_type };
pub const vector_8_u16: Type = .{ .ip_index = .vector_8_u16_type };
pub const vector_16_u16: Type = .{ .ip_index = .vector_16_u16_type };
pub const vector_4_i32: Type = .{ .ip_index = .vector_4_i32_type };
test/behavior/x86_64/binary.zig
@@ -2615,263 +2615,23 @@ fn binary(comptime op: anytype, comptime opts: struct { compare: Compare = .rela
0x1b, 0x61, 0x73, 0x63, 0x2c, 0x35, 0x25, 0x19, 0x09, 0x0c, 0x75, 0x5d, 0x01, 0x29, 0x3b, 0x0c,
});
try testArgs(@Vector(128, u7), .{
- 0x5c,
- 0x65,
- 0x65,
- 0x34,
- 0x31,
- 0x03,
- 0x7a,
- 0x56,
- 0x16,
- 0x74,
- 0x5c,
- 0x7f,
- 0x2a,
- 0x46,
- 0x2a,
- 0x5f,
- 0x62,
- 0x06,
- 0x51,
- 0x23,
- 0x58,
- 0x1f,
- 0x5a,
- 0x2d,
- 0x29,
- 0x21,
- 0x26,
- 0x5a,
- 0x5a,
- 0x13,
- 0x13,
- 0x46,
- 0x26,
- 0x1c,
- 0x06,
- 0x2d,
- 0x08,
- 0x52,
- 0x5b,
- 0x6f,
- 0x2d,
- 0x4a,
- 0x00,
- 0x40,
- 0x68,
- 0x27,
- 0x00,
- 0x4a,
- 0x3a,
- 0x22,
- 0x2d,
- 0x5b,
- 0x05,
- 0x26,
- 0x4e,
- 0x6f,
- 0x46,
- 0x4d,
- 0x14,
- 0x70,
- 0x51,
- 0x04,
- 0x66,
- 0x13,
- 0x4c,
- 0x7c,
- 0x67,
- 0x23,
- 0x13,
- 0x55,
- 0x1b,
- 0x30,
- 0x7d,
- 0x04,
- 0x47,
- 0x78,
- 0x05,
- 0x09,
- 0x5a,
- 0x20,
- 0x2e,
- 0x17,
- 0x11,
- 0x49,
- 0x6c,
- 0x5e,
- 0x34,
- 0x3e,
- 0x66,
- 0x60,
- 0x5d,
- 0x75,
- 0x48,
- 0x1d,
- 0x69,
- 0x67,
- 0x40,
- 0x2d,
- 0x7b,
- 0x31,
- 0x13,
- 0x60,
- 0x19,
- 0x2f,
- 0x3e,
- 0x7d,
- 0x23,
- 0x6a,
- 0x0e,
- 0x16,
- 0x44,
- 0x34,
- 0x5d,
- 0x5a,
- 0x2a,
- 0x0b,
- 0x64,
- 0x07,
- 0x22,
- 0x5b,
- 0x24,
- 0x22,
- 0x3b,
- 0x46,
- 0x23,
- 0x65,
- 0x5d,
- 0x34,
- }, .{
- 0x4b,
- 0x36,
- 0x7a,
- 0x13,
- 0x5a,
- 0x4b,
- 0x69,
- 0x4b,
- 0x1d,
- 0x02,
- 0x1b,
- 0x3f,
- 0x61,
- 0x21,
- 0x45,
- 0x48,
- 0x44,
- 0x61,
- 0x25,
- 0x42,
- 0x57,
- 0x7d,
- 0x7a,
- 0x45,
- 0x22,
- 0x2e,
- 0x44,
- 0x3f,
- 0x3a,
- 0x14,
- 0x07,
- 0x6e,
- 0x68,
- 0x51,
- 0x03,
- 0x6b,
- 0x11,
- 0x32,
- 0x6d,
- 0x6f,
- 0x44,
- 0x5a,
- 0x61,
- 0x6d,
- 0x71,
- 0x66,
- 0x54,
- 0x14,
- 0x5d,
- 0x56,
- 0x22,
- 0x5c,
- 0x3a,
- 0x72,
- 0x16,
- 0x39,
- 0x59,
- 0x3e,
- 0x27,
- 0x4d,
- 0x3d,
- 0x44,
- 0x72,
- 0x2c,
- 0x71,
- 0x74,
- 0x3b,
- 0x6c,
- 0x70,
- 0x39,
- 0x0f,
- 0x5c,
- 0x71,
- 0x04,
- 0x67,
- 0x02,
- 0x2c,
- 0x18,
- 0x0f,
- 0x14,
- 0x2d,
- 0x24,
- 0x51,
- 0x34,
- 0x6d,
- 0x0c,
- 0x19,
- 0x0f,
- 0x73,
- 0x79,
- 0x3d,
- 0x74,
- 0x20,
- 0x15,
- 0x22,
- 0x25,
- 0x09,
- 0x14,
- 0x09,
- 0x71,
- 0x2d,
- 0x6f,
- 0x09,
- 0x2e,
- 0x27,
- 0x75,
- 0x57,
- 0x62,
- 0x4d,
- 0x07,
- 0x62,
- 0x01,
- 0x41,
- 0x2d,
- 0x5d,
- 0x4c,
- 0x77,
- 0x10,
- 0x7f,
- 0x30,
- 0x0f,
- 0x50,
- 0x15,
- 0x39,
- 0x34,
- 0x7c,
- 0x33,
- 0x16,
+ 0x5c, 0x65, 0x65, 0x34, 0x31, 0x03, 0x7a, 0x56, 0x16, 0x74, 0x5c, 0x7f, 0x2a, 0x46, 0x2a, 0x5f,
+ 0x62, 0x06, 0x51, 0x23, 0x58, 0x1f, 0x5a, 0x2d, 0x29, 0x21, 0x26, 0x5a, 0x5a, 0x13, 0x13, 0x46,
+ 0x26, 0x1c, 0x06, 0x2d, 0x08, 0x52, 0x5b, 0x6f, 0x2d, 0x4a, 0x00, 0x40, 0x68, 0x27, 0x00, 0x4a,
+ 0x3a, 0x22, 0x2d, 0x5b, 0x05, 0x26, 0x4e, 0x6f, 0x46, 0x4d, 0x14, 0x70, 0x51, 0x04, 0x66, 0x13,
+ 0x4c, 0x7c, 0x67, 0x23, 0x13, 0x55, 0x1b, 0x30, 0x7d, 0x04, 0x47, 0x78, 0x05, 0x09, 0x5a, 0x20,
+ 0x2e, 0x17, 0x11, 0x49, 0x6c, 0x5e, 0x34, 0x3e, 0x66, 0x60, 0x5d, 0x75, 0x48, 0x1d, 0x69, 0x67,
+ 0x40, 0x2d, 0x7b, 0x31, 0x13, 0x60, 0x19, 0x2f, 0x3e, 0x7d, 0x23, 0x6a, 0x0e, 0x16, 0x44, 0x34,
+ 0x5d, 0x5a, 0x2a, 0x0b, 0x64, 0x07, 0x22, 0x5b, 0x24, 0x22, 0x3b, 0x46, 0x23, 0x65, 0x5d, 0x34,
+ }, .{
+ 0x4b, 0x36, 0x7a, 0x13, 0x5a, 0x4b, 0x69, 0x4b, 0x1d, 0x02, 0x1b, 0x3f, 0x61, 0x21, 0x45, 0x48,
+ 0x44, 0x61, 0x25, 0x42, 0x57, 0x7d, 0x7a, 0x45, 0x22, 0x2e, 0x44, 0x3f, 0x3a, 0x14, 0x07, 0x6e,
+ 0x68, 0x51, 0x03, 0x6b, 0x11, 0x32, 0x6d, 0x6f, 0x44, 0x5a, 0x61, 0x6d, 0x71, 0x66, 0x54, 0x14,
+ 0x5d, 0x56, 0x22, 0x5c, 0x3a, 0x72, 0x16, 0x39, 0x59, 0x3e, 0x27, 0x4d, 0x3d, 0x44, 0x72, 0x2c,
+ 0x71, 0x74, 0x3b, 0x6c, 0x70, 0x39, 0x0f, 0x5c, 0x71, 0x04, 0x67, 0x02, 0x2c, 0x18, 0x0f, 0x14,
+ 0x2d, 0x24, 0x51, 0x34, 0x6d, 0x0c, 0x19, 0x0f, 0x73, 0x79, 0x3d, 0x74, 0x20, 0x15, 0x22, 0x25,
+ 0x09, 0x14, 0x09, 0x71, 0x2d, 0x6f, 0x09, 0x2e, 0x27, 0x75, 0x57, 0x62, 0x4d, 0x07, 0x62, 0x01,
+ 0x41, 0x2d, 0x5d, 0x4c, 0x77, 0x10, 0x7f, 0x30, 0x0f, 0x50, 0x15, 0x39, 0x34, 0x7c, 0x33, 0x16,
});
try testArgs(@Vector(1, i8), .{
@@ -5288,6 +5048,7 @@ inline fn addSat(comptime Type: type, lhs: Type, rhs: Type) Type {
test addSat {
const test_add_sat = binary(addSat, .{});
try test_add_sat.testInts();
+ try test_add_sat.testIntVectors();
}
inline fn subUnsafe(comptime Type: type, lhs: Type, rhs: Type) AddOneBit(Type) {
test/behavior/vector.zig
@@ -930,12 +930,12 @@ test "mask parameter of @shuffle is comptime scope" {
test "saturating add" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
- if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
const S = struct {
fn doTheTest() !void {
test/cases/compile_errors/@import_zon_bad_type.zig
@@ -117,9 +117,9 @@ export fn testMutablePointer() void {
// tmp.zig:37:38: note: imported here
// neg_inf.zon:1:1: error: expected type '?u8'
// tmp.zig:57:28: note: imported here
-// neg_inf.zon:1:1: error: expected type 'tmp.testNonExhaustiveEnum__enum_492'
+// neg_inf.zon:1:1: error: expected type 'tmp.testNonExhaustiveEnum__enum_495'
// tmp.zig:62:39: note: imported here
-// neg_inf.zon:1:1: error: expected type 'tmp.testUntaggedUnion__union_494'
+// neg_inf.zon:1:1: error: expected type 'tmp.testUntaggedUnion__union_497'
// tmp.zig:67:44: note: imported here
-// neg_inf.zon:1:1: error: expected type 'tmp.testTaggedUnionVoid__union_497'
+// neg_inf.zon:1:1: error: expected type 'tmp.testTaggedUnionVoid__union_500'
// tmp.zig:72:50: note: imported here
test/cases/compile_errors/anytype_param_requires_comptime.zig
@@ -15,6 +15,6 @@ pub export fn entry() void {
// error
//
// :7:25: error: unable to resolve comptime value
-// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_466.C' must be comptime-known
+// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_469.C' must be comptime-known
// :4:16: note: struct requires comptime because of this field
// :4:16: note: types are not available at runtime
test/cases/compile_errors/bogus_method_call_on_slice.zig
@@ -16,5 +16,5 @@ pub export fn entry2() void {
//
// :3:6: error: no field or member function named 'copy' in '[]const u8'
// :9:8: error: no field or member function named 'bar' in '@TypeOf(.{})'
-// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_470'
+// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_473'
// :12:6: note: struct declared here
test/cases/compile_errors/coerce_anon_struct.zig
@@ -6,6 +6,6 @@ export fn foo() void {
// error
//
-// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_459'
+// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_462'
// :3:16: note: struct declared here
// :1:11: note: struct declared here
test/cases/compile_errors/redundant_try.zig
@@ -44,9 +44,9 @@ comptime {
//
// :5:23: error: expected error union type, found 'comptime_int'
// :10:23: error: expected error union type, found '@TypeOf(.{})'
-// :15:23: error: expected error union type, found 'tmp.test2__struct_496'
+// :15:23: error: expected error union type, found 'tmp.test2__struct_499'
// :15:23: note: struct declared here
-// :20:27: error: expected error union type, found 'tmp.test3__struct_498'
+// :20:27: error: expected error union type, found 'tmp.test3__struct_501'
// :20:27: note: struct declared here
// :25:23: error: expected error union type, found 'struct { comptime *const [5:0]u8 = "hello" }'
// :31:13: error: expected error union type, found 'u32'