Commit 9f9e7e398f
Changed files (3)
src
arch
x86_64
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(27_800);
+ @setEvalBranchQuota(28_600);
const pt = cg.pt;
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
@@ -117436,15 +117436,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
};
try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
},
- .reduce => |air_tag| if (use_old) try cg.airReduce(inst) else fallback: {
+ .reduce => |air_tag| if (use_old) try cg.airReduce(inst) else {
const nan = std.math.nan(f16);
const reduce = air_datas[@intFromEnum(inst)].reduce;
const res_ty = cg.typeOfIndex(inst);
- switch (reduce.operation) {
- .And, .Or, .Xor, .Min => {},
- .Max => if (cg.floatBits(res_ty)) |_| break :fallback try cg.airReduce(inst),
- .Add, .Mul => {},
- }
var ops = try cg.tempsFromOperands(inst, .{reduce.operand});
var res: [1]Temp = undefined;
cg.select(&res, &.{res_ty}, &ops, switch (reduce.operation) {
@@ -132294,7 +132289,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.extra_temps = .{
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
.unused,
.unused,
@@ -132472,7 +132467,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .vector_16_u8, .kind = .{ .pand_mask_mem = .{ .ref = .src0 } } },
.{ .type = .vector_2_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = nan } } },
- .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
.{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
.unused,
.unused,
@@ -132620,7 +132615,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
.{ ._, ._, .@"test", .tmp3h, .si(0b1_000_100), ._, ._ },
.{ ._, ._z, .j, .@"1f", ._, ._, ._ },
- .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
.{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
.{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
.{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
@@ -132660,7 +132655,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
.{ ._, ._, .@"test", .tmp3h, .si(0b1_000_100), ._, ._ },
.{ ._, ._z, .j, .@"1f", ._, ._, ._ },
- .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
.{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
.{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
.{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
@@ -132735,7 +132730,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
.{ ._, ._, .@"test", .tmp3h, .si(0b1_000_100), ._, ._ },
.{ ._, ._z, .j, .@"1f", ._, ._, ._ },
- .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
.{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
.{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
.{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
@@ -132775,7 +132770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
.{ ._, ._, .@"test", .tmp3h, .si(0b1_000_100), ._, ._ },
.{ ._, ._z, .j, .@"1f", ._, ._, ._ },
- .{ ._, .f_, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
.{ .@"1:", .f_p, .st, .tmp2t, ._, ._, ._ },
.{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
.{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
@@ -140689,6 +140684,2319 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .word } }, .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 } } },
+ .{ .type = .vector_8_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"or", .dst0x, .src0x, .lea(.tmp0x), ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .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 } } },
+ .{ .type = .vector_16_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .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), ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0y, .tmp0x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp1y, .dst0y, .tmp0y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0y, .tmp0y, .tmp0y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp1y, .tmp0y },
+ .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .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 } } },
+ .{ .type = .vector_32_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
+ .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
+ .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
+ .{ ._, .v_f128, .extract, .tmp4x, .tmp3y, .ui(1), ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp5y, .tmp3y, .tmp4y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp4y, .tmp4y, .tmp4y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .tmp3y, .tmp3y, .tmp5y, .tmp4y },
+ .{ ._, .v_f128, .extract, .tmp4x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp5y, .dst0y, .tmp4y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp4y, .tmp4y, .tmp4y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp5y, .tmp4y },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .mova, .tmp0y, .memd(.src0y, 32), ._, ._ },
+ .{ ._, .v_ps, .mova, .dst0y, .mem(.src0y), ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp1x, .tmp0y, .ui(1), ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0y, .tmp0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp1y, .tmp1x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp2y, .tmp0y, .tmp1y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .tmp0y, .tmp0y, .tmp2y, .tmp1y },
+ .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp1y, .tmp1x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp2y, .dst0y, .tmp1y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp2y, .tmp1y },
+ .{ ._, .v_ps, .max, .tmp1y, .dst0y, .tmp0y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0y, .tmp0y, .tmp0y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp1y, .tmp0y },
+ .{ ._, .v_f128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0y, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .v_ps, .max, .tmp2y, .dst0y, .tmp1y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp2y, .tmp1y },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp2x, .dst0x, .tmp1x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp2x, .dst0x, .tmp1x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp2x, .dst0x, .tmp1x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .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 } } },
+ .{ .type = .vector_32_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
+ .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-80, .src0, .add_size), ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp4x, .tmp3y, .ui(1), ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp5y, .tmp3y, .tmp4y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp4y, .tmp4y, .tmp4y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .tmp3y, .tmp3y, .tmp5y, .tmp4y },
+ .{ ._, .v_f128, .extract, .tmp4x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp4y, .tmp4x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp5y, .dst0y, .tmp4y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp4y, .tmp4y, .tmp4y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp5y, .tmp4y },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp3y, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .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 } } },
+ .{ .type = .vector_16_f16, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0y, .dst0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp3y, .tmp3x, ._, ._ },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp3y, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b11_10) },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, .vp_, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .insr, .dst0x, .dst0x, .memad(.src0w, .add_unaligned_size, -2), .ui(0) },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memi(.src0w, .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .insr, .dst0x, .memad(.src0w, .add_unaligned_size, -2), .ui(0), ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memi(.src0w, .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fmaxh" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .movzx, .tmp1d, .memad(.src0w, .add_unaligned_size, -2), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .dst0x, .mem(.tmp2d), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .memi(.src0d, .tmp0), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .shuf, .tmp0x, .src0x, .src0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .src0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .src0x, .tmp1x, .tmp0x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp0x, .tmp0x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp1x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp0x, .tmp0x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
+ .{ ._, .v_ss, .max, .tmp1x, .src0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .tmp0x, .src0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .tmp0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .dst0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .tmp0x, .tmp1x, .dst0x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp0x, .tmp0x, .sp(.unord), ._ },
+ .{ ._, ._ps, .blendv, .tmp1x, .src0x, .tmp0x, ._ },
+ .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp0x, .tmp0x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp1x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp0x, .tmp0x, .sp(.ord), ._ },
+ .{ ._, ._ps, .@"and", .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp0x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .@"or", .tmp0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp0x, .tmp0x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
+ .{ ._, .v_ps, .max, .tmp1x, .src0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .src0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp0x, .tmp0x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp1x, .tmp0x, ._ },
+ .{ ._, ._ps, .mova, .tmp0x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp0x, .tmp0x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp1x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp0x, .tmp0x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp0x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp0x, .tmp0x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .dword } }, .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 } } },
+ .{ .type = .vector_8_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .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), ._ },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .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 } } },
+ .{ .type = .vector_16_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
+ .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
+ .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, .v_i128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .mova, .dst0y, .mem(.src0y), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp0y, .memd(.src0y, 32), ._, ._ },
+ .{ ._, .v_ps, .max, .tmp1y, .dst0y, .tmp0y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0y, .tmp0y, .tmp0y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp1y, .tmp0y },
+ .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ps, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .mova, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .tmp1y, .memi(.src0y, .tmp0), ._, ._ },
+ .{ ._, .v_ps, .max, .tmp2y, .dst0y, .tmp1y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp2y, .tmp1y },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp2x, .dst0x, .tmp1x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ .{ ._, .v_ps, .movhl, .tmp1x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ps, .max, .tmp2x, .dst0x, .tmp1x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp2x, .dst0x, .tmp1x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp2x, .tmp1x, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp2x, .tmp1x, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .shuf, .tmp1x, .tmp1x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp1x, .tmp1x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp2x, .tmp1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .shuf, .tmp1x, .tmp1x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp1x, .tmp1x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .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 } } },
+ .{ .type = .vector_16_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
+ .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .v_ps, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, ._, .mov, .tmp0d, .sia(-96, .src0, .add_size), ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .tmp3y, .memi(.src0y, .tmp0), ._, ._ },
+ .{ ._, .v_ps, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .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 } } },
+ .{ .type = .vector_8_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_ps, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .v_ps, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ .@"0:", .v_ps, .mova, .tmp3x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ps, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ps, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .shuf, .tmp3x, .dst0x, .dst0x, .ui(0b01) },
+ .{ ._, .v_ss, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_ss, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_ps, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .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 } } },
+ .{ .type = .vector_4_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_4_f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .mova, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp3x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp3x, .tmp3x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp4x, .tmp3x, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp3x, .tmp3x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp4x, .tmp3x, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .shuf, .tmp3x, .tmp3x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp3x, .tmp3x, .sp(.ord), ._ },
+ .{ ._, ._ps, .blendv, .dst0x, .tmp4x, .tmp3x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .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 } } },
+ .{ .type = .vector_4_f32, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .mova, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp3x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp3x, .tmp3x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp3x, .tmp4x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp3x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp3x, .tmp3x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp3x, .tmp4x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, ._ps, .shuf, .tmp3x, .tmp3x, .ui(0b01), ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._ss, .cmp, .tmp3x, .tmp3x, .sp(.unord), ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .andn, .tmp3x, .tmp4x, ._, ._ },
+ .{ ._, ._ps, .@"or", .dst0x, .tmp3x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
+ .{ ._, .v_sd, .max, .tmp1x, .src0x, .tmp0x, ._ },
+ .{ ._, .v_sd, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .src0x, .tmp1x, .tmp0x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._pd, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._sd, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._sd, .cmp, .tmp0x, .tmp0x, .sp(.ord), ._ },
+ .{ ._, ._pd, .blendv, .dst0x, .tmp1x, .tmp0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._pd, .mova, .tmp1x, .src0x, ._, ._ },
+ .{ ._, ._sd, .max, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._sd, .cmp, .tmp0x, .tmp0x, .sp(.unord), ._ },
+ .{ ._, ._pd, .@"and", .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._pd, .andn, .tmp0x, .tmp1x, ._, ._ },
+ .{ ._, ._pd, .@"or", .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .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), ._ },
+ .{ ._, .v_sd, .max, .tmp1x, .src0x, .tmp0x, ._ },
+ .{ ._, .v_sd, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .tmp0x, .src0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
+ .{ ._, .v_sd, .max, .tmp1x, .tmp0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cmp, .dst0x, .dst0x, .dst0x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .tmp0x, .tmp1x, .dst0x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .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), ._ },
+ .{ ._, .v_pd, .max, .tmp1x, .src0x, .tmp0x, ._ },
+ .{ ._, .v_pd, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .src0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_sd, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .zword, .is = .qword } }, .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 } } },
+ .{ .type = .vector_8_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .mem(.src0y), ._ },
+ .{ ._, .v_pd, .@"and", .tmp3y, .tmp3y, .memd(.src0y, 32), ._ },
+ .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .v_pd, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
+ .{ ._, .v_pd, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, .v_i128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_pd, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_sd, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .zword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_pd, .mova, .dst0y, .mem(.src0y), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp0y, .memd(.src0y, 32), ._, ._ },
+ .{ ._, .v_pd, .max, .tmp1y, .dst0y, .tmp0y, ._ },
+ .{ ._, .v_pd, .cmp, .tmp0y, .tmp0y, .tmp0y, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .tmp1y, .tmp0y },
+ .{ ._, .v_i128, .extract, .tmp0x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_pd, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_pd, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ .{ ._, .v_ps, .movhl, .tmp0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .max, .tmp1x, .dst0x, .tmp0x, ._ },
+ .{ ._, .v_sd, .cmp, .tmp0x, .tmp0x, .tmp0x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp1x, .tmp0x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-64, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_pd, .mova, .dst0y, .memad(.src0y, .add_unaligned_size, -32), ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .tmp1y, .memi(.src0y, .tmp0), ._, ._ },
+ .{ ._, .v_pd, .max, .tmp2y, .dst0y, .tmp1y, ._ },
+ .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .tmp2y, .tmp1y },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp1x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_pd, .max, .tmp2x, .dst0x, .tmp1x, ._ },
+ .{ ._, .v_pd, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ .{ ._, .v_pd, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ .{ ._, .v_ps, .movhl, .tmp1x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .max, .tmp2x, .dst0x, .tmp1x, ._ },
+ .{ ._, .v_sd, .cmp, .tmp1x, .tmp1x, .tmp1x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp2x, .tmp1x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._pd, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", ._pd, .mova, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._pd, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._pd, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .sp(.ord), ._ },
+ .{ ._, ._pd, .blendv, .dst0x, .tmp2x, .tmp1x, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, ._pd, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._sd, .cmp, .tmp1x, .tmp1x, .sp(.ord), ._ },
+ .{ ._, ._pd, .blendv, .dst0x, .tmp2x, .tmp1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .unaligned_multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._pd, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", ._pd, .mova, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._pd, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._pd, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .sp(.unord), ._ },
+ .{ ._, ._pd, .@"and", .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, ._pd, .@"or", .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._pd, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp1x, .dst0x, ._, ._ },
+ .{ ._, ._pd, .mova, .tmp2x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .max, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._sd, .cmp, .tmp1x, .tmp1x, .sp(.unord), ._ },
+ .{ ._, ._pd, .@"and", .dst0x, .tmp1x, ._, ._ },
+ .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, ._pd, .@"or", .dst0x, .tmp1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx512f, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }, .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 } } },
+ .{ .type = .vector_8_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp3y, .lead(.tmp0y, 32), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_pd, .@"and", .tmp3y, .tmp3y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -64), ._ },
+ .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .v_pd, .@"or", .tmp3y, .tmp3y, .lead(.tmp0y, 32), ._ },
+ .{ ._, .v_pd, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, ._, .mov, .tmp0d, .sia(-96, .src0, .add_size), ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .tmp3y, .memi(.src0y, .tmp0), ._, ._ },
+ .{ ._, .v_pd, .max, .tmp4y, .dst0y, .tmp3y, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .tmp3y, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0y, .dst0y, .tmp4y, .tmp3y },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_pd, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_sd, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .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 } } },
+ .{ .type = .vector_4_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_pd, .mova, .dst0y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .v_pd, .@"and", .dst0y, .dst0y, .memad(.src0y, .add_size, -32), ._ },
+ .{ ._, .v_pd, .@"or", .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-48, .src0, .add_size), ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp3x, .dst0y, .ui(1), ._ },
+ .{ ._, .v_pd, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ .@"0:", .v_pd, .mova, .tmp3x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, .v_pd, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .movhl, .tmp3x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .max, .tmp4x, .dst0x, .tmp3x, ._ },
+ .{ ._, .v_sd, .cmp, .tmp3x, .tmp3x, .tmp3x, .vp(.ord) },
+ .{ ._, .v_pd, .blendv, .dst0x, .dst0x, .tmp4x, .tmp3x },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .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 } } },
+ .{ .type = .vector_2_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_2_f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._pd, .mova, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._pd, .@"and", .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, ._pd, .@"or", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
+ .{ .@"0:", ._pd, .mova, .tmp3x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._pd, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._pd, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._pd, .cmp, .tmp3x, .tmp3x, .sp(.ord), ._ },
+ .{ ._, ._pd, .blendv, .dst0x, .tmp4x, .tmp3x, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, ._pd, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._sd, .cmp, .tmp3x, .tmp3x, .sp(.ord), ._ },
+ .{ ._, ._pd, .blendv, .dst0x, .tmp4x, .tmp3x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .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 } } },
+ .{ .type = .vector_2_f64, .kind = .{ .splat_float_mem = .{ .ref = .src0, .outside = -nan } } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._pd, .mova, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._pd, .@"and", .dst0x, .memad(.src0x, .add_size, -16), ._, ._ },
+ .{ ._, ._pd, .@"or", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
+ .{ .@"0:", ._pd, .mova, .tmp3x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._pd, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._pd, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._pd, .cmp, .tmp3x, .tmp3x, .sp(.unord), ._ },
+ .{ ._, ._pd, .@"and", .dst0x, .tmp3x, ._, ._ },
+ .{ ._, ._pd, .andn, .tmp3x, .tmp4x, ._, ._ },
+ .{ ._, ._pd, .@"or", .dst0x, .tmp3x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, ._ps, .movhl, .tmp3x, .dst0x, ._, ._ },
+ .{ ._, ._pd, .mova, .tmp4x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .max, .tmp4x, .tmp3x, ._, ._ },
+ .{ ._, ._sd, .cmp, .tmp3x, .tmp3x, .sp(.unord), ._ },
+ .{ ._, ._pd, .@"and", .dst0x, .tmp3x, ._, ._ },
+ .{ ._, ._pd, .andn, .tmp3x, .tmp4x, ._, ._ },
+ .{ ._, ._pd, .@"or", .dst0x, .tmp3x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
+ .{ ._, .f_, .ucomi, .tmp2t, .tmp2t, ._, ._ },
+ .{ ._, .f_u, .cmov, .tmp2t, .tmp1t, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .ucomi, .tmp2t, .tmp1t, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_nb, .cmov, .tmp2t, .tmp1t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sahf, .x87, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
+ .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .xam, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3h, .si(0b1_000_100), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .f_, .ld, .memad(.src0q, .add_unaligned_size, -8), ._, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memi(.src0q, .tmp0), ._, ._, ._ },
+ .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3h, .si(0b0_000_001), ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .xam, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3h, .si(0b1_000_100), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
+ .{ ._, .f_, .ucomi, .tmp2t, .tmp2t, ._, ._ },
+ .{ ._, .f_u, .cmov, .tmp2t, .tmp1t, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .ucomi, .tmp2t, .tmp1t, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_nb, .cmov, .tmp2t, .tmp1t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sahf, .x87, null, null },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
+ .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .xam, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3h, .si(0b1_000_100), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .f_, .ld, .memad(.src0t, .add_unaligned_size, -16), ._, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memi(.src0t, .tmp0), ._, ._, ._ },
+ .{ ._, .f_, .ucom, .tmp1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3h, .si(0b0_000_001), ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ ._, .f_, .xam, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3h, .si(0b1_000_100), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, .f_, .xch, .tmp1t, ._, ._, ._ },
+ .{ .@"1:", .f_p, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "fmaxq" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .dst0x, .memad(.src0x, .add_unaligned_size, -16), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
} },
.Add => comptime &.{ .{
.required_features = .{ .avx, null, null, null },
test/behavior/x86_64/unary.zig
@@ -5109,6 +5109,7 @@ inline fn reduceMax(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child
test reduceMax {
const test_reduce_max = unary(reduceMax, .{});
try test_reduce_max.testIntVectors();
+ try test_reduce_max.testFloatVectors();
}
inline fn reduceAdd(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {
test/behavior/vector.zig
@@ -756,15 +756,15 @@ test "vector shift operators" {
test "vector reduce operation" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
- if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_c and builtin.cpu.arch.isArm()) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
- if (builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/21091
- if (builtin.cpu.arch.isSPARC()) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/23719
+ if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch.isMIPS64()) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/21091
+ if (builtin.zig_backend == .stage2_llvm and builtin.cpu.arch.isSPARC()) return error.SkipZigTest; // https://github.com/ziglang/zig/issues/23719
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
const S = struct {
fn testReduce(comptime op: std.builtin.ReduceOp, x: anytype, expected: anytype) !void {