Commit 7bfdb7f26d
Changed files (6)
src
test
behavior
x86_64
src/arch/x86_64/CodeGen.zig
@@ -2389,7 +2389,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}
fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
- @setEvalBranchQuota(22_500);
+ @setEvalBranchQuota(23_100);
const pt = cg.pt;
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
@@ -98880,6 +98880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
.{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
@@ -99134,6 +99135,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_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
@@ -99164,6 +99166,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_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
@@ -99291,6 +99294,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_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
@@ -99320,6 +99324,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:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
@@ -99545,6 +99550,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:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
@@ -100555,6 +100561,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
.{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
@@ -100586,6 +100593,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
.{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
@@ -100617,6 +100625,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(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .cvttss2si, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
@@ -100645,6 +100654,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(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .cvttss2si, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
@@ -100849,6 +100859,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(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
@@ -100878,6 +100889,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(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
@@ -100907,6 +100919,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(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
@@ -100936,6 +100949,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(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
@@ -101051,6 +101065,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_, .cvttps2dq, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -101079,6 +101094,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:", ._, .cvttps2dq, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
@@ -101231,6 +101247,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_, .cvttss2si, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
@@ -101259,6 +101276,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:", ._, .cvttss2si, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
@@ -101687,6 +101705,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .mem },
.{ .type = .i16, .kind = .mem },
.unused,
.unused,
@@ -101696,13 +101715,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
.{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
- .{ ._, ._, .movsx, .dst0d, .tmp1b, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .dst0d, .tmp2b, ._, ._ },
} },
}, .{
.required_features = .{ .x87, null, null, null },
@@ -101713,6 +101737,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .mem },
.{ .type = .i16, .kind = .mem },
.unused,
.unused,
@@ -101722,13 +101747,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
.{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
- .{ ._, ._, .movzx, .dst0d, .tmp1b, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp2b, ._, ._ },
} },
}, .{
.required_features = .{ .x87, null, null, null },
@@ -101739,8 +101769,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -101753,7 +101783,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
.{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0w, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+ .{ ._, .fi_p, .st, .dst0w, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .x87, null, null, null },
@@ -101764,8 +101800,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -101778,7 +101814,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
.{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0d, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+ .{ ._, .fi_p, .st, .dst0d, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
@@ -101813,8 +101855,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -101827,7 +101869,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
.{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0q, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+ .{ ._, .fi_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
@@ -101901,12 +101949,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
.{ .type = .i64, .kind = .mem },
- .unused,
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -101917,16 +101965,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .f_, .ld, .tmp3t, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp4q, ._, ._ },
- .{ ._, .f_, .sub, .lea(.tmp0d), ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
+ .{ ._, .f_, .ld, .tmp0t, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp2w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2w, .dst0w, ._, ._ },
+ .{ ._, ._, .lea, .dst0q, .mem(.tmp3), ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
+ .{ ._, .f_, .sub, .lea(.dst0d), ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .tmp4q, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp5q, ._, ._ },
.{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
.{ ._, ._, .@"and", .dst0q, .tmp4q, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp5q, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
@@ -102248,10 +102302,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
.unused,
.unused,
.unused,
@@ -102260,14 +102314,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
.{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .movzx, .tmp3d, .tmp2b, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp4b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .x87, null, null, null },
@@ -102278,10 +102339,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
.unused,
.unused,
.unused,
@@ -102290,14 +102351,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
.{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .movzx, .tmp3d, .tmp2b, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp4b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
.{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, .slow_incdec, null, null },
@@ -102723,6 +102791,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -102732,15 +102801,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .x87, null, null, null },
@@ -102751,10 +102826,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.{ .type = .i32, .kind = .mem },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
.unused,
.unused,
.unused,
@@ -102763,14 +102838,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
.{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
@@ -102969,6 +103051,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -102978,15 +103061,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .x87, null, null, null },
@@ -102997,10 +103086,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.{ .type = .i64, .kind = .mem },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
.unused,
.unused,
.unused,
@@ -103009,14 +103098,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
.{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2q, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
@@ -103273,6 +103369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
@@ -103282,15 +103379,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
@@ -103881,7 +103984,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.dst_constraints = .{ .{ .signed_int = .byte }, .any },
.patterns = &.{
@@ -103889,7 +103992,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_x87, .none, .none } },
},
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .i16, .kind = .mem },
.unused,
.unused,
@@ -103910,13 +104013,46 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .i16, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .dst0d, .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_x87, .none, .none } },
},
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .i16, .kind = .mem },
.unused,
.unused,
@@ -103935,7 +104071,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .movzx, .dst0d, .tmp1b, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .slow_incdec, null, null },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .i16, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, .slow_incdec, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
@@ -103946,7 +104115,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -103968,7 +104137,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
@@ -103979,7 +104148,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -104003,6 +104172,84 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.required_features = .{ .x87, .slow_incdec, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
+ .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp3d, .tmp5b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
+ .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp3d, .tmp5b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, .slow_incdec, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -104034,7 +104281,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
@@ -104066,8 +104313,86 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .x87, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
+ .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp3d, .tmp5b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
+ .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp3d, .tmp5b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.dst_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any },
.patterns = &.{
@@ -104094,6 +104419,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+ .{ ._, .fi_p, .st, .dst0w, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
@@ -104124,6 +104481,41 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -104154,6 +104546,43 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i32, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
.patterns = &.{
@@ -104180,6 +104609,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+ .{ ._, .fi_p, .st, .dst0d, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
@@ -104210,6 +104671,41 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -104240,6 +104736,43 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i64, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
.patterns = &.{
@@ -104265,7 +104798,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .fi_p, .stt, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+ .{ ._, .fi_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse3, .x87, null },
.src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
.patterns = &.{
@@ -104301,7 +104866,49 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
+ .{ .type = .i64, .kind = .mem },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_, .ld, .tmp0t, ._, ._, ._ },
+ .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp2w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2w, .dst0w, ._, ._ },
+ .{ ._, ._, .lea, .dst0q, .mem(.tmp3), ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
+ .{ ._, .f_, .sub, .lea(.dst0d), ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .tmp4q, ._, ._ },
+ .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp5q, ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .tmp4q, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp5q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, .x87, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
@@ -104329,6 +104936,41 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+ .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
.src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
@@ -116834,8 +117476,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
switch (reduce.operation) {
.And, .Or, .Xor => {},
.Min, .Max => break :fallback try cg.airReduce(inst),
- .Add => if (cg.floatBits(res_ty)) |_| break :fallback try cg.airReduce(inst),
- .Mul => break :fallback try cg.airReduce(inst),
+ .Add, .Mul => if (cg.floatBits(res_ty)) |_| break :fallback try cg.airReduce(inst),
}
var ops = try cg.tempsFromOperands(inst, .{reduce.operand});
var res: [1]Temp = undefined;
@@ -118473,12 +119114,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .vp_d, .srl, .tmp0x, .src0x, .ui(16), ._ },
- .{ ._, .vp_, mir_tag, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_w, .srl, .tmp0x, .src0x, .ui(8), ._ },
- .{ ._, .vp_, mir_tag, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_, mir_tag, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_w, .srl, .dst0x, .src0x, .ui(8), ._ },
+ .{ ._, .vp_, mir_tag, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
@@ -119584,12 +120225,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
- .{ ._, .vp_, mir_tag, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_d, .srl, .tmp0x, .src0x, .ui(16), ._ },
- .{ ._, .vp_, mir_tag, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_, mir_tag, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .dst0x, .src0x, .ui(16), ._ },
+ .{ ._, .vp_, mir_tag, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
@@ -120479,19 +121120,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
- .{ ._, .vp_, mir_tag, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
- .{ ._, .vp_, mir_tag, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_, mir_tag, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .dst0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_, mir_tag, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
.dst_constraints = .{ .{ .int = .dword }, .any },
.src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
.{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
@@ -120506,7 +121147,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .p_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
.{ ._, .p_, mir_tag, .tmp0x, .src0x, ._, ._ },
@@ -121203,12 +121844,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .v_i128, .extract, .tmp0x, .src0y, .ui(1), ._ },
- .{ ._, .vp_, mir_tag, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
- .{ ._, .vp_, mir_tag, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_, mir_tag, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .dst0x, .src0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_, mir_tag, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
@@ -121230,12 +121871,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
- .{ ._, .v_ps, mir_tag, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
- .{ ._, .v_ps, mir_tag, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, mir_tag, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
+ .{ ._, .v_ps, mir_tag, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .avx512f, null, null, null },
@@ -122425,12 +123066,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .vp_d, .srl, .tmp0x, .src0x, .ui(16), ._ },
- .{ ._, .vp_b, .add, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_w, .srl, .tmp0x, .src0x, .ui(8), ._ },
- .{ ._, .vp_b, .add, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_b, .add, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_w, .srl, .dst0x, .src0x, .ui(8), ._ },
+ .{ ._, .vp_b, .add, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
@@ -123125,7 +123766,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.required_features = .{ .avx, null, null, null },
.dst_constraints = .{ .{ .int = .byte }, .any },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .byte } }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -123171,7 +123812,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
.{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
.unused,
.unused,
@@ -123405,12 +124046,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
- .{ ._, .vp_w, .add, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_d, .srl, .tmp0x, .src0x, .ui(16), ._ },
- .{ ._, .vp_w, .add, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_w, .add, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .dst0x, .src0x, .ui(16), ._ },
+ .{ ._, .vp_w, .add, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
@@ -123947,7 +124588,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.required_features = .{ .avx, null, null, null },
.dst_constraints = .{ .{ .int = .word }, .any },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .word } }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -124191,19 +124832,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
- .{ ._, .vp_d, .add, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
- .{ ._, .vp_d, .add, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .add, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .dst0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_d, .add, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
.dst_constraints = .{ .{ .int = .dword }, .any },
.src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
.{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
@@ -124218,7 +124859,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .p_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
.{ ._, .p_d, .add, .tmp0x, .src0x, ._, ._ },
@@ -124588,7 +125229,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.required_features = .{ .avx, null, null, null },
.dst_constraints = .{ .{ .int = .dword }, .any },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .dword } }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -124828,12 +125469,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .v_i128, .extract, .tmp0x, .src0y, .ui(1), ._ },
- .{ ._, .vp_q, .add, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
- .{ ._, .vp_q, .add, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_q, .add, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .dst0x, .src0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_q, .add, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
@@ -124855,12 +125496,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
- .{ ._, .vp_q, .add, .dst0x, .src0x, .tmp0x, ._ },
- .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
- .{ ._, .vp_q, .add, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_q, .add, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .dst0x, .src0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_q, .add, .dst0x, .tmp0x, .dst0x, ._ },
} },
}, .{
.required_features = .{ .avx512f, null, null, null },
@@ -125091,7 +125732,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.required_features = .{ .avx, null, null, null },
.dst_constraints = .{ .{ .int = .qword }, .any },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -125268,7 +125909,3013 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
} },
- .Mul => unreachable,
+ .Mul => comptime &.{ .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .mut_gpr, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .srl, .tmp0x, .src0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp0x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .srl, .tmp0x, .src0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp0x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_d, .srl, .dst0x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .srl, .tmp0x, .src0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_w, .srl, .dst0x, .src0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .tmp0x, .dst0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp0x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .srl, .dst0x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .srl, .tmp0x, .src0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp0x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_d, .shuf, .dst0x, .tmp0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp0x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp0x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u8, .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), ._, ._ },
+ .{ ._, .v_q, .mov, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0x, .tmp2x, .src0x, ._ },
+ .{ ._, .vp_b, .sub, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_w, .srl, .tmp2x, .dst0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._q, .mov, .tmp2x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .andn, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_b, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp2x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp2x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .srl, .tmp0x, .src0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp0x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_d, .shuf, .dst0x, .tmp0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp0x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp0x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u8, .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), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0x, .tmp2x, .src0x, ._ },
+ .{ ._, .vp_b, .sub, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_w, .srl, .tmp2x, .dst0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .andn, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_b, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp2x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp2x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .srl, .tmp0y, .src0y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .src0y, .tmp0y, ._ },
+ .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
+ .{ ._, .vp_w, .srl, .tmp1x, .src0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp1x, ._ },
+ .{ ._, .vp_w, .srl, .tmp1x, .tmp0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .tmp0x, .tmp0x, .tmp1x, ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_32_u8, .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), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0y, .tmp2y, .src0y, ._ },
+ .{ ._, .vp_b, .sub, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .vp_w, .srl, .tmp2y, .dst0y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_u8, .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_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_ps, .andn, .tmp3y, .tmp2y, .src0y, ._ },
+ .{ ._, .vp_b, .sub, .dst0x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_f128, .extract, .tmp2x, .tmp2y, .ui(1), ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .tmp3y, .ui(1), ._ },
+ .{ ._, .vp_b, .sub, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_w, .srl, .tmp3x, .dst0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp3x, ._ },
+ .{ ._, .vp_w, .srl, .tmp3x, .tmp2x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .tmp2x, .tmp2x, .tmp3x, ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .zword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_dqa, .mov, .dst0y, .mem(.src0y), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp0y, .memd(.src0y, 32), ._, ._ },
+ .{ ._, .vp_w, .srl, .tmp1y, .dst0y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp1y, ._ },
+ .{ ._, .vp_w, .srl, .tmp1y, .tmp0y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .tmp0y, .tmp0y, .tmp1y, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp0y, ._ },
+ .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .zword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_u8, .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_dqa, .mov, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .tmp2y, .memd(.src0y, 32), ._ },
+ .{ ._, .vp_b, .sub, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .dst0y, .mem(.src0y), ._ },
+ .{ ._, .vp_b, .sub, .dst0y, .tmp3y, .dst0y, ._ },
+ .{ ._, .vp_w, .srl, .tmp3y, .tmp2y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .tmp2y, .tmp2y, .tmp3y, ._ },
+ .{ ._, .vp_w, .srl, .tmp3y, .dst0y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp3y, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
+ .{ ._, .vp_w, .srl, .tmp1y, .dst0y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp1y, ._ },
+ .{ .@"0:", .vp_w, .movzxb, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp1y, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_i128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .srl, .tmp1x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-24, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ ._, .vp_w, .srl, .tmp1x, .dst0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ .@"0:", .vp_w, .movzxb, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .srl, .tmp1x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-24, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp1x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ .@"0:", .p_w, .movzxb, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp1x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-24, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp1x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, .p_, .unpcklbw, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp1x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .zword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-96, .src0, .add_size), ._, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_b, .sub, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
+ .{ ._, .vp_b, .sub, .dst0y, .tmp3y, .dst0y, ._ },
+ .{ ._, .vp_w, .srl, .tmp3y, .tmp2y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .tmp2y, .tmp2y, .tmp3y, ._ },
+ .{ ._, .vp_w, .srl, .tmp3y, .dst0y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp3y, ._ },
+ .{ .@"0:", .vp_w, .movzxb, .tmp3y, .memid(.src0x, .tmp0, 16), ._, ._ },
+ .{ ._, .vp_w, .mull, .tmp2y, .tmp2y, .tmp3y, ._ },
+ .{ ._, .vp_w, .movzxb, .tmp3y, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp3y, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_b, .sub, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .vp_w, .srl, .tmp2y, .dst0y, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ .@"0:", .vp_w, .movzxb, .tmp2y, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-40, .src0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .andn, .tmp3y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_b, .sub, .dst0x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_f128, .extract, .tmp2x, .tmp2y, .ui(1), ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .tmp3y, .ui(1), ._ },
+ .{ ._, .vp_b, .sub, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_w, .srl, .tmp3x, .dst0x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp3x, ._ },
+ .{ ._, .vp_w, .srl, .tmp3x, .tmp2x, .ui(8), ._ },
+ .{ ._, .vp_w, .mull, .tmp2x, .tmp2x, .tmp3x, ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ .@"0:", .vp_w, .movzxb, .tmp2x, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-24, .src0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .andn, .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, .p_b, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp2x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ .@"0:", .p_w, .movzxb, .tmp2x, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp2x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-24, .src0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .andn, .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, .p_b, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_w, .srl, .tmp2x, .ui(8), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp2x, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, .p_, .unpcklbw, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp2x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .slow_incdec, null, null, null },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .al }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .memad(.src0b, .add_unaligned_size, -1), ._, ._ },
+ .{ .@"0:", ._, .mul, .memi(.src0b, .tmp0), ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .al }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .memad(.src0b, .add_unaligned_size, -1), ._, ._ },
+ .{ .@"0:", ._, .mul, .memi(.src0b, .tmp0), ._, ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .mut_gpr, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .srl, .tmp0x, .src0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp0x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp0x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp0x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .dst0x, .src0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .tmp0x, .dst0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_d, .srl, .dst0x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp0x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp0x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u16, .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), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0x, .tmp2x, .src0x, ._ },
+ .{ ._, .vp_w, .sub, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .andn, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp2x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_i128, .extract, .tmp0x, .src0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u16, .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), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0y, .tmp2y, .src0y, ._ },
+ .{ ._, .vp_w, .sub, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u16, .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_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_ps, .andn, .tmp3y, .tmp2y, .src0y, ._ },
+ .{ ._, .vp_w, .sub, .dst0x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_f128, .extract, .tmp2x, .tmp2y, .ui(1), ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .tmp3y, .ui(1), ._ },
+ .{ ._, .vp_w, .sub, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .zword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_dqa, .mov, .dst0y, .mem(.src0y), ._, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .memd(.src0y, 32), ._ },
+ .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .srl, .tmp0x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .zword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u16, .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_dqa, .mov, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .tmp2y, .memd(.src0y, 32), ._ },
+ .{ ._, .vp_w, .sub, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .dst0y, .mem(.src0y), ._ },
+ .{ ._, .vp_w, .sub, .dst0y, .tmp3y, .dst0y, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
+ .{ .@"0:", .vp_w, .mull, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_i128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .srl, .tmp1x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", .vp_w, .mull, .dst0x, .dst0x, .memi(.src0x, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .srl, .tmp1x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", .p_w, .mull, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp1x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .zword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-128, .src0, .add_size), ._, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_w, .sub, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
+ .{ ._, .vp_w, .sub, .dst0y, .tmp3y, .dst0y, ._ },
+ .{ .@"0:", .vp_w, .mull, .tmp2y, .tmp2y, .memid(.src0y, .tmp0, 32), ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(64), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_w, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_size), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_w, .sub, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ .@"0:", .vp_w, .mull, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .andn, .tmp3y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_w, .sub, .dst0x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_f128, .extract, .tmp2x, .tmp2y, .ui(1), ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .tmp3y, .ui(1), ._ },
+ .{ ._, .vp_w, .sub, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ .@"0:", .vp_w, .mull, .dst0x, .dst0x, .memi(.src0x, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .srl, .tmp2x, .dst0x, .ui(16), ._ },
+ .{ ._, .vp_w, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .andn, .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, .p_w, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ .@"0:", .p_w, .mull, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .srl, .tmp2x, .ui(16), ._, ._ },
+ .{ ._, .p_w, .mull, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .dst_constraints = .{ .{ .int = .word }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .memad(.src0w, .add_unaligned_size, -2), ._, ._ },
+ .{ .@"0:", .i_, .mul, .dst0w, .memi(.src0w, .tmp0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .mut_gpr, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .src0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .tmp0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .tmp0x, .src0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .tmp0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .dst0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .tmp0x, .dst0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .tmp0x, .src0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_udq, .mul, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_d, .shuf, .dst0x, .src0x, .ui(0b01_01_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_i128, .extract, .tmp0x, .src0y, .ui(1), ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .src0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u32, .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), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0y, .tmp2y, .src0y, ._ },
+ .{ ._, .vp_d, .sub, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .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_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_ps, .andn, .tmp3y, .tmp2y, .src0y, ._ },
+ .{ ._, .vp_d, .sub, .dst0x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_f128, .extract, .tmp2x, .tmp2y, .ui(1), ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .tmp3y, .ui(1), ._ },
+ .{ ._, .vp_d, .sub, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_int = .{ .of = .zword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_dqa, .mov, .dst0y, .mem(.src0y), ._, ._ },
+ .{ ._, .vp_d, .mull, .dst0y, .dst0y, .memd(.src0y, 32), ._ },
+ .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp0x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .zword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .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_dqa, .mov, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .tmp2y, .memd(.src0y, 32), ._ },
+ .{ ._, .vp_d, .sub, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .dst0y, .mem(.src0y), ._ },
+ .{ ._, .vp_d, .sub, .dst0y, .tmp3y, .dst0y, ._ },
+ .{ ._, .vp_d, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
+ .{ .@"0:", .vp_d, .mull, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_i128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", .vp_d, .mull, .dst0x, .dst0x, .memi(.src0x, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp1x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", .p_d, .mull, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp1x, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .tmp1x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .zword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_64_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-128, .src0, .add_size), ._, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_d, .sub, .tmp2y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .andn, .tmp3y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
+ .{ ._, .vp_d, .sub, .dst0y, .tmp3y, .dst0y, ._ },
+ .{ .@"0:", .vp_d, .mull, .tmp2y, .tmp2y, .memid(.src0y, .tmp0, 32), ._ },
+ .{ ._, .vp_d, .mull, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(64), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .mull, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_size), ._, ._ },
+ .{ ._, .vp_, .andn, .dst0y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_d, .sub, .dst0y, .dst0y, .tmp2y, ._ },
+ .{ .@"0:", .vp_d, .mull, .dst0y, .dst0y, .memi(.src0y, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_i128, .extract, .tmp2x, .dst0y, .ui(1), ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .andn, .tmp3y, .tmp2y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .vp_d, .sub, .dst0x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_f128, .extract, .tmp2x, .tmp2y, .ui(1), ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .tmp3y, .ui(1), ._ },
+ .{ ._, .vp_d, .sub, .tmp2x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_d, .mull, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ .@"0:", .vp_d, .mull, .dst0x, .dst0x, .memi(.src0x, .tmp0), ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ .{ ._, .vp_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .vp_udq, .mul, .dst0x, .dst0x, .tmp2x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .andn, .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, .p_d, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ .@"0:", .p_d, .mull, .dst0x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0, .invert = true } } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .andn, .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, .p_d, .sub, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp2x, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .tmp2x, .ui(0b11_11_01_01), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp2x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp2x, .dst0x, .ui(0b11_10_11_10), ._ },
+ .{ ._, .p_udq, .mul, .dst0x, .tmp2x, ._, ._ },
+ } },
+ }, .{
+ .dst_constraints = .{ .{ .int = .dword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .dst0d, .memad(.src0d, .add_unaligned_size, -4), ._, ._ },
+ .{ .@"0:", .i_, .mul, .dst0d, .memi(.src0d, .tmp0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(4), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .int = .qword }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .mut_gpr, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .dst_constraints = .{ .{ .int = .qword }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .dst_constraints = .{ .{ .int = .qword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .memad(.src0q, .add_unaligned_size, -8), ._, ._ },
+ .{ .@"0:", .i_, .mul, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .int = .xword }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .mut_gpr, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .dst_constraints = .{ .{ .int = .xword }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .int = .yword }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .mut_gpr, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .dst_constraints = .{ .{ .int = .yword }, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .dst_constraints = .{ .any_int, .any },
+ .src_constraints = .{ .{ .vec_len = 1 }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .adx, null },
+ .dst_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .isize, .kind = .{ .reg = .rcx } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_unaligned_size_sub_2_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mema(.src0, .add_unaligned_size_sub_elem_size), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2p, .memi(.src0, .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-8, .dst0, .add_size), ._, ._ },
+ .{ .@"1:", ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .leai(.tmp1q, .tmp3), ._, ._ },
+ .{ ._, ._z, .j, .@"3f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .leaad(.tmp3, .sub_src0_elem_size, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leai(.tmp2q, .tmp5), ._ },
+ .{ ._, ._x, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp5, .add_src0_elem_size, -8), .tmp7q, ._, ._ },
+ .{ ._, ._rcxz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .memia(.dst0q, .tmp5, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .lead(.tmp5, 8), ._, ._ },
+ .{ ._, ._mp, .j, .@"2b", ._, ._, ._ },
+ .{ .@"3:", ._, .mov, .memi(.dst0q, .tmp3), .tmp4q, ._, ._ },
+ .{ .@"2:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp3d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .sa(.dst0, .add_size), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
+ .dst_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(8, .src0, .add_unaligned_size_sub_2_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mema(.src0, .add_unaligned_size_sub_elem_size), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2p, .memi(.src0, .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .lea, .tmp4p, .leaa(.tmp3, .sub_src0_elem_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ ._, ._nz, .j, .@"3f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp3), .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"4f", ._, ._, ._ },
+ .{ .@"2:", ._, .adc, .tmp9q, .memsia(.dst0q, .@"8", .tmp4, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp7q, .tmp9q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6b, .ui(4), ._, ._ },
+ .{ .@"3:", ._x, .mul, .tmp9q, .tmp8q, .leasi(.tmp2q, .@"8", .tmp4), ._ },
+ .{ ._, ._, .adc, .tmp8q, .tmp7q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp4, .add_src0_elem_size), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"2b", ._, ._, ._ },
+ .{ .@"4:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .sa(.dst0, .add_size), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .dst_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(8, .src0, .add_unaligned_size_sub_2_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mema(.src0, .add_unaligned_size_sub_elem_size), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2p, .memi(.src0, .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .lea, .tmp4p, .leaa(.tmp3, .sub_src0_elem_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ ._, ._nz, .j, .@"3f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp3), .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"4f", ._, ._, ._ },
+ .{ .@"2:", ._, .adc, .tmp9q, .memsia(.dst0q, .@"8", .tmp4, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp7q, .tmp9q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6b, .ui(4), ._, ._ },
+ .{ .@"3:", ._x, .mul, .tmp9q, .tmp8q, .leasi(.tmp2q, .@"8", .tmp4), ._ },
+ .{ ._, ._, .adc, .tmp8q, .tmp7q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp4, .add_src0_elem_size), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"2b", ._, ._, ._ },
+ .{ .@"4:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .sa(.dst0, .add_size), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .dst_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(8, .src0, .add_unaligned_size_sub_2_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mema(.src0, .add_unaligned_size_sub_elem_size), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2p, .memi(.src0, .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .lea, .tmp4p, .leaa(.tmp3, .sub_src0_elem_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ ._, ._nz, .j, .@"3f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp3), .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"4f", ._, ._, ._ },
+ .{ .@"2:", ._, .adc, .tmp9q, .memsia(.dst0q, .@"8", .tmp4, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp7q, .tmp9q, ._, ._ },
+ .{ .@"3:", ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp2q, .@"8", .tmp4), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .tmp7q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp4, .add_src0_elem_size), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"2b", ._, ._, ._ },
+ .{ .@"4:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .sa(.dst0, .add_size), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .dst_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(8, .src0, .add_unaligned_size_sub_2_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mema(.src0, .add_unaligned_size_sub_elem_size), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2p, .memi(.src0, .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ .@"1:", ._, .lea, .tmp4p, .leaa(.tmp3, .sub_src0_elem_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ ._, ._nz, .j, .@"3f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp3), .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"4f", ._, ._, ._ },
+ .{ .@"2:", ._, .adc, .tmp9q, .memsia(.dst0q, .@"8", .tmp4, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp7q, .tmp9q, ._, ._ },
+ .{ .@"3:", ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp2q, .@"8", .tmp4), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .tmp7q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp4, .add_src0_elem_size), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp4p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"2b", ._, ._, ._ },
+ .{ .@"4:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .sa(.dst0, .add_size), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ } },
}) catch |err| switch (err) {
error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
@tagName(air_tag),
@@ -141408,14 +145055,14 @@ fn airRepeat(self: *CodeGen, inst: Air.Inst.Index) !void {
}
fn airAsm(self: *CodeGen, inst: Air.Inst.Index) !void {
+ @setEvalBranchQuota(1_100);
const pt = self.pt;
const zcu = pt.zcu;
const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl;
const extra = self.air.extraData(Air.Asm, ty_pl.payload);
const clobbers_len: u31 = @truncate(extra.data.flags);
var extra_i: usize = extra.end;
- const outputs: []const Air.Inst.Ref =
- @ptrCast(self.air.extra[extra_i..][0..extra.data.outputs_len]);
+ const outputs: []const Air.Inst.Ref = @ptrCast(self.air.extra[extra_i..][0..extra.data.outputs_len]);
extra_i += outputs.len;
const inputs: []const Air.Inst.Ref = @ptrCast(self.air.extra[extra_i..][0..extra.data.inputs_len]);
extra_i += inputs.len;
src/arch/x86_64/Encoding.zig
@@ -336,7 +336,7 @@ pub const Mnemonic = enum {
fcom, fcomi, fcomip, fcomp, fcompp, fcos,
fdecstp, fdiv, fdivp, fdivr, fdivrp, ffree,
fiadd, ficom, ficomp, fidiv, fidivr, fild, fimul, fincstp, finit,
- fist, fistp, fisttp, fisub, fisubr,
+ fist, fistp, fisub, fisubr,
fld, fld1, fldcw, fldenv, fldl2e, fldl2t, fldlg2, fldln2, fldpi, fldz,
fmul, fmulp,
fnclex, fninit, fnop, fnsave, fnstcw, fnstenv, fnstsw,
@@ -349,19 +349,18 @@ pub const Mnemonic = enum {
// MMX
emms, movd, movq,
packssdw, packsswb, packuswb,
- paddb, paddd, paddq, paddsb, paddsw, paddusb, paddusw, paddw,
+ paddb, paddd, paddsb, paddsw, paddusb, paddusw, paddw,
pand, pandn, por, pxor,
pcmpeqb, pcmpeqd, pcmpeqw,
pcmpgtb, pcmpgtd, pcmpgtw,
- pmulhw, pmullw,
+ pmaddwd, pmulhw, pmullw,
pslld, psllq, psllw,
psrad, psraw,
psrld, psrlq, psrlw,
- psubb, psubd, psubq, psubsb, psubsw, psubusb, psubusw, psubw,
+ psubb, psubd, psubsb, psubsw, psubusb, psubusw, psubw,
// SSE
addps, addss,
- andps,
- andnps,
+ andnps, andps,
cmpps, cmpss, comiss,
cvtpi2ps, cvtps2pi, cvtsi2ss, cvtss2si, cvttps2pi, cvttss2si,
divps, divss,
@@ -374,9 +373,11 @@ pub const Mnemonic = enum {
movss, movups,
mulps, mulss,
orps,
+ pavgb, pavgw,
pextrw, pinsrw,
- pmaxsw, pmaxub, pminsw, pminub, pmovmskb,
+ pmaxsw, pmaxub, pminsw, pminub, pmovmskb, pmulhuw,
prefetchit0, prefetchit1, prefetchnta, prefetcht0, prefetcht1, prefetcht2, prefetchw, prefetchwt1,
+ psadbw, pshufw,
shufps,
sqrtps, sqrtss,
stmxcsr,
@@ -397,15 +398,16 @@ pub const Mnemonic = enum {
maxpd, maxsd,
minpd, minsd,
movapd,
- movdqa, movdqu,
+ movdq2q, movdqa, movdqu,
movhpd, movlpd,
- movmskpd,
+ movmskpd, movq2dq,
//movsd,
movupd,
mulpd, mulsd,
orpd,
+ paddq, pmuludq,
pshufd, pshufhw, pshuflw,
- pslldq, psrldq,
+ pslldq, psrldq, psubq,
punpckhbw, punpckhdq, punpckhqdq, punpckhwd,
punpcklbw, punpckldq, punpcklqdq, punpcklwd,
shufpd,
@@ -414,9 +416,17 @@ pub const Mnemonic = enum {
ucomisd, unpckhpd, unpcklpd,
xorpd,
// SSE3
- addsubpd, addsubps, haddpd, haddps, lddqu, movddup, movshdup, movsldup,
+ addsubpd, addsubps,
+ fisttp,
+ haddpd, haddps,
+ hsubpd, hsubps,
+ lddqu,
+ movddup, movshdup, movsldup,
// SSSE3
- pabsb, pabsd, pabsw, palignr, pshufb,
+ pabsb, pabsd, pabsw, palignr,
+ phaddw, phaddsw, phaddd, phsubw, phsubsw, phsubd,
+ pmaddubsw, pmulhrsw, pshufb,
+ psignb, psignd, psignw,
// SSE4.1
blendpd, blendps, blendvpd, blendvps,
dppd, dpps,
@@ -430,7 +440,7 @@ pub const Mnemonic = enum {
pmaxsb, pmaxsd, pmaxud, pmaxuw, pminsb, pminsd, pminud, pminuw,
pmovsxbd, pmovsxbq, pmovsxbw, pmovsxdq, pmovsxwd, pmovsxwq,
pmovzxbd, pmovzxbq, pmovzxbw, pmovzxdq, pmovzxwd, pmovzxwq,
- pmulld,
+ pmuldq, pmulld,
ptest,
roundpd, roundps, roundsd, roundss,
// SSE4.2
@@ -458,7 +468,7 @@ pub const Mnemonic = enum {
vdppd, vdpps,
vextractf128, vextractps,
vgf2p8affineinvqb, vgf2p8affineqb, vgf2p8mulb,
- vhaddpd, vhaddps,
+ vhaddpd, vhaddps, vhsubpd, vhsubps,
vinsertf128, vinsertps,
vlddqu, vldmxcsr,
vmaskmovpd, vmaskmovps,
@@ -480,21 +490,24 @@ pub const Mnemonic = enum {
vpabsb, vpabsd, vpabsw,
vpackssdw, vpacksswb, vpackusdw, vpackuswb,
vpaddb, vpaddd, vpaddq, vpaddsb, vpaddsw, vpaddusb, vpaddusw, vpaddw,
- vpalignr, vpand, vpandn,
+ vpalignr, vpand, vpandn, vpavgb, vpavgw,
vpblendvb, vpblendw, vpclmulqdq,
vpcmpeqb, vpcmpeqd, vpcmpeqq, vpcmpeqw,
vpcmpgtb, vpcmpgtd, vpcmpgtq, vpcmpgtw,
+ vphaddw, vphaddsw, vphaddd, vphsubw, vphsubsw, vphsubd,
vperm2f128, vpermilpd, vpermilps,
vpextrb, vpextrd, vpextrq, vpextrw,
vpinsrb, vpinsrd, vpinsrq, vpinsrw,
vpmaxsb, vpmaxsd, vpmaxsw, vpmaxub, vpmaxud, vpmaxuw,
vpminsb, vpminsd, vpminsw, vpminub, vpminud, vpminuw,
+ vpmaddubsw,
vpmovmskb,
vpmovsxbd, vpmovsxbq, vpmovsxbw, vpmovsxdq, vpmovsxwd, vpmovsxwq,
vpmovzxbd, vpmovzxbq, vpmovzxbw, vpmovzxdq, vpmovzxwd, vpmovzxwq,
- vpmulhw, vpmulld, vpmullw,
+ vpmuldq, vpmulhrsw, vpmulhw, vpmulld, vpmullw, vpmuludq,
vpor,
vpshufb, vpshufd, vpshufhw, vpshuflw,
+ vpsignb, vpsignd, vpsignw,
vpslld, vpslldq, vpsllq, vpsllw,
vpsrad, vpsraq, vpsraw,
vpsrld, vpsrldq, vpsrlq, vpsrlw,
@@ -779,7 +792,7 @@ pub const Op = enum {
pub fn isImmediate(op: Op) bool {
// zig fmt: off
return switch (op) {
- .imm8, .imm16, .imm32, .imm64,
+ .imm8, .imm16, .imm32, .imm64,
.imm8s, .imm16s, .imm32s,
.rel8, .rel16, .rel32,
.unity,
@@ -986,6 +999,7 @@ pub const Feature = enum {
sse,
sse2,
sse3,
+ @"sse3 x87",
sse4_1,
sse4_2,
ssse3,
src/arch/x86_64/encodings.zon
@@ -1160,10 +1160,6 @@
.{ .fistp, .m, .{ .m32 }, .{ 0xdb }, 3, .none, .x87 },
.{ .fistp, .m, .{ .m64 }, .{ 0xdf }, 7, .none, .x87 },
- .{ .fisttp, .m, .{ .m16 }, .{ 0xdf }, 1, .none, .x87 },
- .{ .fisttp, .m, .{ .m32 }, .{ 0xdb }, 1, .none, .x87 },
- .{ .fisttp, .m, .{ .m64 }, .{ 0xdd }, 1, .none, .x87 },
-
.{ .fld, .m, .{ .m32 }, .{ 0xd9 }, 0, .none, .x87 },
.{ .fld, .m, .{ .m64 }, .{ 0xdd }, 0, .none, .x87 },
.{ .fld, .m, .{ .m80 }, .{ 0xdb }, 5, .none, .x87 },
@@ -1540,6 +1536,8 @@
.{ .pmullw, .rm, .{ .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0xd5 }, 0, .none, .sse2 },
+ .{ .pmuludq, .rm, .{ .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0xf4 }, 0, .none, .sse2 },
+
.{ .por, .rm, .{ .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0xeb }, 0, .none, .sse2 },
.{ .pshufd, .rmi, .{ .xmm, .xmm_m128, .imm8 }, .{ 0x66, 0x0f, 0x70 }, 0, .none, .sse2 },
@@ -1618,6 +1616,10 @@
.{ .addsubps, .rm, .{ .xmm, .xmm_m128 }, .{ 0xf2, 0x0f, 0xd0 }, 0, .none, .sse3 },
+ .{ .fisttp, .m, .{ .m16 }, .{ 0xdf }, 1, .none, .@"sse3 x87" },
+ .{ .fisttp, .m, .{ .m32 }, .{ 0xdb }, 1, .none, .@"sse3 x87" },
+ .{ .fisttp, .m, .{ .m64 }, .{ 0xdd }, 1, .none, .@"sse3 x87" },
+
.{ .haddpd, .rm, .{ .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0x7c }, 0, .none, .sse3 },
.{ .haddps, .rm, .{ .xmm, .xmm_m128 }, .{ 0xf2, 0x0f, 0x7c }, 0, .none, .sse3 },
@@ -1708,6 +1710,8 @@
.{ .pmovzxwq, .rm, .{ .xmm, .xmm_m32 }, .{ 0x66, 0x0f, 0x38, 0x34 }, 0, .none, .sse4_1 },
.{ .pmovzxdq, .rm, .{ .xmm, .xmm_m64 }, .{ 0x66, 0x0f, 0x38, 0x35 }, 0, .none, .sse4_1 },
+ .{ .pmuldq, .rm, .{ .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0x38, 0x28 }, 0, .none, .sse4_1 },
+
.{ .pmulld, .rm, .{ .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0x38, 0x40 }, 0, .none, .sse4_1 },
.{ .ptest, .rm, .{ .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0x38, 0x17 }, 0, .none, .sse4_1 },
@@ -2166,12 +2170,16 @@
.{ .vpmovzxwq, .rm, .{ .xmm, .xmm_m32 }, .{ 0x66, 0x0f, 0x38, 0x34 }, 0, .vex_128_wig, .avx },
.{ .vpmovzxdq, .rm, .{ .xmm, .xmm_m64 }, .{ 0x66, 0x0f, 0x38, 0x35 }, 0, .vex_128_wig, .avx },
+ .{ .vpmuldq, .rvm, .{ .xmm, .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0x38, 0x28 }, 0, .vex_128_wig, .avx },
+
.{ .vpmulhw, .rvm, .{ .xmm, .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0xe5 }, 0, .vex_128_wig, .avx },
.{ .vpmulld, .rvm, .{ .xmm, .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0x38, 0x40 }, 0, .vex_128_wig, .avx },
.{ .vpmullw, .rvm, .{ .xmm, .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0xd5 }, 0, .vex_128_wig, .avx },
+ .{ .vpmuludq, .rvm, .{ .xmm, .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0xf4 }, 0, .vex_128_wig, .avx },
+
.{ .vpor, .rvm, .{ .xmm, .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0xeb }, 0, .vex_128_wig, .avx },
.{ .vpshufb, .rvm, .{ .xmm, .xmm, .xmm_m128 }, .{ 0x66, 0x0f, 0x38, 0x00 }, 0, .vex_128_wig, .avx },
@@ -2493,12 +2501,16 @@
.{ .vpmovzxwq, .rm, .{ .ymm, .xmm_m64 }, .{ 0x66, 0x0f, 0x38, 0x34 }, 0, .vex_256_wig, .avx2 },
.{ .vpmovzxdq, .rm, .{ .ymm, .xmm_m128 }, .{ 0x66, 0x0f, 0x38, 0x35 }, 0, .vex_256_wig, .avx2 },
+ .{ .vpmuldq, .rvm, .{ .ymm, .ymm, .ymm_m256 }, .{ 0x66, 0x0f, 0x38, 0x28 }, 0, .vex_256_wig, .avx2 },
+
.{ .vpmulhw, .rvm, .{ .ymm, .ymm, .ymm_m256 }, .{ 0x66, 0x0f, 0xe5 }, 0, .vex_256_wig, .avx2 },
.{ .vpmulld, .rvm, .{ .ymm, .ymm, .ymm_m256 }, .{ 0x66, 0x0f, 0x38, 0x40 }, 0, .vex_256_wig, .avx2 },
.{ .vpmullw, .rvm, .{ .ymm, .ymm, .ymm_m256 }, .{ 0x66, 0x0f, 0xd5 }, 0, .vex_256_wig, .avx2 },
+ .{ .vpmuludq, .rvm, .{ .ymm, .ymm, .ymm_m256 }, .{ 0x66, 0x0f, 0xf4 }, 0, .vex_256_wig, .avx2 },
+
.{ .vpor, .rvm, .{ .ymm, .ymm, .ymm_m256 }, .{ 0x66, 0x0f, 0xeb }, 0, .vex_256_wig, .avx2 },
.{ .vpshufb, .rvm, .{ .ymm, .ymm, .ymm_m256 }, .{ 0x66, 0x0f, 0x38, 0x00 }, 0, .vex_256_wig, .avx2 },
src/arch/x86_64/Lower.zig
@@ -567,7 +567,7 @@ fn emit(lower: *Lower, prefix: Prefix, mnemonic: Mnemonic, ops: []const Operand)
}
fn generic(lower: *Lower, inst: Mir.Inst) Error!void {
- @setEvalBranchQuota(2_500);
+ @setEvalBranchQuota(2_600);
const fixes = switch (inst.ops) {
.none => inst.data.none.fixes,
.inst => inst.data.inst.fixes,
src/arch/x86_64/Mir.zig
@@ -386,7 +386,10 @@ pub const Inst = struct {
/// Packed ___ Quadword
p_q,
/// Packed ___ Double Quadword
+ /// Packed ___ Doubleword to Quadword
p_dq,
+ /// Packed ___ Unsigned Doubleword to Quadword
+ p_udq,
/// ___ Aligned Packed Integer Values
_dqa,
/// ___ Unaligned Packed Integer Values
@@ -446,7 +449,10 @@ pub const Inst = struct {
/// VEX-Encoded Packed ___ Quadword
vp_q,
/// VEX-Encoded Packed ___ Double Quadword
+ /// VEX-Encoded Packed ___ Doubleword to Quadword
vp_dq,
+ /// VEX-Encoded Packed ___ Unsigned Doubleword to Quadword
+ vp_udq,
/// VEX-Encoded ___ Scalar Single-Precision Values
v_ss,
/// VEX-Encoded ___ Packed Single-Precision Values
@@ -663,6 +669,8 @@ pub const Inst = struct {
/// Multiply scalar single-precision floating-point values
/// Multiply packed double-precision floating-point values
/// Multiply scalar double-precision floating-point values
+ /// Multiply packed unsigned doubleword integers
+ /// Multiply packed doubleword integers
mul,
/// Two's complement negation
neg,
test/behavior/x86_64/unary.zig
@@ -4889,6 +4889,14 @@ test reduceAdd {
try test_reduce_add.testIntVectors();
}
+inline fn reduceMul(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {
+ return @reduce(.Mul, rhs);
+}
+test reduceMul {
+ const test_reduce_mul = unary(reduceMul, .{});
+ try test_reduce_mul.testIntVectors();
+}
+
inline fn splat(comptime Type: type, rhs: Type) Type {
return @splat(rhs[0]);
}