Commit a3b0c242b0
Changed files (15)
lib
std
zig
src
lib/std/zig/Zir.zig
@@ -2142,7 +2142,7 @@ pub const Inst = struct {
ref_start_index = static_len,
_,
- pub const static_len = 100;
+ pub const static_len = 101;
pub fn toRef(i: Index) Inst.Ref {
return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
@@ -2248,6 +2248,7 @@ pub const Inst = struct {
vector_4_i64_type,
vector_2_u64_type,
vector_4_u64_type,
+ vector_2_u128_type,
vector_4_f16_type,
vector_8_f16_type,
vector_2_f32_type,
src/arch/x86_64/CodeGen.zig
@@ -2408,7 +2408,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}
fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
- @setEvalBranchQuota(20_000);
+ @setEvalBranchQuota(20_200);
const pt = cg.pt;
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
@@ -2444,9 +2444,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
try cg.inst_tracking.ensureUnusedCapacity(cg.gpa, 1);
switch (air_tags[@intFromEnum(inst)]) {
// zig fmt: off
- .bitcast => try cg.airBitCast(inst),
-
- .splat => try cg.airSplat(inst),
.select => try cg.airSelect(inst),
.shuffle => try cg.airShuffle(inst),
.reduce => try cg.airReduce(inst),
@@ -14818,6 +14815,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
.src_constraints = .{ .{ .exact_int = 1 }, .{ .exact_int = 1 }, .any },
.patterns = &.{
+ .{ .src = .{ .mut_mem, .{ .imm = 0 }, .none } },
.{ .src = .{ .to_mut_gpr, .{ .imm = 0 }, .none } },
},
.dst_temps = .{ .{ .ref = .src0 }, .unused },
@@ -58735,6 +58733,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}, .{
.src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
.patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
.{ .src = .{ .to_mut_gpr, .none, .none } },
},
.dst_temps = .{ .{ .ref = .src0 }, .unused },
@@ -63194,7 +63193,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .vec = .xword }, .any, .any },
+ .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mut_xmm, .none, .none } },
},
@@ -63348,14 +63347,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} }) catch |err| switch (err) {
error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
@tagName(air_tag),
- cg.typeOf(ty_op.operand).fmt(pt),
+ ty_op.ty.toType().fmt(pt),
ops[0].tracking(cg),
}),
else => |e| return e,
};
try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
},
-
+ .bitcast => try cg.airBitCast(inst),
.block => {
const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
const extra = cg.air.extraData(Air.Block, ty_pl.payload);
@@ -71582,7077 +71581,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
};
try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
},
-
- .cmp_vector, .cmp_vector_optimized => |air_tag| if (use_old) try cg.airCmpVector(inst) else fallback: {
- const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
- const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;
- switch (extra.compareOperator()) {
- .eq, .neq => {},
- .lt, .lte, .gte, .gt => if (cg.floatBits(cg.typeOf(extra.lhs).childType(zcu)) == null)
- break :fallback try cg.airCmpVector(inst),
- }
- var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs });
- var res: [1]Temp = undefined;
- (err: switch (extra.compareOperator()) {
- .lt, .lte, .gte, .gt => |cmp_op| {
- switch (cmp_op) {
- else => unreachable,
- .lt, .lte => {},
- .gt, .gte => std.mem.swap(Temp, &ops[0], &ops[1]),
- }
- break :err cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) {
- else => unreachable,
- .lt, .gt => .l,
- .lte, .gte => .le,
- })) {
- else => unreachable,
- inline .l, .le => |cc| comptime &.{ .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .word, .is = .word } },
- .{ .scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .extra_temps = .{
- .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
- .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0d, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .qword, .is = .word } },
- .{ .scalar_float = .{ .of = .qword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .mem, .none } },
- .{ .src = .{ .sse, .mem, .none } },
- .{ .src = .{ .mem, .sse, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .extra_temps = .{
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
- .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .word } },
- .{ .scalar_float = .{ .of = .xword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .mem, .none } },
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .extra_temps = .{
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
- .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1d, .vp(switch (cc) {
- else => unreachable,
- .l => .gt,
- .le => .ge,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1d, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{
- .ref = .src0,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._ss, .cmp, .dst0x, .src1d, .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
- else => unreachable,
- .l => .gt,
- .le => .ge,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{
- .ref = .src0,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._ps, .cmp, .dst0x, .src1x, .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
- else => unreachable,
- .l => .gt,
- .le => .ge,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1q, .vp(switch (cc) {
- else => unreachable,
- .l => .gt,
- .le => .ge,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1q, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{
- .ref = .src0,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._sd, .cmp, .dst0x, .src1q, .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
- else => unreachable,
- .l => .gt,
- .le => .ge,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{
- .ref = .src0,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._pd, .cmp, .dst0x, .src1x, .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .yword, .is = .qword } },
- .{ .scalar_float = .{ .of = .yword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
- else => unreachable,
- .l => .gt,
- .le => .ge,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .yword, .is = .qword } },
- .{ .scalar_float = .{ .of = .yword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- } },
- }, .{
- .required_features = .{ .f16c, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
- .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
- .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .{ .type = .f32, .kind = .mem },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
- .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .{ .type = .f32, .kind = .mem },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
- .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
- .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
- .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
- .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
- .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .{ .type = .f32, .kind = .mem },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
- .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .{ .type = .f32, .kind = .mem },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
- .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
- .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
- .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
- .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
- .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
- .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
- .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
- .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
- .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }) },
- .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
- .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
- else => unreachable,
- .l => .lt,
- .le => .le,
- }), ._ },
- .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
- .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp4t, .tmp5t, ._, ._ },
- .{ ._, .f_p, .st, .tmp5t, ._, ._, ._ },
- .{ ._, .fromCond(switch (cc) {
- else => unreachable,
- .l => .a,
- .le => .ae,
- }), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp4t, .tmp5t, ._, ._ },
- .{ ._, .f_p, .st, .tmp5t, ._, ._, ._ },
- .{ ._, .fromCond(switch (cc) {
- else => unreachable,
- .l => .a,
- .le => .ae,
- }), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
- switch (cc) {
- else => unreachable,
- .l => .{ ._, ._, .@"test", .tmp6h, .si(0b1_000_001), ._, ._ },
- .le => .{ ._, ._r, .sh, .tmp6h, .ui(1), ._, ._ },
- },
- .{ ._, .fromCond(switch (cc) {
- else => unreachable,
- .l => .z,
- .le => .nc,
- }), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp4t, .tmp5t, ._, ._ },
- .{ ._, .f_p, .st, .tmp5t, ._, ._, ._ },
- .{ ._, .fromCond(switch (cc) {
- else => unreachable,
- .l => .a,
- .le => .ae,
- }), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp4t, .tmp5t, ._, ._ },
- .{ ._, .f_p, .st, .tmp5t, ._, ._, ._ },
- .{ ._, .fromCond(switch (cc) {
- else => unreachable,
- .l => .a,
- .le => .ae,
- }), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
- switch (cc) {
- else => unreachable,
- .l => .{ ._, ._, .@"test", .tmp6h, .si(0b1_000_001), ._, ._ },
- .le => .{ ._, ._r, .sh, .tmp6h, .ui(1), ._, ._ },
- },
- .{ ._, .fromCond(switch (cc) {
- else => unreachable,
- .l => .z,
- .le => .nc,
- }), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- } },
- });
- },
- .eq, .neq => |cmp_op| cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) {
- else => unreachable,
- .eq => .e,
- .neq => .ne,
- })) {
- else => unreachable,
- inline .e, .ne => |cc| comptime &.{ .{
- .src_constraints = .{ .{ .bool_vec = .byte }, .{ .bool_vec = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .mut_mem, .imm8, .none } },
- .{ .src = .{ .imm8, .mut_mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .imm8, .none } },
- .{ .src = .{ .imm8, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .mut_mem, .to_gpr, .none } },
- .{ .src = .{ .to_gpr, .mut_mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ },
- .{ ._, ._, .not, .dst0b, ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ },
- },
- } },
- }, .{
- .src_constraints = .{ .{ .bool_vec = .word }, .{ .bool_vec = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .mut_mem, .imm16, .none } },
- .{ .src = .{ .imm16, .mut_mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .imm16, .none } },
- .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .mut_mem, .to_gpr, .none } },
- .{ .src = .{ .to_gpr, .mut_mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ },
- .{ ._, ._, .not, .dst0w, ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ },
- },
- } },
- }, .{
- .src_constraints = .{ .{ .bool_vec = .dword }, .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .mut_mem, .imm32, .none } },
- .{ .src = .{ .imm32, .mut_mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .imm32, .none } },
- .{ .src = .{ .imm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .mut_mem, .to_gpr, .none } },
- .{ .src = .{ .to_gpr, .mut_mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ },
- .{ ._, ._, .not, .dst0d, ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .bool_vec = .qword }, .{ .bool_vec = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mut_mem, .simm32, .none } },
- .{ .src = .{ .simm32, .mut_mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .simm32, .none } },
- .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .mut_mem, .to_gpr, .none } },
- .{ .src = .{ .to_gpr, .mut_mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ },
- .{ ._, ._, .not, .dst0q, ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ },
- },
- } },
- }, .{
- .src_constraints = .{ .any_bool_vec, .any_bool_vec, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .not, .tmp1p, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .xword, .is = .byte } },
- .{ .scalar_int = .{ .of = .xword, .is = .byte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .byte,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_b, .cmpeq, .dst0x, .src0x, .src1x, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .xword, .is = .word } },
- .{ .scalar_int = .{ .of = .xword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .word,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_w, .cmpeq, .dst0x, .src0x, .src1x, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .xword, .is = .dword } },
- .{ .scalar_int = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .dword,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .cmpeq, .dst0x, .src0x, .src1x, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .xword, .is = .qword } },
- .{ .scalar_int = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .qword,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_q, .cmpeq, .dst0x, .src0x, .src1x, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .xword, .is = .byte } },
- .{ .scalar_int = .{ .of = .xword, .is = .byte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .byte,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_b, .cmpeq, .dst0x, .src1x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .xword, .is = .word } },
- .{ .scalar_int = .{ .of = .xword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .word,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_w, .cmpeq, .dst0x, .src1x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .xword, .is = .dword } },
- .{ .scalar_int = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .dword,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_d, .cmpeq, .dst0x, .src1x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .xword, .is = .qword } },
- .{ .scalar_int = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .qword,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_q, .cmpeq, .dst0x, .src1x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .mmx, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .qword, .is = .byte } },
- .{ .scalar_int = .{ .of = .qword, .is = .byte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_mmx, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .byte,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_b, .cmpeq, .dst0q, .src1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .mmx, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .qword, .is = .word } },
- .{ .scalar_int = .{ .of = .qword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_mmx, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .word,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_w, .cmpeq, .dst0q, .src1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .mmx, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .qword, .is = .dword } },
- .{ .scalar_int = .{ .of = .qword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_mmx, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .dword,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_d, .cmpeq, .dst0q, .src1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .yword, .is = .byte } },
- .{ .scalar_int = .{ .of = .yword, .is = .byte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .byte,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_b, .cmpeq, .dst0y, .src0y, .src1y, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .yword, .is = .word } },
- .{ .scalar_int = .{ .of = .yword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .word,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_w, .cmpeq, .dst0y, .src0y, .src1y, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .yword, .is = .dword } },
- .{ .scalar_int = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .dword,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .cmpeq, .dst0y, .src0y, .src1y, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{
- .{ .scalar_int = .{ .of = .yword, .is = .qword } },
- .{ .scalar_int = .{ .of = .yword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
- .kind = .all,
- .inverted = switch (cc) {
- else => unreachable,
- .e => false,
- .ne => true,
- },
- .scalar = .qword,
- } } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_q, .cmpeq, .dst0y, .src0y, .src1y, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
- .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
- .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
- .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
- .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
- .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
- .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
- .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
- .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
- .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
- .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
- .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
- .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .sse, .mmx, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .mmx } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
- .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .sse, .mmx, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .mmx } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .mmx } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
- .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
- .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
- .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
- .{ ._, ._, .xor, .tmp4b, .si(0b1111), ._, ._ },
- .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .sse, .mmx, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .mmx } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .mmx } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
- .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
- .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
- .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
- .{ ._, ._, .xor, .tmp4b, .si(0b11), ._, ._ },
- .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
- .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
- .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
- .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
- .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .any_scalar_int, .any_scalar_int, .any },
- .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
- .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
- .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
- .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
- .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .any_scalar_int, .any_scalar_int, .any },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
- .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
- .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
- .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
- .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
- .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
- .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
- .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
- .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_int, .any_scalar_int, .any },
- .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
- .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
- .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
- .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
- .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
- .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0p, .@"8", .tmp1), .tmp2p, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp4w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp4w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
- .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0p, .@"8", .tmp1), .tmp2p, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp4d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
- .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0p, .@"8", .tmp1), .tmp2p, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp4q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .cmp, .tmp4q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
- .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0p, .@"8", .tmp1), .tmp2p, ._, ._ },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .word, .is = .word } },
- .{ .scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .extra_temps = .{
- .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
- .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0d, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .qword, .is = .word } },
- .{ .scalar_float = .{ .of = .qword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .mem, .none } },
- .{ .src = .{ .sse, .mem, .none } },
- .{ .src = .{ .mem, .sse, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .extra_temps = .{
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
- .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .word } },
- .{ .scalar_float = .{ .of = .xword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .mem, .mem, .none } },
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .extra_temps = .{
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
- .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1d, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .{ .scalar_float = .{ .of = .dword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{
- .ref = .src0,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._ss, .cmp, .dst0x, .src1d, .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .{ .scalar_float = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{
- .ref = .src0,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._ps, .cmp, .dst0x, .src1x, .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .dword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1q, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{
- .ref = .src0,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._sd, .cmp, .dst0x, .src1q, .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .{ .scalar_float = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_mut_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .ref_mask = .{
- .ref = .src0,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._pd, .cmp, .dst0x, .src1x, .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .scalar_float = .{ .of = .yword, .is = .qword } },
- .{ .scalar_float = .{ .of = .yword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .mut_rc_mask = .{
- .ref = .src0,
- .rc = .sse,
- .info = .{ .kind = .all, .scalar = .qword },
- } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- } },
- }, .{
- .required_features = .{ .f16c, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
- .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
- .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .{ .type = .f32, .kind = .mem },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
- .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .{ .type = .f32, .kind = .mem },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
- .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
- .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
- .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
- .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
- .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .{ .type = .f32, .kind = .mem },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
- .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .{ .type = .f32, .kind = .mem },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
- .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
- .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
- .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
- .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
- .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
- .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
- .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
- .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
- .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
- .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
- .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
- .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }) },
- .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
- .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
- else => unreachable,
- .e => .eq,
- .ne => .neq,
- }), ._ },
- .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
- .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
- .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, switch (cc) {
- else => unreachable,
- .e => ._np,
- .ne => ._p,
- }, .set, .tmp4b, ._, ._, ._ },
- .{ ._, ._, switch (cc) {
- else => unreachable,
- .e => .@"and",
- .ne => .@"or",
- }, .tmp3b, .tmp4b, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
- .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, switch (cc) {
- else => unreachable,
- .e => ._np,
- .ne => ._p,
- }, .set, .tmp4b, ._, ._, ._ },
- .{ ._, ._, switch (cc) {
- else => unreachable,
- .e => .@"and",
- .ne => .@"or",
- }, .tmp3b, .tmp4b, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6h, .si(0b1_000_000), ._, ._ },
- .{ ._, ._, .@"test", .tmp6h, .si(0b1_000_100), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
- .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, switch (cc) {
- else => unreachable,
- .e => ._np,
- .ne => ._p,
- }, .set, .tmp4b, ._, ._, ._ },
- .{ ._, ._, switch (cc) {
- else => unreachable,
- .e => .@"and",
- .ne => .@"or",
- }, .tmp3b, .tmp4b, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
- .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, switch (cc) {
- else => unreachable,
- .e => ._np,
- .ne => ._p,
- }, .set, .tmp4b, ._, ._, ._ },
- .{ ._, ._, switch (cc) {
- else => unreachable,
- .e => .@"and",
- .ne => .@"or",
- }, .tmp3b, .tmp4b, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .rcx } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp6h, .si(0b1_000_000), ._, ._ },
- .{ ._, ._, .@"test", .tmp6h, .si(0b1_000_100), ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u32, .kind = .{ .reg = .edx } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
- .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
- .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
- .any,
- },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .u8, .kind = .{ .reg = .cl } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
- .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
- .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
- .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
- .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
- .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
- .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
- } },
- } },
- }),
- }) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {s} {} {} {}", .{
- @tagName(air_tag),
- @tagName(extra.compareOperator()),
- cg.typeOf(extra.lhs).fmt(pt),
- ops[0].tracking(cg),
- ops[1].tracking(cg),
- }),
- else => |e| return e,
- };
- try res[0].finish(inst, &.{ extra.lhs, extra.rhs }, &ops, cg);
- },
-
- .sqrt => |air_tag| if (use_old) try cg.airSqrt(inst) else {
- const un_op = air_datas[@intFromEnum(inst)].un_op;
- var ops = try cg.tempsFromOperands(inst, .{un_op});
+ .sqrt => |air_tag| if (use_old) try cg.airSqrt(inst) else {
+ const un_op = air_datas[@intFromEnum(inst)].un_op;
+ var ops = try cg.tempsFromOperands(inst, .{un_op});
var res: [1]Temp = undefined;
cg.select(&res, &.{cg.typeOf(un_op)}, &ops, comptime &.{ .{
.required_features = .{ .f16c, null, null, null },
@@ -82366,15 +75297,465 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._pd, .round, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), .rm(.{
+ .direction = direction,
+ .precision = .inexact,
+ }), ._ },
+ .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "floor",
+ .up => "ceil",
+ .zero => "trunc",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "floor",
+ .up => "ceil",
+ .zero => "trunc",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "floor",
+ .up => "ceil",
+ .zero => "trunc",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .x87, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "__floorx",
+ .up => "__ceilx",
+ .zero => "__truncx",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, .v_dqa, .mov, .tmp0x, .mem(.src0x), ._, ._ },
+ .{ ._, .v_dqa, .mov, .mem(.tmp1x), .tmp0x, ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .x87, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "__floorx",
+ .up => "__ceilx",
+ .zero => "__truncx",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._dqa, .mov, .tmp0x, .mem(.src0x), ._, ._ },
+ .{ ._, ._dqa, .mov, .mem(.tmp1x), .tmp0x, ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .x87, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "__floorx",
+ .up => "__ceilx",
+ .zero => "__truncx",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .mova, .tmp0x, .mem(.src0x), ._, ._ },
+ .{ ._, ._ps, .mova, .mem(.tmp1x), .tmp0x, ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "__floorx",
+ .up => "__ceilx",
+ .zero => "__truncx",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "__floorx",
+ .up => "__ceilx",
+ .zero => "__truncx",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "__floorx",
+ .up => "__ceilx",
+ .zero => "__truncx",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .mem(.tmp2x), .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "floorq",
+ .up => "ceilq",
+ .zero => "truncq",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "floorq",
+ .up => "ceilq",
+ .zero => "truncq",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "floorq",
+ .up => "ceilq",
+ .zero => "truncq",
+ } } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ else => unreachable,
+ .down => "floorq",
+ .up => "ceilq",
+ .zero => "truncq",
+ } } } },
.unused,
.unused,
.unused,
@@ -82385,1052 +75766,7256 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._pd, .round, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), .rm(.{
- .direction = direction,
- .precision = .inexact,
- }), ._ },
- .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ } },
+ }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
+ @tagName(air_tag),
+ cg.typeOf(un_op).fmt(pt),
+ ops[0].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ try res[0].finish(inst, &.{un_op}, &ops, cg);
+ },
+ .neg, .neg_optimized => |air_tag| if (use_old) try cg.airFloatSign(inst, .neg) else {
+ const un_op = air_datas[@intFromEnum(inst)].un_op;
+ var ops = try cg.tempsFromOperands(inst, .{un_op});
+ var res: [1]Temp = undefined;
+ cg.select(&res, &.{cg.typeOf(un_op)}, &ops, comptime &.{ .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._pd, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .x87 } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_, .chs, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_any_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_any_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .scalar_any_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_any_float = .yword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_any_float = .yword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_ps, .xor, .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_pd, .xor, .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._pd, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._pd, .xor, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
+ .{ .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_pd, .xor, .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
+ .{ .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._ps, .xor, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ } }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
+ @tagName(air_tag),
+ cg.typeOf(un_op).fmt(pt),
+ ops[0].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ try res[0].finish(inst, &.{un_op}, &ops, cg);
+ },
+ .cmp_lt,
+ .cmp_lt_optimized,
+ .cmp_lte,
+ .cmp_lte_optimized,
+ .cmp_gte,
+ .cmp_gte_optimized,
+ .cmp_gt,
+ .cmp_gt_optimized,
+ => |air_tag| if (use_old) try cg.airCmp(inst, air_tag.toCmpOp().?) else {
+ const bin_op = air_datas[@intFromEnum(inst)].bin_op;
+ const cmp_op = air_tag.toCmpOp().?;
+ var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
+ var res: [1]Temp = undefined;
+ (if (cg.floatBits(cg.typeOf(bin_op.lhs))) |_| err: {
+ switch (cmp_op) {
+ else => unreachable,
+ .lt, .lte => {},
+ .gt, .gte => std.mem.swap(Temp, &ops[0], &ops[1]),
+ }
+ break :err cg.select(&res, &.{.bool}, &ops, switch (switch (cmp_op) {
+ else => unreachable,
+ .lt, .gt => true,
+ .lte, .gte => false,
+ }) {
+ inline false, true => |strict| comptime &.{ .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .float = .word }, .{ .float = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp1x, .src1q, ._, ._ },
+ .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .word }, .{ .float = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 }, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .l,
+ false => .le,
+ } }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .v_ss, .ucomi, .src0x, .src1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._ss, .ucomi, .src0x, .src1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .v_sd, .ucomi, .src0x, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._sd, .ucomi, .src0x, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sahf, .x87, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .z,
+ false => .nc,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ switch (strict) {
+ true => .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_001), ._, ._ },
+ false => .{ ._, ._r, .sh, .tmp2h, .ui(1), ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_x87, .to_x87, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp0t, .src1t, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sahf, .x87, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sahf, .x87, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_x87, .to_x87, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .a,
+ false => .ae,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .z,
+ false => .nc,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ switch (strict) {
+ true => .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_001), ._, ._ },
+ false => .{ ._, ._r, .sh, .tmp2h, .ui(1), ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_x87, .to_x87, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .z,
+ false => .nc,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ switch (strict) {
+ true => .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_001), ._, ._ },
+ false => .{ ._, ._r, .sh, .tmp2h, .ui(1), ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .{ .float = .xword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 }, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (strict) {
+ true => .l,
+ false => .le,
+ } }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
+ } },
+ } },
+ });
+ } else err: {
+ res[0] = ops[0].cmpInts(cmp_op, &ops[1], cg) catch |err| break :err err;
+ }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ @tagName(air_tag),
+ cg.typeOf(bin_op.lhs).fmt(pt),
+ ops[0].tracking(cg),
+ ops[1].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ },
+ .cmp_eq,
+ .cmp_eq_optimized,
+ .cmp_neq,
+ .cmp_neq_optimized,
+ => |air_tag| if (use_old) try cg.airCmp(inst, air_tag.toCmpOp().?) else {
+ const bin_op = air_datas[@intFromEnum(inst)].bin_op;
+ const cmp_op = air_tag.toCmpOp().?;
+ var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
+ const ty = cg.typeOf(bin_op.lhs);
+ var res: [1]Temp = undefined;
+ const OptInfo = struct {
+ deaths: [2]Air.Inst.Index,
+ res: [1]Temp,
+ state: State,
+ reloc: Mir.Inst.Index,
+ };
+ var opt_info: ?OptInfo = null;
+ (err: switch (@as(enum { float, int }, if (cg.floatBits(ty)) |_|
+ .float
+ else if (cg.intInfo(ty)) |_|
+ .int
+ else category: {
+ const child_ty = ty.optionalChild(zcu);
+ const has_value_off: u31 = @intCast(child_ty.abiSize(zcu));
+ var has_values: [2]Temp = undefined;
+ opt_info = @as(OptInfo, undefined);
+ for (&has_values, &ops, &opt_info.?.deaths) |*has_value, *op, *death| {
+ has_value.* = try op.read(.bool, .{ .disp = has_value_off }, cg);
+ const child = try op.read(child_ty, .{}, cg);
+ try op.die(cg);
+ op.* = child;
+ death.* = child.index;
+ }
+ cg.select(
+ &opt_info.?.res,
+ &.{.bool},
+ &has_values,
+ switch (Condition.fromCompareOperatorUnsigned(cmp_op)) {
+ else => unreachable,
+ inline .e, .ne => |cc| comptime &.{.{
+ .src_constraints = .{ .{ .size = .byte }, .{ .size = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .imm8, .none } },
+ .{ .src = .{ .imm8, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_gpr, .imm8, .none } },
+ .{ .src = .{ .imm8, .to_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .mem, .to_gpr, .none } },
+ .{ .src = .{ .to_gpr, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .dst0b, ._, ._, ._ },
+ .{ ._, ._, .@"test", .src0b, .src1b, ._, ._ },
+ } },
+ }},
},
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ ) catch |err| switch (err) {
+ error.SelectFailed => unreachable,
+ else => |e| return e,
+ };
+ for (has_values) |has_value| for (opt_info.?.res) |opt_res| {
+ if (has_value.index == opt_res.index) break;
+ } else try has_value.die(cg);
+ opt_info.?.state = cg.initRetroactiveState();
+ opt_info.?.state.next_temp_index = cg.next_temp_index;
+ var state = try cg.saveState();
+ state.next_temp_index = cg.next_temp_index;
+ for (ops) |op| try op.die(cg);
+ try cg.saveRetroactiveState(&opt_info.?.state);
+ opt_info.?.reloc = try cg.asmJccReloc(.z, undefined);
+ try cg.restoreState(state, &.{}, .{
+ .emit_instructions = false,
+ .update_tracking = true,
+ .resurrect = true,
+ .close_scope = true,
+ });
+ break :category if (cg.floatBits(child_ty)) |_| .float else .int;
+ })) {
+ .float => {
+ cg.select(&res, &.{.bool}, &ops, switch (switch (air_tag) {
+ else => unreachable,
+ .cmp_eq, .cmp_neq => false,
+ .cmp_eq_optimized, .cmp_neq_optimized => true,
+ }) {
+ inline false, true => |optimized| comptime &.{ .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .float = .word }, .{ .float = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp1x, .src1q, ._, ._ },
+ .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .word }, .{ .float = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 }, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = .z }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .v_ss, .ucomi, .src0x, .src1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._ss, .ucomi, .src0x, .src1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .v_sd, .ucomi, .src0x, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._sd, .ucomi, .src0x, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sahf, .x87, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z,
+ true => .nz,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (optimized) {
+ false => &.{
+ .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp2h, .si(0b1_000_000), ._, ._ },
+ .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_100), ._, ._ },
+ },
+ true => &.{
+ .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_000), ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .mem, .to_x87, .none } },
+ .{ .src = .{ .to_x87, .to_x87, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp0t, .src1t, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sahf, .x87, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sahf, .x87, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .mem, .to_x87, .none } },
+ .{ .src = .{ .to_x87, .to_x87, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z_and_np,
+ true => .z,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z,
+ true => .nz,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (optimized) {
+ false => &.{
+ .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp2h, .si(0b1_000_000), ._, ._ },
+ .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_100), ._, ._ },
+ },
+ true => &.{
+ .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_000), ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .mem, .to_x87, .none } },
+ .{ .src = .{ .to_x87, .to_x87, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = switch (optimized) {
+ false => .z,
+ true => .nz,
+ } }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (optimized) {
+ false => &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp2h, .si(0b1_000_000), ._, ._ },
+ .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_100), ._, ._ },
+ },
+ true => &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_000), ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .{ .float = .xword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 }, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .cc = .z }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
+ } },
+ } },
+ }) catch |err| break :err err;
+ switch (cmp_op) {
+ else => unreachable,
+ .eq => {},
+ .neq => {
+ const cc = &res[0].unwrap(cg).temp.tracking(cg).short.eflags;
+ cc.* = cc.negate();
+ },
+ }
+ },
+ .int => res[0] = ops[0].cmpInts(cmp_op, &ops[1], cg) catch |err| break :err err,
+ }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ @tagName(air_tag),
+ cg.typeOf(bin_op.lhs).fmt(pt),
+ ops[0].tracking(cg),
+ ops[1].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ if (opt_info) |*oi| {
+ for (ops) |op| for (res) |r| {
+ if (op.index == r.index) break;
+ } else try op.die(cg);
+ try cg.genCopy(.bool, oi.res[0].tracking(cg).short, res[0].tracking(cg).short, .{});
+ try res[0].die(cg);
+ res[0] = oi.res[0];
+ try cg.restoreState(oi.state, &oi.deaths, .{
+ .emit_instructions = true,
+ .update_tracking = true,
+ .resurrect = true,
+ .close_scope = true,
+ });
+ cg.performReloc(oi.reloc);
+ @memset(&ops, res[0]);
+ }
+ try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ },
+ .cmp_vector, .cmp_vector_optimized => |air_tag| if (use_old) try cg.airCmpVector(inst) else fallback: {
+ const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
+ const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;
+ switch (extra.compareOperator()) {
+ .eq, .neq => {},
+ .lt, .lte, .gte, .gt => if (cg.floatBits(cg.typeOf(extra.lhs).childType(zcu)) == null)
+ break :fallback try cg.airCmpVector(inst),
+ }
+ var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs });
+ var res: [1]Temp = undefined;
+ (err: switch (extra.compareOperator()) {
+ .lt, .lte, .gte, .gt => |cmp_op| {
+ switch (cmp_op) {
+ else => unreachable,
+ .lt, .lte => {},
+ .gt, .gte => std.mem.swap(Temp, &ops[0], &ops[1]),
+ }
+ break :err cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) {
+ else => unreachable,
+ .lt, .gt => .l,
+ .lte, .gte => .le,
+ })) {
+ else => unreachable,
+ inline .l, .le => |cc| comptime &.{ .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .word, .is = .word } },
+ .{ .scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
+ .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0d, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .qword, .is = .word } },
+ .{ .scalar_float = .{ .of = .qword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .mem, .none } },
+ .{ .src = .{ .sse, .mem, .none } },
+ .{ .src = .{ .mem, .sse, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
+ .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .word } },
+ .{ .scalar_float = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .mem, .none } },
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
+ .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1d, .vp(switch (cc) {
+ else => unreachable,
+ .l => .gt,
+ .le => .ge,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1d, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{
+ .ref = .src0,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ss, .cmp, .dst0x, .src1d, .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
+ else => unreachable,
+ .l => .gt,
+ .le => .ge,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{
+ .ref = .src0,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .cmp, .dst0x, .src1x, .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
+ else => unreachable,
+ .l => .gt,
+ .le => .ge,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1q, .vp(switch (cc) {
+ else => unreachable,
+ .l => .gt,
+ .le => .ge,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1q, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{
+ .ref = .src0,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._sd, .cmp, .dst0x, .src1q, .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
+ else => unreachable,
+ .l => .gt,
+ .le => .ge,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{
+ .ref = .src0,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._pd, .cmp, .dst0x, .src1x, .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .yword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
+ else => unreachable,
+ .l => .gt,
+ .le => .ge,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .yword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
+ .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
+ .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
+ .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
+ .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
+ .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
+ .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
+ .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
+ .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
+ .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
+ .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
+ .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
+ .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
+ .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
+ .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
+ .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
+ .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }) },
+ .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
+ else => unreachable,
+ .l => .lt,
+ .le => .le,
+ }), ._ },
+ .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp4t, .tmp5t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp5t, ._, ._, ._ },
+ .{ ._, .fromCond(switch (cc) {
+ else => unreachable,
+ .l => .a,
+ .le => .ae,
+ }), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp4t, .tmp5t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp5t, ._, ._, ._ },
+ .{ ._, .fromCond(switch (cc) {
+ else => unreachable,
+ .l => .a,
+ .le => .ae,
+ }), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
+ switch (cc) {
+ else => unreachable,
+ .l => .{ ._, ._, .@"test", .tmp6h, .si(0b1_000_001), ._, ._ },
+ .le => .{ ._, ._r, .sh, .tmp6h, .ui(1), ._, ._ },
+ },
+ .{ ._, .fromCond(switch (cc) {
+ else => unreachable,
+ .l => .z,
+ .le => .nc,
+ }), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp4t, .tmp5t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp5t, ._, ._, ._ },
+ .{ ._, .fromCond(switch (cc) {
+ else => unreachable,
+ .l => .a,
+ .le => .ae,
+ }), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp4t, .tmp5t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp5t, ._, ._, ._ },
+ .{ ._, .fromCond(switch (cc) {
+ else => unreachable,
+ .l => .a,
+ .le => .ae,
+ }), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
+ switch (cc) {
+ else => unreachable,
+ .l => .{ ._, ._, .@"test", .tmp6h, .si(0b1_000_001), ._, ._ },
+ .le => .{ ._, ._r, .sh, .tmp6h, .ui(1), ._, ._ },
+ },
+ .{ ._, .fromCond(switch (cc) {
+ else => unreachable,
+ .l => .z,
+ .le => .nc,
+ }), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
+ } },
+ } },
+ });
+ },
+ .eq, .neq => |cmp_op| cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) {
+ else => unreachable,
+ .eq => .e,
+ .neq => .ne,
+ })) {
+ else => unreachable,
+ inline .e, .ne => |cc| comptime &.{ .{
+ .src_constraints = .{ .{ .bool_vec = .byte }, .{ .bool_vec = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .imm8, .none } },
+ .{ .src = .{ .imm8, .mut_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .imm8, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .mut_mem, .to_gpr, .none } },
+ .{ .src = .{ .to_gpr, .mut_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "floor",
- .up => "ceil",
- .zero => "trunc",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ },
+ .{ ._, ._, .not, .dst0b, ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ },
+ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .bool_vec = .word }, .{ .bool_vec = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .imm16, .none } },
+ .{ .src = .{ .imm16, .mut_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .mut_mem, .to_gpr, .none } },
+ .{ .src = .{ .to_gpr, .mut_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "floor",
- .up => "ceil",
- .zero => "trunc",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._, .not, .dst0w, ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ },
+ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .bool_vec = .dword }, .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .imm32, .none } },
+ .{ .src = .{ .imm32, .mut_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .imm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .mut_mem, .to_gpr, .none } },
+ .{ .src = .{ .to_gpr, .mut_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "floor",
- .up => "ceil",
- .zero => "trunc",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .x87, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .not, .dst0d, ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .bool_vec = .qword }, .{ .bool_vec = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .simm32, .none } },
+ .{ .src = .{ .simm32, .mut_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .mut_mem, .to_gpr, .none } },
+ .{ .src = .{ .to_gpr, .mut_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "__floorx",
- .up => "__ceilx",
- .zero => "__truncx",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .reg = .st0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, .v_dqa, .mov, .tmp0x, .mem(.src0x), ._, ._ },
- .{ ._, .v_dqa, .mov, .mem(.tmp1x), .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .x87, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .not, .dst0q, ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ },
+ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_bool_vec, .any_bool_vec, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "__floorx",
- .up => "__ceilx",
- .zero => "__truncx",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .reg = .st0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._dqa, .mov, .tmp0x, .mem(.src0x), ._, ._ },
- .{ ._, ._dqa, .mov, .mem(.tmp1x), .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, .x87, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .not, .tmp1p, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .xword, .is = .byte } },
+ .{ .scalar_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .byte,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_b, .cmpeq, .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .xword, .is = .word } },
+ .{ .scalar_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .word,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .cmpeq, .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .dword,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .cmpeq, .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .qword,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .cmpeq, .dst0x, .src0x, .src1x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .xword, .is = .byte } },
+ .{ .scalar_int = .{ .of = .xword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .byte,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_b, .cmpeq, .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .xword, .is = .word } },
+ .{ .scalar_int = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .word,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_w, .cmpeq, .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_int = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .dword,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .cmpeq, .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .qword,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_q, .cmpeq, .dst0x, .src1x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .qword, .is = .byte } },
+ .{ .scalar_int = .{ .of = .qword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .byte,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_b, .cmpeq, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .qword, .is = .word } },
+ .{ .scalar_int = .{ .of = .qword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .word,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_w, .cmpeq, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .mmx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .qword, .is = .dword } },
+ .{ .scalar_int = .{ .of = .qword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_mmx, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_mmx, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_mmx, .to_mmx, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{ .ref = .src0, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .dword,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .cmpeq, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .yword, .is = .byte } },
+ .{ .scalar_int = .{ .of = .yword, .is = .byte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .byte,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_b, .cmpeq, .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .yword, .is = .word } },
+ .{ .scalar_int = .{ .of = .yword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .word,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .cmpeq, .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .yword, .is = .dword } },
+ .{ .scalar_int = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .dword,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .cmpeq, .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_int = .{ .of = .yword, .is = .qword } },
+ .{ .scalar_int = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
+ .kind = .all,
+ .inverted = switch (cc) {
+ else => unreachable,
+ .e => false,
+ .ne => true,
+ },
+ .scalar = .qword,
+ } } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .cmpeq, .dst0y, .src0y, .src1y, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "__floorx",
- .up => "__ceilx",
- .zero => "__truncx",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .reg = .st0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._ps, .mova, .tmp0x, .mem(.src0x), ._, ._ },
- .{ ._, ._ps, .mova, .mem(.tmp1x), .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, .x87, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "__floorx",
- .up => "__ceilx",
- .zero => "__truncx",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, .x87, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "__floorx",
- .up => "__ceilx",
- .zero => "__truncx",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, .x87, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "__floorx",
- .up => "__ceilx",
- .zero => "__truncx",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .mem(.tmp2x), .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "floorq",
- .up => "ceilq",
- .zero => "truncq",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "floorq",
- .up => "ceilq",
- .zero => "truncq",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "floorq",
- .up => "ceilq",
- .zero => "truncq",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (direction) {
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
else => unreachable,
- .down => "floorq",
- .up => "ceilq",
- .zero => "truncq",
- } } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- } },
- }) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
- @tagName(air_tag),
- cg.typeOf(un_op).fmt(pt),
- ops[0].tracking(cg),
- }),
- else => |e| return e,
- };
- try res[0].finish(inst, &.{un_op}, &ops, cg);
- },
- .neg, .neg_optimized => |air_tag| if (use_old) try cg.airFloatSign(inst, .neg) else {
- const un_op = air_datas[@intFromEnum(inst)].un_op;
- var ops = try cg.tempsFromOperands(inst, .{un_op});
- var res: [1]Temp = undefined;
- cg.select(&res, &.{cg.typeOf(un_op)}, &ops, comptime &.{ .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_ps, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_pd, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._pd, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_x87, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .x87 } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_, .chs, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_any_float = .xword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_any_float = .xword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .scalar_any_float = .xword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_any_float = .yword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_any_float = .yword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", .v_ps, .xor, .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
- .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._ps, .xor, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_pd, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", .v_pd, .xor, .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
- .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._pd, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._pd, .xor, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_pd, .mova, .tmp2y, .lea(.tmp0y), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", .v_pd, .xor, .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
- .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, .p_, .xor, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._ps, .xor, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- } }) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
- @tagName(air_tag),
- cg.typeOf(un_op).fmt(pt),
- ops[0].tracking(cg),
- }),
- else => |e| return e,
- };
- try res[0].finish(inst, &.{un_op}, &ops, cg);
- },
-
- .cmp_lt,
- .cmp_lt_optimized,
- .cmp_lte,
- .cmp_lte_optimized,
- .cmp_gte,
- .cmp_gte_optimized,
- .cmp_gt,
- .cmp_gt_optimized,
- => |air_tag| if (use_old) try cg.airCmp(inst, air_tag.toCmpOp().?) else {
- const bin_op = air_datas[@intFromEnum(inst)].bin_op;
- const cmp_op = air_tag.toCmpOp().?;
- var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
- var res: [1]Temp = undefined;
- (if (cg.floatBits(cg.typeOf(bin_op.lhs))) |_| err: {
- switch (cmp_op) {
- else => unreachable,
- .lt, .lte => {},
- .gt, .gte => std.mem.swap(Temp, &ops[0], &ops[1]),
- }
- break :err cg.select(&res, &.{.bool}, &ops, switch (switch (cmp_op) {
- else => unreachable,
- .lt, .gt => true,
- .lte, .gte => false,
- }) {
- inline false, true => |strict| comptime &.{ .{
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .mmx, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .mmx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
+ .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .mmx, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .mmx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .mmx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
+ .{ ._, ._, .xor, .tmp4b, .si(0b1111), ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .mmx, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .mmx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .mmx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
+ .{ ._, ._, .xor, .tmp4b, .si(0b11), ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_scalar_int, .any_scalar_int, .any },
+ .dst_constraints = .{ .{ .bool_vec = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
+ .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
+ .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_scalar_int, .any_scalar_int, .any },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
+ .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
+ .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
+ .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_int, .any_scalar_int, .any },
+ .dst_constraints = .{ .{ .bool_vec = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
+ .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
+ .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp2b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0p, .@"8", .tmp1), .tmp2p, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp4w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp4w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0p, .@"8", .tmp1), .tmp2p, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp4d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0p, .@"8", .tmp1), .tmp2p, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp4q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp4q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
+ .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0p, .@"8", .tmp1), .tmp2p, ._, ._ },
+ } },
+ }, .{
.required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .float = .word }, .{ .float = .word }, .any },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .word, .is = .word } },
+ .{ .scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
+ .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0d, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .qword, .is = .word } },
+ .{ .scalar_float = .{ .of = .qword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .mem, .none } },
+ .{ .src = .{ .sse, .mem, .none } },
+ .{ .src = .{ .mem, .sse, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
+ .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .word } },
+ .{ .scalar_float = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .mem, .mem, .none } },
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
+ .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1d, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .dword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{
+ .ref = .src0,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ss, .cmp, .dst0x, .src1d, .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{
+ .ref = .src0,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .cmp, .dst0x, .src1x, .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .dword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1q, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{
+ .ref = .src0,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._sd, .cmp, .dst0x, .src1q, .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .ref_mask = .{
+ .ref = .src0,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._pd, .cmp, .dst0x, .src1x, .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .scalar_float = .{ .of = .yword, .is = .qword } },
+ .{ .scalar_float = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .mem, .none } },
+ .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_sse, .to_sse, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc_mask = .{
+ .ref = .src0,
+ .rc = .sse,
+ .info = .{ .kind = .all, .scalar = .qword },
+ } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
+ .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
+ .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
+ .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp1x, .mem(.tmp7d), ._, ._ },
+ .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp7d), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp6b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
+ .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
+ .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
+ .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
- .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp2x, .mem(.tmp8d), ._, ._ },
+ .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp8d), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -83439,142 +83024,552 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp1x, .src1q, ._, ._ },
- .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .word }, .{ .float = .word }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 }, .none } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .l,
- false => .le,
- } }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .v_ss, .ucomi, .src0x, .src1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
+ .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
+ .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword }, .any },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._ss, .ucomi, .src0x, .src1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
+ .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
+ .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
+ .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
+ .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .v_sd, .ucomi, .src0x, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
+ .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
+ .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .vp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }) },
+ .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._sd, .ucomi, .src0x, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .sp(switch (cc) {
+ else => unreachable,
+ .e => .eq,
+ .ne => .neq,
+ }), ._ },
+ .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .cmov, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .required_features = .{ .x87, .cmov, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .st6 } },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
.unused,
- .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, switch (cc) {
+ else => unreachable,
+ .e => ._np,
+ .ne => ._p,
+ }, .set, .tmp4b, ._, ._, ._ },
+ .{ ._, ._, switch (cc) {
+ else => unreachable,
+ .e => .@"and",
+ .ne => .@"or",
+ }, .tmp3b, .tmp4b, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ },
- .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, switch (cc) {
+ else => unreachable,
+ .e => ._np,
+ .ne => ._p,
+ }, .set, .tmp4b, ._, ._, ._ },
+ .{ ._, ._, switch (cc) {
+ else => unreachable,
+ .e => .@"and",
+ .ne => .@"or",
+ }, .tmp3b, .tmp4b, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
} },
}, .{
- .required_features = .{ .sahf, .x87, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .f64, .kind = .{ .reg = .st6 } },
.{ .type = .f64, .kind = .{ .reg = .st7 } },
.{ .type = .u16, .kind = .{ .reg = .ax } },
@@ -83582,810 +83577,810 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6h, .si(0b1_000_000), ._, ._ },
+ .{ ._, ._, .@"test", .tmp6h, .si(0b1_000_100), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, switch (cc) {
+ else => unreachable,
+ .e => ._np,
+ .ne => ._p,
+ }, .set, .tmp4b, ._, ._, ._ },
+ .{ ._, ._, switch (cc) {
+ else => unreachable,
+ .e => .@"and",
+ .ne => .@"or",
+ }, .tmp3b, .tmp4b, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .cmov, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
+ .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, switch (cc) {
+ else => unreachable,
+ .e => ._np,
+ .ne => ._p,
+ }, .set, .tmp4b, ._, ._, ._ },
+ .{ ._, ._, switch (cc) {
+ else => unreachable,
+ .e => .@"and",
+ .ne => .@"or",
+ }, .tmp3b, .tmp4b, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st6 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
+ .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
.{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp6h, .si(0b1_000_000), ._, ._ },
+ .{ ._, ._, .@"test", .tmp6h, .si(0b1_000_100), ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp3b, ._, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .dst_constraints = .{ .{ .bool_vec = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .z,
- false => .nc,
- } }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- switch (strict) {
- true => .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_001), ._, ._ },
- false => .{ ._, ._r, .sh, .tmp2h, .ui(1), ._, ._ },
- },
+ .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
+ .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .cmov, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_x87, .to_x87, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp0t, .src1t, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
} },
}, .{
- .required_features = .{ .sahf, .x87, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .mem, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
} },
}, .{
- .required_features = .{ .sahf, .x87, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_x87, .to_x87, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .a,
- false => .ae,
- } }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .sahf, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .mem, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .z,
- false => .nc,
- } }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- switch (strict) {
- true => .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_001), ._, ._ },
- false => .{ ._, ._r, .sh, .tmp2h, .ui(1), ._, ._ },
- },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
+ .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_x87, .to_x87, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .z,
- false => .nc,
- } }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- switch (strict) {
- true => .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_001), ._, ._ },
- false => .{ ._, ._r, .sh, .tmp2h, .ui(1), ._, ._ },
- },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .xword }, .{ .float = .xword }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 }, .none } },
+ .{ .src = .{ .to_mem, .to_mem, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
.{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .u8, .kind = .{ .reg = .cl } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
},
- .dst_temps = .{ .{ .cc = switch (strict) {
- true => .l,
- false => .le,
- } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, .fromCond(cc), .set, .tmp8b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
+ .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(6), ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp1), .tmp2q, ._, ._ },
} },
} },
- });
- } else err: {
- res[0] = ops[0].cmpInts(cmp_op, &ops[1], cg) catch |err| break :err err;
- }) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
- @tagName(air_tag),
- cg.typeOf(bin_op.lhs).fmt(pt),
- ops[0].tracking(cg),
- ops[1].tracking(cg),
}),
- else => |e| return e,
- };
- try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
- },
- .cmp_eq,
- .cmp_eq_optimized,
- .cmp_neq,
- .cmp_neq_optimized,
- => |air_tag| if (use_old) try cg.airCmp(inst, air_tag.toCmpOp().?) else {
- const bin_op = air_datas[@intFromEnum(inst)].bin_op;
- const cmp_op = air_tag.toCmpOp().?;
- var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
- const ty = cg.typeOf(bin_op.lhs);
- var res: [1]Temp = undefined;
- const OptInfo = struct {
- deaths: [2]Air.Inst.Index,
- res: [1]Temp,
- state: State,
- reloc: Mir.Inst.Index,
- };
- var opt_info: ?OptInfo = null;
- (err: switch (@as(enum { float, int }, if (cg.floatBits(ty)) |_|
- .float
- else if (cg.intInfo(ty)) |_|
- .int
- else category: {
- const child_ty = ty.optionalChild(zcu);
- const has_value_off: u31 = @intCast(child_ty.abiSize(zcu));
- var has_values: [2]Temp = undefined;
- opt_info = @as(OptInfo, undefined);
- for (&has_values, &ops, &opt_info.?.deaths) |*has_value, *op, *death| {
- has_value.* = try op.read(.bool, .{ .disp = has_value_off }, cg);
- const child = try op.read(child_ty, .{}, cg);
- try op.die(cg);
- op.* = child;
- death.* = child.index;
- }
- cg.select(
- &opt_info.?.res,
- &.{.bool},
- &has_values,
- switch (Condition.fromCompareOperatorUnsigned(cmp_op)) {
- else => unreachable,
- inline .e, .ne => |cc| comptime &.{.{
- .src_constraints = .{ .{ .size = .byte }, .{ .size = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .imm8, .none } },
- .{ .src = .{ .imm8, .mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_gpr, .imm8, .none } },
- .{ .src = .{ .imm8, .to_gpr, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .mem, .to_gpr, .none } },
- .{ .src = .{ .to_gpr, .mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_gpr, .to_gpr, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
- .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
- .{ ._, .fromCond(cc), .set, .dst0b, ._, ._, ._ },
- .{ ._, ._, .@"test", .src0b, .src1b, ._, ._ },
- } },
- }},
- },
- ) catch |err| switch (err) {
- error.SelectFailed => unreachable,
- else => |e| return e,
- };
- for (has_values) |has_value| for (opt_info.?.res) |opt_res| {
- if (has_value.index == opt_res.index) break;
- } else try has_value.die(cg);
- opt_info.?.state = cg.initRetroactiveState();
- opt_info.?.state.next_temp_index = cg.next_temp_index;
- var state = try cg.saveState();
- state.next_temp_index = cg.next_temp_index;
- for (ops) |op| try op.die(cg);
- try cg.saveRetroactiveState(&opt_info.?.state);
- opt_info.?.reloc = try cg.asmJccReloc(.z, undefined);
- try cg.restoreState(state, &.{}, .{
- .emit_instructions = false,
- .update_tracking = true,
- .resurrect = true,
- .close_scope = true,
- });
- break :category if (cg.floatBits(child_ty)) |_| .float else .int;
- })) {
- .float => {
- cg.select(&res, &.{.bool}, &ops, switch (switch (air_tag) {
- else => unreachable,
- .cmp_eq, .cmp_neq => false,
- .cmp_eq_optimized, .cmp_neq_optimized => true,
- }) {
- inline false, true => |optimized| comptime &.{ .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .float = .word }, .{ .float = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .extra_temps = .{
- .{ .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
- .{ .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .sse } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtph2, .tmp1x, .src1q, ._, ._ },
- .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1d, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .word }, .{ .float = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 }, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmphf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = .z }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .v_ss, .ucomi, .src0x, .src1d, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._ss, .ucomi, .src0x, .src1d, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .v_sd, .ucomi, .src0x, .src1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .mem, .none } },
- .{ .src = .{ .mem, .to_sse, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .to_sse, .to_sse, .none } },
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._sd, .ucomi, .src0x, .src1q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
- },
- .extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ },
- .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sahf, .x87, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none }, .commute = .{ 0, 1 } },
- },
- .extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .sahf, ._, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z,
- true => .nz,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (optimized) {
- false => &.{
- .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp2h, .si(0b1_000_000), ._, ._ },
- .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_100), ._, ._ },
- },
- true => &.{
- .{ ._, .f_, .ld, .src1q, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_000), ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .x87, .cmov, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .mem, .to_x87, .none } },
- .{ .src = .{ .to_x87, .to_x87, .none } },
- },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_p, .ucomi, .tmp0t, .src1t, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sahf, .x87, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .sahf, ._, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sahf, .x87, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .mem, .to_x87, .none } },
- .{ .src = .{ .to_x87, .to_x87, .none } },
- },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z_and_np,
- true => .z,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .sahf, ._, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .mem, .none } },
- },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z,
- true => .nz,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (optimized) {
- false => &.{
- .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp2h, .si(0b1_000_000), ._, ._ },
- .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_100), ._, ._ },
- },
- true => &.{
- .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_000), ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_x87, .mem, .none }, .commute = .{ 0, 1 } },
- .{ .src = .{ .mem, .to_x87, .none } },
- .{ .src = .{ .to_x87, .to_x87, .none } },
- },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st6 } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .u16, .kind = .{ .reg = .ax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = switch (optimized) {
- false => .z,
- true => .nz,
- } }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = switch (optimized) {
- false => &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp2h, .si(0b1_000_000), ._, ._ },
- .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_100), ._, ._ },
- },
- true => &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
- .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp2h, .si(0b1_000_000), ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .xword }, .{ .float = .xword }, .any },
- .patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 }, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__cmptf2" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .cc = .z }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
- } },
- } },
- }) catch |err| break :err err;
- switch (cmp_op) {
- else => unreachable,
- .eq => {},
- .neq => {
- const cc = &res[0].unwrap(cg).temp.tracking(cg).short.eflags;
- cc.* = cc.negate();
- },
- }
- },
- .int => res[0] = ops[0].cmpInts(cmp_op, &ops[1], cg) catch |err| break :err err,
}) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ error.SelectFailed => return cg.fail("failed to select {s} {s} {} {} {}", .{
@tagName(air_tag),
- cg.typeOf(bin_op.lhs).fmt(pt),
+ @tagName(extra.compareOperator()),
+ cg.typeOf(extra.lhs).fmt(pt),
ops[0].tracking(cg),
ops[1].tracking(cg),
}),
else => |e| return e,
};
- if (opt_info) |*oi| {
- for (ops) |op| for (res) |r| {
- if (op.index == r.index) break;
- } else try op.die(cg);
- try cg.genCopy(.bool, oi.res[0].tracking(cg).short, res[0].tracking(cg).short, .{});
- try res[0].die(cg);
- res[0] = oi.res[0];
- try cg.restoreState(oi.state, &oi.deaths, .{
- .emit_instructions = true,
- .update_tracking = true,
- .resurrect = true,
- .close_scope = true,
- });
- cg.performReloc(oi.reloc);
- @memset(&ops, res[0]);
- }
- try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ try res[0].finish(inst, &.{ extra.lhs, extra.rhs }, &ops, cg);
},
-
.cond_br => try cg.airCondBr(inst),
.switch_br => try cg.airSwitchBr(inst),
.loop_switch_br => try cg.airLoopSwitchBr(inst),
@@ -89934,14 +89929,1029 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .movsxb, .dst0x, .src0w, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .movzxb, .dst0x, .src0w, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_q, .movsxb, .dst0x, .src0w, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_q, .movzxb, .dst0x, .src0w, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_b, .cmpgt, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklbw, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .movsxb, .dst0y, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .movzxb, .dst0y, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_q, .movsxb, .tmp1y, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"8", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_q, .movzxb, .tmp1y, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"8", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_q, .movsxb, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_q, .movzxb, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_q, .movsxb, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_q, .movzxb, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .movsxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .vp_q, .movsxd, .dst0x, .dst0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .movzxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .vp_q, .movzxd, .dst0x, .dst0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_q, .movsxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .p_q, .movsxd, .dst0x, .dst0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_q, .movzxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .p_q, .movzxd, .dst0x, .dst0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_b, .cmpgt, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklbw, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpckldq, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .any_scalar_signed_int, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .any_scalar_signed_int, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .any_scalar_int, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .any_scalar_int, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movsxw, .dst0y, .src0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movzxw, .dst0y, .src0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -89949,11 +90959,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movsxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .vp_q, .movsxw, .dst0x, .src0d, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -89961,11 +90971,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movzxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .vp_q, .movzxw, .dst0x, .src0d, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -89973,11 +90983,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movsxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .p_q, .movsxw, .dst0x, .src0d, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -89985,17 +90995,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movzxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .p_q, .movzxw, .dst0x, .src0d, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90010,22 +91020,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
.{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_b, .cmpgt, .tmp0x, .src0x, ._, ._ },
- .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklbw, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ },
.{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90040,13 +91048,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
.{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -90054,11 +91061,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movsxb, .dst0y, .src0d, ._, ._ },
+ .{ ._, .vp_q, .movsxw, .dst0y, .src0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -90066,11 +91073,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movzxb, .dst0y, .src0d, ._, ._ },
+ .{ ._, .vp_q, .movzxw, .dst0y, .src0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90092,14 +91099,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movsxb, .tmp1y, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"8", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", .vp_q, .movsxw, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90121,14 +91128,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movzxb, .tmp1y, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"8", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", .vp_q, .movzxw, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90150,14 +91157,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movsxb, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .vp_q, .movsxw, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90179,14 +91186,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movzxb, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .vp_q, .movzxw, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90208,14 +91215,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_q, .movsxb, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .p_q, .movsxw, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90237,14 +91244,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_q, .movzxb, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .p_q, .movzxw, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90266,50 +91273,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -90324,42 +91302,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
- }, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- } },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -90367,12 +91317,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movsxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .vp_q, .movsxw, .dst0x, .src0d, ._, ._ },
.{ ._, .vp_q, .movsxd, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -90380,12 +91330,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movzxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .vp_q, .movzxw, .dst0x, .src0d, ._, ._ },
.{ ._, .vp_q, .movzxd, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -90393,12 +91343,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movsxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .p_q, .movsxw, .dst0x, .src0d, ._, ._ },
.{ ._, .p_q, .movsxd, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -90406,18 +91356,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movzxb, .dst0x, .src0w, ._, ._ },
+ .{ ._, .p_q, .movzxw, .dst0x, .src0d, ._, ._ },
.{ ._, .p_q, .movzxd, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90432,9 +91382,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
.{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_b, .cmpgt, .tmp0x, .src0x, ._, ._ },
- .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklbw, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ },
.{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
@@ -90443,13 +91391,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90464,47 +91412,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
.{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
} },
- }, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .any_scalar_signed_int, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .any_scalar_signed_int, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90527,50 +91441,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._sq, .sto, ._, ._, ._, ._ },
.{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .any_scalar_int, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
.dst_constraints = .{ .any_scalar_int, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -90593,71 +91474,71 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._sq, .sto, ._, ._, ._, ._ },
.{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .vp_q, .movsxd, .dst0x, .src0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .vp_q, .movzxd, .dst0x, .src0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .p_q, .movsxd, .dst0x, .src0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .p_q, .movzxd, .dst0x, .src0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90672,18 +91553,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
.{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ },
- .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_d, .cmpgt, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90698,42 +91579,42 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
.{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movsxw, .dst0y, .src0x, ._, ._ },
+ .{ ._, .vp_q, .movsxd, .dst0y, .src0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxw, .dst0y, .src0x, ._, ._ },
+ .{ ._, .vp_q, .movzxd, .dst0y, .src0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90748,21 +91629,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_q, .movsxd, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90777,21 +91658,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_q, .movzxd, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90806,21 +91687,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_q, .movsxd, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90835,21 +91716,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_q, .movzxd, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90864,21 +91745,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_q, .movsxd, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -90893,20 +91774,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_q, .movzxd, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -90921,20 +91803,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._d, .movsx, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -90949,68 +91832,72 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movsxw, .dst0x, .src0d, ._, ._ },
+ .{ ._, .vp_q, .movsxd, .dst0x, .src0q, ._, ._ },
+ .{ ._, .vp_q, .movsxd, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movzxw, .dst0x, .src0d, ._, ._ },
+ .{ ._, .vp_q, .movzxd, .dst0x, .src0q, ._, ._ },
+ .{ ._, .vp_q, .movzxd, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movsxw, .dst0x, .src0d, ._, ._ },
+ .{ ._, .p_q, .movsxd, .dst0x, .src0q, ._, ._ },
+ .{ ._, .p_q, .movsxd, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movzxw, .dst0x, .src0d, ._, ._ },
+ .{ ._, .p_q, .movzxd, .dst0x, .src0q, ._, ._ },
+ .{ ._, .p_q, .movzxd, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -91025,20 +91912,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
.{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ },
- .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_d, .cmpgt, .tmp0x, .src0x, ._, ._ },
.{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpckldq, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -91053,45 +91940,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
.{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
.{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_q, .movsxw, .dst0y, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_q, .movzxw, .dst0y, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .any_scalar_signed_int, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -91104,23 +91967,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movsxw, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._d, .movsx, .tmp2q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .any_scalar_int, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -91133,24 +92000,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movzxw, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .any_scalar_signed_int, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -91161,25 +92032,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movsxw, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._sq, .lod, ._, ._, ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp4q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .any_scalar_signed_int, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -91190,25 +92068,66 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movzxw, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._sq, .lod, ._, ._, ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._r, .sa, .tmp4q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .any_scalar_int, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sa(.src0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .any_scalar_int, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -91219,23 +92138,346 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_q, .movsxw, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sa(.src0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ } }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ @tagName(air_tag),
+ dst_ty.fmt(pt),
+ src_ty.fmt(pt),
+ ops[0].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .intcast_safe => unreachable,
+ .trunc => |air_tag| if (use_old) try cg.airTrunc(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ var res: [1]Temp = undefined;
+ cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
+ .src_constraints = .{ .{ .signed_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .exact_signed_int = 1 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .@"and", .dst0d, .si(1), ._, ._ },
+ .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .any_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_signed_int = 1 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movzx, .dst0d, .mem(.src0b), ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .si(1), ._, ._ },
+ .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .exact_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .src_constraints = .{ .any_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_signed_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movsx, .dst0d, .mem(.src0b), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_unsigned_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movzx, .dst0d, .mem(.src0b), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._l, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .@"and", .dst0b, .sa(.dst0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_int, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movzx, .dst0d, .mem(.src0b), ._, ._ },
+ .{ ._, ._, .@"and", .dst0b, .sa(.dst0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .exact_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .src_constraints = .{ .any_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_signed_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movsx, .dst0d, .mem(.src0w), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_unsigned_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movzx, .dst0d, .mem(.src0w), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .@"and", .dst0w, .sa(.dst0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movzx, .dst0d, .mem(.src0w), ._, ._ },
+ .{ ._, ._, .@"and", .dst0w, .sa(.dst0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .exact_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .src_constraints = .{ .any_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0d, .mem(.src0d), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._l, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0d, .mem(.src0d), ._, ._ },
+ .{ ._, ._l, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .@"and", .dst0d, .sa(.dst0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0d, .mem(.src0d), ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .sa(.dst0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0q, .mem(.src0q), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .signed_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._l, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0q, .mem(.src0q), ._, ._ },
+ .{ ._, ._l, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .bzhi, .dst0q, .src0q, .dst0q, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .bzhi, .dst0q, .mem(.src0q), .dst0q, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .mem(.src0q), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = 128 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -91246,25 +92488,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_q, .movzxw, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .any_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = 64 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -91277,23 +92517,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .any_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -91306,75 +92549,88 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_q, .movsxw, .dst0x, .src0d, ._, ._ },
- .{ ._, .vp_q, .movsxd, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movzxw, .dst0x, .src0d, ._, ._ },
- .{ ._, .vp_q, .movzxd, .dst0x, .dst0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = 64 } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_q, .movsxw, .dst0x, .src0d, ._, ._ },
- .{ ._, .p_q, .movsxd, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movzxw, .dst0x, .src0d, ._, ._ },
- .{ ._, .p_q, .movzxd, .dst0x, .dst0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -91384,27 +92640,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ },
- .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpckldq, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp2q, .memad(.src0q, .add_size, -16), .tmp2q, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp2q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -91414,24 +92672,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp2q, .memad(.src0q, .add_size, -8), .tmp2q, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp2q, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .any_scalar_signed_int, .any },
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
@@ -91440,31 +92701,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
+ .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .any_scalar_int, .any },
+ .src_constraints = .{ .any_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
@@ -91473,78 +92733,135 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
+ .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movsxd, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_b, .add, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, .vp_, .xor, .dst0x, .dst0x, .lea(.tmp0x), ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movzxd, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movsxd, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .p_b, .add, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_q, .movzxd, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
@@ -91557,21 +92874,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_d, .cmpgt, .tmp0x, .src0x, ._, ._ },
- .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
@@ -91581,47 +92897,86 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_b, .add, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .vp_, .xor, .dst0y, .dst0y, .lea(.tmp0y), ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movsxd, .dst0y, .src0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .vp_q, .movzxd, .dst0y, .src0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_b, .add, .tmp3y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -91633,26 +92988,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movsxd, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp2y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
@@ -91662,24 +93019,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movzxd, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp3x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_b, .add, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -91691,26 +93054,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movsxd, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
@@ -91720,24 +93085,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_q, .movzxd, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .add, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -91749,24 +93121,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_q, .movsxd, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -91778,22 +93153,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_q, .movzxd, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 1 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -91807,22 +93185,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._d, .movsx, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .neg, .tmp1b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 1 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -91836,74 +93215,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_q, .movsxd, .dst0x, .src0q, ._, ._ },
- .{ ._, .vp_q, .movsxd, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_q, .movzxd, .dst0x, .src0q, ._, ._ },
- .{ ._, .vp_q, .movzxd, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_q, .movsxd, .dst0x, .src0q, ._, ._ },
- .{ ._, .p_q, .movsxd, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_q, .movzxd, .dst0x, .src0q, ._, ._ },
- .{ ._, .p_q, .movzxd, .dst0x, .dst0q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .si(1), ._, ._ },
+ .{ ._, ._, .neg, .tmp1b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -91914,24 +93243,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_d, .cmpgt, .tmp0x, .src0x, ._, ._ },
- .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpckldq, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -91942,24 +93273,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ },
- .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .any_scalar_signed_int, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -91971,28 +93307,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._d, .movsx, .tmp2q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .any_scalar_int, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -92004,29 +93336,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .any_scalar_signed_int, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -92037,32 +93366,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._sq, .lod, ._, ._, ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._r, .sa, .tmp4q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .any_scalar_signed_int, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -92073,32 +93394,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._sq, .lod, ._, ._, ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._r, .sa, .tmp4q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .any_scalar_int, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -92109,30 +93423,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sa(.src0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .any_scalar_int, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -92143,343 +93453,84 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sa(.src0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
- } }) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
- @tagName(air_tag),
- dst_ty.fmt(pt),
- src_ty.fmt(pt),
- ops[0].tracking(cg),
- }),
- else => |e| return e,
- };
- try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .intcast_safe => unreachable,
- .trunc => |air_tag| if (use_old) try cg.airTrunc(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- var res: [1]Temp = undefined;
- cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
- .src_constraints = .{ .{ .signed_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .exact_signed_int = 1 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .@"and", .dst0d, .si(1), ._, ._ },
- .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .any_signed_int, .any, .any },
- .dst_constraints = .{ .{ .exact_signed_int = 1 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .mem(.src0b), ._, ._ },
- .{ ._, ._, .@"and", .dst0d, .si(1), ._, ._ },
- .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .exact_int = 8 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .each = .{ .once = &.{} },
- }, .{
- .src_constraints = .{ .any_signed_int, .any, .any },
- .dst_constraints = .{ .{ .exact_signed_int = 8 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .movsx, .dst0d, .mem(.src0b), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .exact_unsigned_int = 8 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .mem(.src0b), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .signed_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._l, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .@"and", .dst0b, .sa(.dst0, .add_umax), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .any_int, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .mem(.src0b), ._, ._ },
- .{ ._, ._, .@"and", .dst0b, .sa(.dst0, .add_umax), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .exact_int = 16 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .each = .{ .once = &.{} },
- }, .{
- .src_constraints = .{ .any_signed_int, .any, .any },
- .dst_constraints = .{ .{ .exact_signed_int = 16 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .movsx, .dst0d, .mem(.src0w), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .exact_unsigned_int = 16 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .mem(.src0w), ._, ._ },
- } },
- }, .{
- .required_features = .{ .fast_imm16, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .@"and", .dst0w, .sa(.dst0, .add_umax), ._, ._ },
- } },
- }, .{
- .required_features = .{ .fast_imm16, null, null, null },
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .mem(.src0w), ._, ._ },
- .{ ._, ._, .@"and", .dst0w, .sa(.dst0, .add_umax), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .exact_int = 32 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .each = .{ .once = &.{} },
- }, .{
- .src_constraints = .{ .any_int, .any, .any },
- .dst_constraints = .{ .{ .exact_int = 32 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .mem(.src0d), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .signed_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._l, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .any_signed_int, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .mem(.src0d), ._, ._ },
- .{ ._, ._l, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .@"and", .dst0d, .sa(.dst0, .add_umax), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .mem(.src0d), ._, ._ },
- .{ ._, ._, .@"and", .dst0d, .sa(.dst0, .add_umax), ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_int, .any, .any },
- .dst_constraints = .{ .{ .exact_int = 64 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0q, .mem(.src0q), ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .signed_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._l, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- } },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_signed_int, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .qword }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0q, .mem(.src0q), ._, ._ },
- .{ ._, ._l, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._, .bzhi, .dst0q, .src0q, .dst0q, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._, .bzhi, .dst0q, .mem(.src0q), .dst0q, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .gpr }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .dst0q, .mem(.src0q), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_int, .any, .any },
- .dst_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = 128 } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92490,23 +93541,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_signed_int, .any, .any },
- .dst_constraints = .{ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = 64 } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92519,26 +93571,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
- .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_signed_int, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92551,28 +93600,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
- .{ ._, ._l, .sa, .tmp0q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._r, .sa, .tmp0q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
- .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_signed_int, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92585,26 +93630,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .memad(.src0q, .add_size, -8), ._, ._ },
- .{ ._, ._l, .sa, .tmp0q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._r, .sa, .tmp0q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = 64 } }, .any },
+ .required_features = .{ .bmi2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -92615,24 +93659,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -92645,26 +93691,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .bzhi, .tmp2q, .memad(.src0q, .add_size, -16), .tmp2q, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp2q, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92677,25 +93721,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .bzhi, .tmp2q, .memad(.src0q, .add_size, -8), .tmp2q, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp2q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92708,26 +93750,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92740,25 +93780,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp0q, .memad(.src0q, .add_size, -8), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92768,24 +93805,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, .vp_b, .add, .dst0x, .dst0x, .lea(.tmp0x), ._ },
- .{ ._, .vp_, .xor, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -92796,22 +93834,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92821,25 +93864,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, .p_b, .add, .dst0x, .lea(.tmp0x), ._, ._ },
- .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
+ .required_features = .{ .bmi2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -92849,22 +93895,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -92874,22 +93925,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92899,24 +93955,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, .vp_b, .add, .dst0y, .dst0y, .lea(.tmp0y), ._ },
- .{ ._, .vp_, .xor, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -92927,25 +93984,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -92955,30 +94017,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .vp_b, .add, .tmp3y, .tmp3y, .tmp2y, ._ },
- .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp2y, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } }, .any },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -92990,28 +94047,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp2y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -93021,30 +94078,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp3x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .vp_b, .add, .tmp3x, .tmp3x, .tmp2x, ._ },
- .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp2x, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._l, .sa, .tmp2b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp2b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -93056,28 +94110,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._l, .sa, .tmp2b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp2b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any },
+ .required_features = .{ .bmi2, .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -93087,31 +94143,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ },
- .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_b, .add, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, .p_, .xor, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp3d, .memi(.src0d, .tmp1), .tmp2d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93123,27 +94175,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, .p_, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp3d, .memi(.src0d, .tmp1), .tmp2d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -93155,26 +94207,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, ._ps, .mova, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._, .@"and", .tmp2b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 1 } }, .any },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93188,22 +94239,36 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .neg, .tmp1b, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._, .@"and", .tmp2b, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_signed_int = .{ .of = .byte, .is = 1 } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .sll, .dst0x, .src0x, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_w, .sra, .dst0x, .dst0x, .uia(16, .dst0, .sub_bit_size), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
@@ -93214,27 +94279,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .si(1), ._, ._ },
- .{ ._, ._, .neg, .tmp1b, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_w, .sll, .dst0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, .p_w, .sra, .dst0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
@@ -93245,26 +94316,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
@@ -93275,27 +94341,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .sll, .dst0y, .src0y, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_w, .sra, .dst0y, .dst0y, .uia(16, .dst0, .sub_bit_size), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
@@ -93306,25 +94378,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -93339,24 +94407,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .sll, .tmp1y, .tmp1y, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_w, .sra, .tmp1y, .tmp1y, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -93368,21 +94437,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp2y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -93397,23 +94469,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .sll, .tmp1x, .tmp1x, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_w, .sra, .tmp1x, .tmp1x, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -93425,23 +94499,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -93456,25 +94531,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .sll, .tmp1x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, .p_w, .sra, .tmp1x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -93486,24 +94561,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -93515,23 +94593,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0b, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93546,20 +94625,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93574,21 +94653,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93603,22 +94684,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1w, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93633,24 +94713,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -93664,23 +94742,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -93694,23 +94770,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
+ .required_features = .{ .bmi2, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93724,21 +94801,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
+ .required_features = .{ .fast_imm16, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93753,22 +94831,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1w, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93783,20 +94860,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93811,21 +94889,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93840,23 +94917,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93870,24 +94948,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, .slow_incdec, null, null },
+ .required_features = .{ .fast_imm16, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -93901,23 +94978,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1w, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -93931,22 +95007,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93962,20 +95037,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -93991,22 +95065,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94020,23 +95095,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
- }, .{
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .byte, .is = 8 } }, .any },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -94050,24 +95125,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1w, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -94081,25 +95154,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._l, .sa, .tmp2b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp2b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94115,25 +95185,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
.{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._l, .sa, .tmp2b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp2b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
.{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -94147,17 +95214,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp3d, .memi(.src0d, .tmp1), .tmp2d, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._l, .sa, .tmp2d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
.{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .bmi2, null, null, null },
.src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -94165,7 +95233,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94181,22 +95249,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
.{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
.{ .@"0:", ._, .bzhi, .tmp3d, .memi(.src0d, .tmp1), .tmp2d, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
.{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .slow_incdec, null, null, null },
+ .required_features = .{ .fast_imm16, null, null, null },
.src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94212,22 +95280,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
.{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .@"and", .tmp2b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .@"and", .tmp2w, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
.{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94243,28 +95311,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
.{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .@"and", .tmp2b, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ },
+ .{ ._, ._, .@"and", .tmp2d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
.{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_w, .sll, .dst0x, .src0x, .uia(16, .dst0, .sub_bit_size), ._ },
- .{ ._, .vp_w, .sra, .dst0x, .dst0x, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_d, .sll, .dst0x, .src0x, .uia(32, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_d, .sra, .dst0x, .dst0x, .uia(32, .dst0, .sub_bit_size), ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_sse, .none, .none } },
},
@@ -94288,20 +95356,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
.dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_w, .sll, .dst0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, .p_w, .sra, .dst0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, .p_d, .sll, .dst0x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, .p_d, .sra, .dst0x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
@@ -94325,8 +95393,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
},
@@ -94350,20 +95418,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_w, .sll, .dst0y, .src0y, .uia(16, .dst0, .sub_bit_size), ._ },
- .{ ._, .vp_w, .sra, .dst0y, .dst0y, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_d, .sll, .dst0y, .src0y, .uia(32, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_d, .sra, .dst0y, .dst0y, .uia(32, .dst0, .sub_bit_size), ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_sse, .none, .none } },
},
@@ -94387,14 +95455,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -94410,23 +95478,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_w, .sll, .tmp1y, .tmp1y, .uia(16, .dst0, .sub_bit_size), ._ },
- .{ ._, .vp_w, .sra, .tmp1y, .tmp1y, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_d, .sll, .tmp1y, .tmp1y, .uia(32, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_d, .sra, .tmp1y, .tmp1y, .uia(32, .dst0, .sub_bit_size), ._ },
.{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
.{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
@@ -94449,14 +95517,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -94472,23 +95540,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_w, .sll, .tmp1x, .tmp1x, .uia(16, .dst0, .sub_bit_size), ._ },
- .{ ._, .vp_w, .sra, .tmp1x, .tmp1x, .uia(16, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_d, .sll, .tmp1x, .tmp1x, .uia(32, .dst0, .sub_bit_size), ._ },
+ .{ ._, .vp_d, .sra, .tmp1x, .tmp1x, .uia(32, .dst0, .sub_bit_size), ._ },
.{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
.{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
@@ -94511,14 +95579,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -94534,23 +95602,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_w, .sll, .tmp1x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, .p_w, .sra, .tmp1x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, .p_d, .sll, .tmp1x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, .p_d, .sra, .tmp1x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
.{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
.{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
@@ -94574,15 +95642,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
.{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
@@ -94605,14 +95673,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94627,20 +95695,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94655,24 +95723,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
.{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94686,21 +95754,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1w, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memia(.src0d, .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94715,21 +95783,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94745,19 +95813,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94775,21 +95843,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
.{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94805,20 +95873,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
.{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94834,20 +95901,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1w, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94862,21 +95929,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94892,19 +95958,51 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94920,23 +96018,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -94950,22 +96046,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -94980,22 +96074,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1w, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95009,21 +96105,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), .tmp1d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95039,19 +96135,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -95059,6 +96158,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
},
@@ -95066,25 +96193,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._l, .sa, .tmp2d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp2d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95097,23 +96226,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp3d, .memi(.src0d, .tmp1), .tmp2d, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95127,26 +96257,248 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1w, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
+ .{ ._, ._, .@"and", .tmp2d, .sa(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_q, .add, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, .vp_, .xor, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .p_q, .add, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_q, .add, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, .vp_, .xor, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
.unused,
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_q, .add, .tmp3y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp2y, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -95155,24 +96507,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp2y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .word, .is = 16 } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp3x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .vp_q, .add, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -95184,27 +96573,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .vp_, .@"and", .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_q, .add, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -95214,28 +96640,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._l, .sa, .tmp2d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp2d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, .p_, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
.unused,
.unused,
.unused,
@@ -95247,26 +96672,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp3d, .memi(.src0d, .tmp1), .tmp2d, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .fast_imm16, null, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 64 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -95280,24 +96705,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .@"and", .tmp2w, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -95311,36 +96734,53 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .@"and", .tmp2d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .vp_d, .sll, .dst0x, .src0x, .uia(32, .dst0, .sub_bit_size), ._ },
- .{ ._, .vp_d, .sra, .dst0x, .dst0x, .uia(32, .dst0, .sub_bit_size), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), .tmp1q, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95351,33 +96791,55 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 64 } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .p_d, .sll, .dst0x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, .p_d, .sra, .dst0x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95388,22 +96850,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95413,33 +96881,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .vp_d, .sll, .dst0y, .src0y, .uia(32, .dst0, .sub_bit_size), ._ },
- .{ ._, .vp_d, .sra, .dst0y, .dst0y, .uia(32, .dst0, .sub_bit_size), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95450,21 +96911,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 64 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95479,25 +96945,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_d, .sll, .tmp1y, .tmp1y, .uia(32, .dst0, .sub_bit_size), ._ },
- .{ ._, .vp_d, .sra, .tmp1y, .tmp1y, .uia(32, .dst0, .sub_bit_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -95509,25 +96973,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp2y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._l, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95541,25 +97005,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_d, .sll, .tmp1x, .tmp1x, .uia(32, .dst0, .sub_bit_size), ._ },
- .{ ._, .vp_d, .sra, .tmp1x, .tmp1x, .uia(32, .dst0, .sub_bit_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp2q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -95571,25 +97034,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 64 } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95603,25 +97065,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_d, .sll, .tmp1x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, .p_d, .sra, .tmp1x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp1), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
.unused,
.unused,
.unused,
@@ -95633,27 +97095,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, .p_, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp1), ._, ._ },
+ .{ ._, ._l, .sa, .tmp2q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .tmp2q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95665,25 +97128,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, ._ps, .mova, .tmp1x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ .@"0:", ._, .bzhi, .tmp3q, .memi(.src0q, .tmp1), .tmp2q, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -95697,22 +97161,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp2q, .memi(.src0q, .tmp1), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -95724,26 +97192,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sa(.dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -95755,24 +97224,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memia(.src0d, .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sa(.dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -95784,24 +97256,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp2q, 8), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -95813,23 +97293,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp2q, 8), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -95841,26 +97330,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._l, .sa, .tmp3q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp2q, 8), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -95872,25 +97369,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._l, .sa, .tmp3q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp2q, 8), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -95901,25 +97408,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._l, .sa, .tmp4q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp4q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_signed_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -95930,24 +97444,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._l, .sa, .tmp4q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp4q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -95958,27 +97480,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -95989,26 +97514,68 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp4d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .bzhi, .tmp4q, .lea(.tmp1q), .tmp3q, ._ },
+ .{ ._, ._, .mov, .lea(.tmp2q), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp2q, 8), .si(0), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .unused,
.unused,
.unused,
.unused,
@@ -96018,27 +97585,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp4d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .bzhi, .tmp4q, .lea(.tmp1q), .tmp3q, ._ },
+ .{ ._, ._, .mov, .lea(.tmp2q), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp2q, 8), .si(0), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .yword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
+ .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .bzhi, .tmp5q, .lea(.tmp1q), .tmp3q, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -96047,23 +97657,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .bzhi, .tmp5q, .lea(.tmp1q), .tmp3q, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .yword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -96075,26 +97692,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp3q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp2q, 8), .si(0), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .yword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -96106,25 +97729,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), .tmp1d, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp3q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .lead(.tmp2q, 8), .si(0), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .yword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -96135,25 +97766,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .@"and", .tmp1d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp4q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .dword, .is = 32 } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -96161,658 +97799,659 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4q, .ua(.dst0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp4q, .lea(.tmp1q), ._, ._ },
+ .{ ._, ._sq, .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ } }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ @tagName(air_tag),
+ ty_op.ty.toType().fmt(pt),
+ cg.typeOf(ty_op.operand).fmt(pt),
+ ops[0].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .optional_payload => if (use_old) try cg.airOptionalPayload(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ const pl = if (!hack_around_sema_opv_bugs or ty_op.ty.toType().hasRuntimeBitsIgnoreComptime(zcu))
+ try ops[0].read(ty_op.ty.toType(), .{}, cg)
+ else
+ try cg.tempInit(ty_op.ty.toType(), .none);
+ try pl.finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .optional_payload_ptr => if (use_old) try cg.airOptionalPayloadPtr(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .optional_payload_ptr_set => if (use_old) try cg.airOptionalPayloadPtrSet(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const opt_ty = cg.typeOf(ty_op.operand).childType(zcu);
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ if (!opt_ty.optionalReprIsPayload(zcu)) {
+ const opt_pl_ty = opt_ty.optionalChild(zcu);
+ const opt_pl_abi_size: i32 = @intCast(opt_pl_ty.abiSize(zcu));
+ try ops[0].toOffset(opt_pl_abi_size, cg);
+ var has_value = try cg.tempInit(.bool, .{ .immediate = 1 });
+ try ops[0].store(&has_value, .{}, cg);
+ try has_value.die(cg);
+ try ops[0].toOffset(-opt_pl_abi_size, cg);
+ }
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .wrap_optional => if (use_old) try cg.airWrapOptional(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const opt_ty = ty_op.ty.toType();
+ const opt_pl_ty = cg.typeOf(ty_op.operand);
+ const opt_pl_abi_size: u31 = @intCast(opt_pl_ty.abiSize(zcu));
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ var opt = try cg.tempAlloc(opt_ty);
+ try opt.write(&ops[0], .{}, cg);
+ if (!opt_ty.optionalReprIsPayload(zcu)) {
+ var has_value = try cg.tempInit(.bool, .{ .immediate = 1 });
+ try opt.write(&has_value, .{ .disp = opt_pl_abi_size }, cg);
+ try has_value.die(cg);
+ }
+ try opt.finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .unwrap_errunion_payload => if (use_old) try cg.airUnwrapErrUnionPayload(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const eu_pl_ty = ty_op.ty.toType();
+ const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ const pl = if (!hack_around_sema_opv_bugs or eu_pl_ty.hasRuntimeBitsIgnoreComptime(zcu))
+ try ops[0].read(eu_pl_ty, .{ .disp = eu_pl_off }, cg)
+ else
+ try cg.tempInit(eu_pl_ty, .none);
+ try pl.finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .unwrap_errunion_err => if (use_old) try cg.airUnwrapErrUnionErr(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const eu_ty = cg.typeOf(ty_op.operand);
+ const eu_err_ty = ty_op.ty.toType();
+ const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
+ const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ const err = try ops[0].read(eu_err_ty, .{ .disp = eu_err_off }, cg);
+ try err.finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .unwrap_errunion_payload_ptr => if (use_old) try cg.airUnwrapErrUnionPayloadPtr(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
+ const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
+ const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].toOffset(eu_pl_off, cg);
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .unwrap_errunion_err_ptr => if (use_old) try cg.airUnwrapErrUnionErrPtr(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
+ const eu_err_ty = ty_op.ty.toType();
+ const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
+ const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].toOffset(eu_err_off, cg);
+ const err = try ops[0].load(eu_err_ty, .{}, cg);
+ try err.finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .errunion_payload_ptr_set => if (use_old) try cg.airErrUnionPayloadPtrSet(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
+ const eu_err_ty = eu_ty.errorUnionSet(zcu);
+ const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
+ const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
+ const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].toOffset(eu_err_off, cg);
+ var err = try cg.tempInit(eu_err_ty, .{ .immediate = 0 });
+ try ops[0].store(&err, .{}, cg);
+ try err.die(cg);
+ try ops[0].toOffset(eu_pl_off - eu_err_off, cg);
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .wrap_errunion_payload => if (use_old) try cg.airWrapErrUnionPayload(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const eu_ty = ty_op.ty.toType();
+ const eu_err_ty = eu_ty.errorUnionSet(zcu);
+ const eu_pl_ty = cg.typeOf(ty_op.operand);
+ const eu_err_off: u31 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
+ const eu_pl_off: u31 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ var eu = try cg.tempAlloc(eu_ty);
+ try eu.write(&ops[0], .{ .disp = eu_pl_off }, cg);
+ var err = try cg.tempInit(eu_err_ty, .{ .immediate = 0 });
+ try eu.write(&err, .{ .disp = eu_err_off }, cg);
+ try err.die(cg);
+ try eu.finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .wrap_errunion_err => if (use_old) try cg.airWrapErrUnionErr(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const eu_ty = ty_op.ty.toType();
+ const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
+ const eu_err_off: u31 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ var eu = try cg.tempAlloc(eu_ty);
+ try eu.write(&ops[0], .{ .disp = eu_err_off }, cg);
+ try eu.finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .struct_field_ptr => if (use_old) try cg.airStructFieldPtr(inst) else {
+ const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
+ const extra = cg.air.extraData(Air.StructField, ty_pl.payload).data;
+ var ops = try cg.tempsFromOperands(inst, .{extra.struct_operand});
+ try ops[0].toOffset(cg.fieldOffset(
+ cg.typeOf(extra.struct_operand),
+ ty_pl.ty.toType(),
+ extra.field_index,
+ ), cg);
+ try ops[0].finish(inst, &.{extra.struct_operand}, &ops, cg);
+ },
+ .struct_field_ptr_index_0,
+ .struct_field_ptr_index_1,
+ .struct_field_ptr_index_2,
+ .struct_field_ptr_index_3,
+ => |air_tag| if (use_old) try cg.airStructFieldPtrIndex(inst, switch (air_tag) {
+ else => unreachable,
+ .struct_field_ptr_index_0 => 0,
+ .struct_field_ptr_index_1 => 1,
+ .struct_field_ptr_index_2 => 2,
+ .struct_field_ptr_index_3 => 3,
+ }) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].toOffset(cg.fieldOffset(
+ cg.typeOf(ty_op.operand),
+ ty_op.ty.toType(),
+ switch (air_tag) {
+ else => unreachable,
+ .struct_field_ptr_index_0 => 0,
+ .struct_field_ptr_index_1 => 1,
+ .struct_field_ptr_index_2 => 2,
+ .struct_field_ptr_index_3 => 3,
+ },
+ ), cg);
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .struct_field_val => if (use_old) try cg.airStructFieldVal(inst) else fallback: {
+ const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
+ const extra = cg.air.extraData(Air.StructField, ty_pl.payload).data;
+ const agg_ty = cg.typeOf(extra.struct_operand);
+ const field_ty = ty_pl.ty.toType();
+ const field_off: u31 = switch (agg_ty.containerLayout(zcu)) {
+ .auto, .@"extern" => @intCast(agg_ty.structFieldOffset(extra.field_index, zcu)),
+ .@"packed" => break :fallback try cg.airStructFieldVal(inst),
+ };
+ var ops = try cg.tempsFromOperands(inst, .{extra.struct_operand});
+ var res = if (!hack_around_sema_opv_bugs or field_ty.hasRuntimeBitsIgnoreComptime(zcu))
+ try ops[0].read(field_ty, .{ .disp = field_off }, cg)
+ else
+ try cg.tempInit(field_ty, .none);
+ try res.finish(inst, &.{extra.struct_operand}, &ops, cg);
+ },
+ .set_union_tag => if (use_old) try cg.airSetUnionTag(inst) else {
+ const bin_op = air_datas[@intFromEnum(inst)].bin_op;
+ const union_ty = cg.typeOf(bin_op.lhs).childType(zcu);
+ const union_layout = union_ty.unionGetLayout(zcu);
+ var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
+ if (!hack_around_sema_opv_bugs or union_layout.tag_size > 0) try ops[0].store(&ops[1], .{
+ .disp = @intCast(union_layout.tagOffset()),
+ }, cg);
+ const res = try cg.tempInit(.void, .none);
+ try res.finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ },
+ .get_union_tag => if (use_old) try cg.airGetUnionTag(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ const union_ty = cg.typeOf(ty_op.operand);
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ const union_layout = union_ty.unionGetLayout(zcu);
+ assert(union_layout.tag_size > 0);
+ const res = try ops[0].read(ty_op.ty.toType(), .{
+ .disp = @intCast(union_layout.tagOffset()),
+ }, cg);
+ try res.finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .slice => if (use_old) try cg.airSlice(inst) else {
+ const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
+ const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
+ var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
+ try ops[0].toPair(&ops[1], cg);
+ try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ },
+ .slice_len => if (use_old) try cg.airSliceLen(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].toSliceLen(cg);
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .slice_ptr => if (use_old) try cg.airSlicePtr(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].toSlicePtr(cg);
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .ptr_slice_len_ptr => if (use_old) try cg.airPtrSliceLenPtr(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].toOffset(8, cg);
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .ptr_slice_ptr_ptr => if (use_old) try cg.airPtrSlicePtrPtr(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ try ops[0].toOffset(0, cg);
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .array_elem_val => if (use_old) try cg.airArrayElemVal(inst) else {
+ const bin_op = air_datas[@intFromEnum(inst)].bin_op;
+ const array_ty = cg.typeOf(bin_op.lhs);
+ const res_ty = array_ty.elemType2(zcu);
+ var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
+ var res: [1]Temp = undefined;
+ cg.select(&res, &.{res_ty}, &ops, comptime &.{ .{
+ .src_constraints = .{ .{ .bool_vec = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_gpr, .imm32, .none } },
+ },
+ .dst_temps = .{ .{ .cc = .c }, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .bt, .src0d, .ua(.none, .add_src1_rem_32), ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .bool_vec = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .to_gpr, .none } },
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .cc = .c }, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._l, .sa, .tmp2d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp2d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .bt, .src0d, .src1d, ._, ._ },
} },
}, .{
- .required_features = .{ .bmi2, null, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .bool_vec = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .imm32, .none } },
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .cc = .c }, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp3d, .memi(.src0d, .tmp1), .tmp2d, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .bt, .src0q, .ua(.none, .add_src1_rem_64), ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .bool_vec = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .to_gpr, .none } },
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .cc = .c }, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ },
- .{ ._, ._, .@"and", .tmp2d, .sa(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .bt, .src0q, .src1q, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .any_bool_vec, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .imm32, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .{ .cc = .c }, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, .vp_q, .add, .dst0x, .dst0x, .lea(.tmp0x), ._ },
- .{ ._, .vp_, .xor, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .bt, .mema(.src0d, .add_src1_div_8_down_4), .ua(.none, .add_src1_rem_32), ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .any_bool_vec, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .to_gpr, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .{ .cc = .c }, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .bt, .src0d, .src1d, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .simm32, .none } },
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, .p_q, .add, .dst0x, .lea(.tmp0x), ._, ._ },
- .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .mema(.src0b, .add_src0_elem_size_mul_src1), ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .to_gpr, .none } },
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .memi(.src0b, .src1), ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .simm32, .none } },
},
- .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .mema(.src0w, .add_src0_elem_size_mul_src1), ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .to_gpr, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, .vp_q, .add, .dst0y, .dst0y, .lea(.tmp0y), ._ },
- .{ ._, .vp_, .xor, .dst0y, .dst0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .movzx, .dst0d, .memsi(.src0w, .@"2", .src1), ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .simm32, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ },
+ .{ ._, ._, .mov, .dst0d, .mema(.src0d, .add_src0_elem_size_mul_src1), ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .to_gpr, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .vp_q, .add, .tmp3y, .tmp3y, .tmp2y, ._ },
- .{ ._, .vp_, .xor, .tmp3y, .tmp3y, .tmp2y, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp3y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0d, .memsi(.src0d, .@"4", .src1), ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .simm32, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1y, .lea(.tmp0y), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp2y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .mema(.src0q, .add_src0_elem_size_mul_src1), ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .dst_constraints = .{ .{ .int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_mem, .to_gpr, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp3x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .vp_q, .add, .tmp3x, .tmp3x, .tmp2x, ._ },
- .{ ._, .vp_, .xor, .tmp3x, .tmp3x, .tmp2x, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .memsi(.src0q, .@"8", .src1), ._, ._ },
} },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ } }) catch |err| switch (err) {
+ error.SelectFailed => {
+ const elem_size = res_ty.abiSize(zcu);
+ const base = try cg.tempAllocReg(.usize, abi.RegisterClass.gp);
+ while (try ops[0].toBase(false, cg) or
+ try ops[1].toRegClass(true, .general_purpose, cg))
+ {}
+ const base_reg = base.tracking(cg).short.register.to64();
+ const rhs_reg = ops[1].tracking(cg).short.register.to64();
+ if (!std.math.isPowerOfTwo(elem_size)) {
+ try cg.spillEflagsIfOccupied();
+ try cg.asmRegisterRegisterImmediate(
+ .{ .i_, .mul },
+ rhs_reg,
+ rhs_reg,
+ .u(elem_size),
+ );
+ try cg.asmRegisterMemory(
+ .{ ._, .lea },
+ base_reg,
+ try ops[0].tracking(cg).short.mem(cg, .{ .index = rhs_reg }),
+ );
+ } else if (elem_size > 8) {
+ try cg.spillEflagsIfOccupied();
+ try cg.asmRegisterImmediate(
+ .{ ._l, .sh },
+ rhs_reg,
+ .u(std.math.log2_int(u64, elem_size)),
+ );
+ try cg.asmRegisterMemory(
+ .{ ._, .lea },
+ base_reg,
+ try ops[0].tracking(cg).short.mem(cg, .{ .index = rhs_reg }),
+ );
+ } else try cg.asmRegisterMemory(
+ .{ ._, .lea },
+ base_reg,
+ try ops[0].tracking(cg).short.mem(cg, .{
+ .index = rhs_reg,
+ .scale = .fromFactor(@intCast(elem_size)),
+ }),
+ );
+ // Hack around Sema insanity: lhs could be an arbitrarily large comptime-known array
+ // which could easily get spilled by the upcoming `load`, which would infinite recurse
+ // since spilling an array requires the same operation that triggered the spill.
+ try ops[0].die(cg);
+ ops[0] = base;
+ res[0] = try ops[0].load(res_ty, .{}, cg);
},
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ else => |e| return e,
+ };
+ try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ },
+ .slice_elem_val, .ptr_elem_val => |air_tag| if (use_old) switch (air_tag) {
+ else => unreachable,
+ .slice_elem_val => try cg.airSliceElemVal(inst),
+ .ptr_elem_val => try cg.airPtrElemVal(inst),
+ } else {
+ const bin_op = air_datas[@intFromEnum(inst)].bin_op;
+ const res_ty = cg.typeOf(bin_op.lhs).elemType2(zcu);
+ var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
+ try ops[0].toSlicePtr(cg);
+ var res: [1]Temp = undefined;
+ if (!hack_around_sema_opv_bugs or res_ty.hasRuntimeBitsIgnoreComptime(zcu)) cg.select(&res, &.{res_ty}, &ops, comptime &.{ .{
+ .dst_constraints = .{ .{ .int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_gpr, .simm32, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .@"and", .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .leaa(.src0b, .add_src0_elem_size_mul_src1), ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .byte }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .{ .kind = .{ .smin_mem = .{ .ref = .dst0 } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .to_gpr, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp4), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp5), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ },
- .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_q, .add, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, .p_, .xor, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .leai(.src0b, .src1), ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .simm32, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp1x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, .p_, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .leaa(.src0w, .add_src0_elem_size_mul_src1), ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
- .{ .kind = .{ .umax_mem = .{ .ref = .dst0, .to_signedness = .unsigned } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .to_gpr, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
- .{ ._, ._ps, .mova, .tmp1x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .@"and", .tmp2x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp2x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .leasi(.src0w, .@"2", .src1), ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 64 } }, .any },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .simm32, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0d, .leaa(.src0d, .add_src0_elem_size_mul_src1), ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .to_gpr, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0d, .leasi(.src0d, .@"4", .src1), ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .simm32, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2q, .memia(.src0q, .tmp0, .add_unaligned_size), .tmp1q, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .leaa(.src0q, .add_src0_elem_size_mul_src1), ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_gpr, .to_gpr, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .leasi(.src0q, .@"8", .src1), ._, ._ },
} },
- }, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 64 } }, .any },
+ } }) catch |err| switch (err) {
+ error.SelectFailed => {
+ const elem_size = res_ty.abiSize(zcu);
+ while (true) for (&ops) |*op| {
+ if (try op.toRegClass(true, .general_purpose, cg)) break;
+ } else break;
+ const lhs_reg = ops[0].tracking(cg).short.register.to64();
+ const rhs_reg = ops[1].tracking(cg).short.register.to64();
+ if (!std.math.isPowerOfTwo(elem_size)) {
+ try cg.spillEflagsIfOccupied();
+ try cg.asmRegisterRegisterImmediate(
+ .{ .i_, .mul },
+ rhs_reg,
+ rhs_reg,
+ .u(elem_size),
+ );
+ try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
+ .base = .{ .reg = lhs_reg },
+ .mod = .{ .rm = .{ .index = rhs_reg } },
+ });
+ } else if (elem_size > 8) {
+ try cg.spillEflagsIfOccupied();
+ try cg.asmRegisterImmediate(
+ .{ ._l, .sh },
+ rhs_reg,
+ .u(std.math.log2_int(u64, elem_size)),
+ );
+ try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
+ .base = .{ .reg = lhs_reg },
+ .mod = .{ .rm = .{ .index = rhs_reg } },
+ });
+ } else try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
+ .base = .{ .reg = lhs_reg },
+ .mod = .{ .rm = .{
+ .index = rhs_reg,
+ .scale = .fromFactor(@intCast(elem_size)),
+ } },
+ });
+ res[0] = try ops[0].load(res_ty, .{}, cg);
+ },
+ else => |e| return e,
+ } else res[0] = try cg.tempInit(res_ty, .none);
+ try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ },
+ .slice_elem_ptr, .ptr_elem_ptr => |air_tag| if (use_old) switch (air_tag) {
+ else => unreachable,
+ .slice_elem_ptr => try cg.airSliceElemPtr(inst),
+ .ptr_elem_ptr => try cg.airPtrElemPtr(inst),
+ } else {
+ const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
+ const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
+ var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
+ try ops[0].toSlicePtr(cg);
+ const dst_ty = ty_pl.ty.toType();
+ if (dst_ty.ptrInfo(zcu).flags.vector_index == .none) zero_offset: {
+ const elem_size = dst_ty.childType(zcu).abiSize(zcu);
+ if (hack_around_sema_opv_bugs and elem_size == 0) break :zero_offset;
+ while (true) for (&ops) |*op| {
+ if (try op.toRegClass(true, .general_purpose, cg)) break;
+ } else break;
+ const lhs_reg = ops[0].tracking(cg).short.register.to64();
+ const rhs_reg = ops[1].tracking(cg).short.register.to64();
+ if (!std.math.isPowerOfTwo(elem_size)) {
+ try cg.spillEflagsIfOccupied();
+ try cg.asmRegisterRegisterImmediate(
+ .{ .i_, .mul },
+ rhs_reg,
+ rhs_reg,
+ .u(elem_size),
+ );
+ try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
+ .base = .{ .reg = lhs_reg },
+ .mod = .{ .rm = .{ .index = rhs_reg } },
+ });
+ } else if (elem_size > 8) {
+ try cg.spillEflagsIfOccupied();
+ try cg.asmRegisterImmediate(
+ .{ ._l, .sh },
+ rhs_reg,
+ .u(std.math.log2_int(u64, elem_size)),
+ );
+ try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
+ .base = .{ .reg = lhs_reg },
+ .mod = .{ .rm = .{ .index = rhs_reg } },
+ });
+ } else try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
+ .base = .{ .reg = lhs_reg },
+ .mod = .{ .rm = .{
+ .index = rhs_reg,
+ .scale = .fromFactor(@intCast(elem_size)),
+ } },
+ });
+ }
+ try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ },
+ .array_to_slice => if (use_old) try cg.airArrayToSlice(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ var len = try cg.tempInit(.usize, .{
+ .immediate = cg.typeOf(ty_op.operand).childType(zcu).arrayLen(zcu),
+ });
+ try ops[0].toPair(&len, cg);
+ try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .int_from_float, .int_from_float_optimized => |air_tag| if (use_old) try cg.airIntFromFloat(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ var res: [1]Temp = undefined;
+ cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -96823,57 +98462,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .dst0d, .tmp0d, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
.unused,
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -96883,26 +98487,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .dst0q, .tmp0d, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -96913,26 +98512,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .dst0d, .tmp0d, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .yword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 64 } }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -96946,22 +98540,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .tmp1q, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp1q, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .yword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -96973,28 +98567,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._l, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .tmp1q, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memd(.dst0q, 8), .si(0), ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .yword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -97006,25 +98596,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp2q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .tmp1q, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.dst0, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .yword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
+ .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -97036,24 +98627,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .tmp1q, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.dst0, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_exact_int = .{ .of = .qword, .is = 64 } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97063,28 +98656,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg = .eax }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp1), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97094,31 +98682,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg = .eax }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp1), ._, ._ },
- .{ ._, ._l, .sa, .tmp2q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._r, .sa, .tmp2q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97127,29 +98708,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg = .rax }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ .@"0:", ._, .bzhi, .tmp3q, .memi(.src0q, .tmp1), .tmp2q, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97159,30 +98734,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg = .rax }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp2q, .memi(.src0q, .tmp1), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
- .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97191,30 +98760,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sa(.dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97223,28 +98786,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sa(.dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
@@ -97256,32 +98813,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
- .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .lead(.tmp2q, 8), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.dst0, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .word }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
@@ -97293,34 +98844,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
- .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .lead(.tmp2q, 8), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.dst0, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97329,37 +98874,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._l, .sa, .tmp3q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._r, .sa, .tmp3q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
- .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .lead(.tmp2q, 8), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp0x), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -97369,37 +98902,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._l, .sa, .tmp3q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._r, .sa, .tmp3q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
- .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .lead(.tmp2q, 8), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp3x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .vp_b, .shuf, .tmp3x, .tmp3x, .tmp2x, ._ },
+ .{ ._, .v_d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -97408,34 +98935,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._l, .sa, .tmp4q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._r, .sa, .tmp4q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_signed_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -97444,34 +98967,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._l, .sa, .tmp4q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._r, .sa, .tmp4q, .uia(64, .dst0, .sub_bit_size_rem_64), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -97480,32 +98999,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -97514,32 +99031,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
.unused,
.unused,
.unused,
@@ -97548,35 +99063,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp4d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .bzhi, .tmp4q, .lea(.tmp1q), .tmp3q, ._ },
- .{ ._, ._, .mov, .lea(.tmp2q), .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .lead(.tmp2q, 8), .si(0), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
.unused,
.unused,
.unused,
@@ -97585,71 +99096,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp4d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .bzhi, .tmp4q, .lea(.tmp1q), .tmp3q, ._ },
- .{ ._, ._, .mov, .lea(.tmp2q), .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .lead(.tmp2q, 8), .si(0), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .vp_w, .ackssd, .dst0x, .dst0x, .dst0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .bzhi, .tmp5q, .lea(.tmp1q), .tmp3q, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .vp_w, .ackusd, .dst0x, .dst0x, .dst0x, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .bmi2, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97657,32 +99156,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size_rem_64), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .bzhi, .tmp5q, .lea(.tmp1q), .tmp3q, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .vp_w, .ackssd, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -97692,34 +99186,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp3q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .lead(.tmp2q, 8), .si(0), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .vp_w, .ackusd, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -97729,35 +99217,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp3d, .sia(-2, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp3q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._, .mov, .lea(.tmp2q), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .lead(.tmp2q, 8), .si(0), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(16, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .lead(.tmp2, 16), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -97766,858 +99249,1000 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp4q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .any_scalar_unsigned_int, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
- .{ .@"0:", ._, .mov, .tmp4d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp4q, .ua(.dst0, .add_umax), ._, ._ },
- .{ ._, ._, .@"and", .tmp4q, .lea(.tmp1q), ._, ._ },
- .{ ._, ._sq, .sto, ._, ._, ._, ._ },
- .{ ._, ._, .add, .tmp1p, .sia2(8, .src0, .dst0, .add_delta_elem_size), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- } },
- } }) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
- @tagName(air_tag),
- ty_op.ty.toType().fmt(pt),
- cg.typeOf(ty_op.operand).fmt(pt),
- ops[0].tracking(cg),
- }),
- else => |e| return e,
- };
- try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .optional_payload => if (use_old) try cg.airOptionalPayload(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- const pl = if (!hack_around_sema_opv_bugs or ty_op.ty.toType().hasRuntimeBitsIgnoreComptime(zcu))
- try ops[0].read(ty_op.ty.toType(), .{}, cg)
- else
- try cg.tempInit(ty_op.ty.toType(), .none);
- try pl.finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .optional_payload_ptr => if (use_old) try cg.airOptionalPayloadPtr(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .optional_payload_ptr_set => if (use_old) try cg.airOptionalPayloadPtrSet(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const opt_ty = cg.typeOf(ty_op.operand).childType(zcu);
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- if (!opt_ty.optionalReprIsPayload(zcu)) {
- const opt_pl_ty = opt_ty.optionalChild(zcu);
- const opt_pl_abi_size: i32 = @intCast(opt_pl_ty.abiSize(zcu));
- try ops[0].toOffset(opt_pl_abi_size, cg);
- var has_value = try cg.tempInit(.bool, .{ .immediate = 1 });
- try ops[0].store(&has_value, .{}, cg);
- try has_value.die(cg);
- try ops[0].toOffset(-opt_pl_abi_size, cg);
- }
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .wrap_optional => if (use_old) try cg.airWrapOptional(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const opt_ty = ty_op.ty.toType();
- const opt_pl_ty = cg.typeOf(ty_op.operand);
- const opt_pl_abi_size: u31 = @intCast(opt_pl_ty.abiSize(zcu));
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- var opt = try cg.tempAlloc(opt_ty);
- try opt.write(&ops[0], .{}, cg);
- if (!opt_ty.optionalReprIsPayload(zcu)) {
- var has_value = try cg.tempInit(.bool, .{ .immediate = 1 });
- try opt.write(&has_value, .{ .disp = opt_pl_abi_size }, cg);
- try has_value.die(cg);
- }
- try opt.finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .unwrap_errunion_payload => if (use_old) try cg.airUnwrapErrUnionPayload(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const eu_pl_ty = ty_op.ty.toType();
- const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- const pl = if (!hack_around_sema_opv_bugs or eu_pl_ty.hasRuntimeBitsIgnoreComptime(zcu))
- try ops[0].read(eu_pl_ty, .{ .disp = eu_pl_off }, cg)
- else
- try cg.tempInit(eu_pl_ty, .none);
- try pl.finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .unwrap_errunion_err => if (use_old) try cg.airUnwrapErrUnionErr(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const eu_ty = cg.typeOf(ty_op.operand);
- const eu_err_ty = ty_op.ty.toType();
- const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
- const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- const err = try ops[0].read(eu_err_ty, .{ .disp = eu_err_off }, cg);
- try err.finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .unwrap_errunion_payload_ptr => if (use_old) try cg.airUnwrapErrUnionPayloadPtr(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
- const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
- const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].toOffset(eu_pl_off, cg);
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .unwrap_errunion_err_ptr => if (use_old) try cg.airUnwrapErrUnionErrPtr(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
- const eu_err_ty = ty_op.ty.toType();
- const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
- const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].toOffset(eu_err_off, cg);
- const err = try ops[0].load(eu_err_ty, .{}, cg);
- try err.finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .errunion_payload_ptr_set => if (use_old) try cg.airErrUnionPayloadPtrSet(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const eu_ty = cg.typeOf(ty_op.operand).childType(zcu);
- const eu_err_ty = eu_ty.errorUnionSet(zcu);
- const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
- const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
- const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].toOffset(eu_err_off, cg);
- var err = try cg.tempInit(eu_err_ty, .{ .immediate = 0 });
- try ops[0].store(&err, .{}, cg);
- try err.die(cg);
- try ops[0].toOffset(eu_pl_off - eu_err_off, cg);
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .wrap_errunion_payload => if (use_old) try cg.airWrapErrUnionPayload(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const eu_ty = ty_op.ty.toType();
- const eu_err_ty = eu_ty.errorUnionSet(zcu);
- const eu_pl_ty = cg.typeOf(ty_op.operand);
- const eu_err_off: u31 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
- const eu_pl_off: u31 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- var eu = try cg.tempAlloc(eu_ty);
- try eu.write(&ops[0], .{ .disp = eu_pl_off }, cg);
- var err = try cg.tempInit(eu_err_ty, .{ .immediate = 0 });
- try eu.write(&err, .{ .disp = eu_err_off }, cg);
- try err.die(cg);
- try eu.finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .wrap_errunion_err => if (use_old) try cg.airWrapErrUnionErr(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const eu_ty = ty_op.ty.toType();
- const eu_pl_ty = eu_ty.errorUnionPayload(zcu);
- const eu_err_off: u31 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- var eu = try cg.tempAlloc(eu_ty);
- try eu.write(&ops[0], .{ .disp = eu_err_off }, cg);
- try eu.finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .struct_field_ptr => if (use_old) try cg.airStructFieldPtr(inst) else {
- const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
- const extra = cg.air.extraData(Air.StructField, ty_pl.payload).data;
- var ops = try cg.tempsFromOperands(inst, .{extra.struct_operand});
- try ops[0].toOffset(cg.fieldOffset(
- cg.typeOf(extra.struct_operand),
- ty_pl.ty.toType(),
- extra.field_index,
- ), cg);
- try ops[0].finish(inst, &.{extra.struct_operand}, &ops, cg);
- },
- .struct_field_ptr_index_0,
- .struct_field_ptr_index_1,
- .struct_field_ptr_index_2,
- .struct_field_ptr_index_3,
- => |air_tag| if (use_old) try cg.airStructFieldPtrIndex(inst, switch (air_tag) {
- else => unreachable,
- .struct_field_ptr_index_0 => 0,
- .struct_field_ptr_index_1 => 1,
- .struct_field_ptr_index_2 => 2,
- .struct_field_ptr_index_3 => 3,
- }) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].toOffset(cg.fieldOffset(
- cg.typeOf(ty_op.operand),
- ty_op.ty.toType(),
- switch (air_tag) {
- else => unreachable,
- .struct_field_ptr_index_0 => 0,
- .struct_field_ptr_index_1 => 1,
- .struct_field_ptr_index_2 => 2,
- .struct_field_ptr_index_3 => 3,
- },
- ), cg);
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .struct_field_val => if (use_old) try cg.airStructFieldVal(inst) else fallback: {
- const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
- const extra = cg.air.extraData(Air.StructField, ty_pl.payload).data;
- const agg_ty = cg.typeOf(extra.struct_operand);
- const field_ty = ty_pl.ty.toType();
- const field_off: u31 = switch (agg_ty.containerLayout(zcu)) {
- .auto, .@"extern" => @intCast(agg_ty.structFieldOffset(extra.field_index, zcu)),
- .@"packed" => break :fallback try cg.airStructFieldVal(inst),
- };
- var ops = try cg.tempsFromOperands(inst, .{extra.struct_operand});
- var res = if (!hack_around_sema_opv_bugs or field_ty.hasRuntimeBitsIgnoreComptime(zcu))
- try ops[0].read(field_ty, .{ .disp = field_off }, cg)
- else
- try cg.tempInit(field_ty, .none);
- try res.finish(inst, &.{extra.struct_operand}, &ops, cg);
- },
- .set_union_tag => if (use_old) try cg.airSetUnionTag(inst) else {
- const bin_op = air_datas[@intFromEnum(inst)].bin_op;
- const union_ty = cg.typeOf(bin_op.lhs).childType(zcu);
- const union_layout = union_ty.unionGetLayout(zcu);
- var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
- if (!hack_around_sema_opv_bugs or union_layout.tag_size > 0) try ops[0].store(&ops[1], .{
- .disp = @intCast(union_layout.tagOffset()),
- }, cg);
- const res = try cg.tempInit(.void, .none);
- try res.finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
- },
- .get_union_tag => if (use_old) try cg.airGetUnionTag(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- const union_ty = cg.typeOf(ty_op.operand);
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- const union_layout = union_ty.unionGetLayout(zcu);
- assert(union_layout.tag_size > 0);
- const res = try ops[0].read(ty_op.ty.toType(), .{
- .disp = @intCast(union_layout.tagOffset()),
- }, cg);
- try res.finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .slice => if (use_old) try cg.airSlice(inst) else {
- const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
- const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
- var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
- try ops[0].toPair(&ops[1], cg);
- try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
- },
- .slice_len => if (use_old) try cg.airSliceLen(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].toSliceLen(cg);
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .slice_ptr => if (use_old) try cg.airSlicePtr(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].toSlicePtr(cg);
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .ptr_slice_len_ptr => if (use_old) try cg.airPtrSliceLenPtr(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].toOffset(8, cg);
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .ptr_slice_ptr_ptr => if (use_old) try cg.airPtrSlicePtrPtr(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- try ops[0].toOffset(0, cg);
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .array_elem_val => if (use_old) try cg.airArrayElemVal(inst) else {
- const bin_op = air_datas[@intFromEnum(inst)].bin_op;
- const array_ty = cg.typeOf(bin_op.lhs);
- const res_ty = array_ty.elemType2(zcu);
- var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
- var res: [1]Temp = undefined;
- cg.select(&res, &.{res_ty}, &ops, comptime &.{ .{
- .src_constraints = .{ .{ .bool_vec = .dword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_gpr, .imm32, .none } },
- },
- .dst_temps = .{ .{ .cc = .c }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .bt, .src0d, .ua(.none, .add_src1_rem_32), ._, ._ },
- } },
- }, .{
- .src_constraints = .{ .{ .bool_vec = .dword }, .any, .any },
- .patterns = &.{
- .{ .src = .{ .to_gpr, .to_gpr, .none } },
- },
- .dst_temps = .{ .{ .cc = .c }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .bt, .src0d, .src1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .bool_vec = .qword }, .any, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .imm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .cc = .c }, .unused },
- .clobbers = .{ .eflags = true },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .bt, .src0q, .ua(.none, .add_src1_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .src_constraints = .{ .{ .bool_vec = .qword }, .any, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .cc = .c }, .unused },
- .clobbers = .{ .eflags = true },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .rc = .sse } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .bt, .src0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, .v_ps, .cvtph2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .tmp2q, .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_bool_vec, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .imm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .cc = .c }, .unused },
- .clobbers = .{ .eflags = true },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .bt, .mema(.src0d, .add_src1_div_8_down_4), .ua(.none, .add_src1_rem_32), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .src_constraints = .{ .any_bool_vec, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .cc = .c }, .unused },
- .clobbers = .{ .eflags = true },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .bt, .src0d, .src1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .byte }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .simm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .mema(.src0b, .add_src0_elem_size_mul_src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .byte }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .memi(.src0b, .src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .word }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .simm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .mema(.src0w, .add_src0_elem_size_mul_src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .word }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .memsi(.src0w, .@"2", .src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .dword }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .simm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .rc = .sse } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .mema(.src0d, .add_src0_elem_size_mul_src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, .v_ps, .cvtph2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, .v_, .cvttss2si, .tmp2q, .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .dword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .memsi(.src0d, .@"4", .src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .qword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .simm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0q, .mema(.src0q, .add_src0_elem_size_mul_src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .dst_constraints = .{ .{ .int = .qword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .to_gpr, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0q, .memsi(.src0q, .@"8", .src1), ._, ._ },
- } },
- } }) catch |err| switch (err) {
- error.SelectFailed => {
- const elem_size = res_ty.abiSize(zcu);
- const base = try cg.tempAllocReg(.usize, abi.RegisterClass.gp);
- while (try ops[0].toBase(false, cg) or
- try ops[1].toRegClass(true, .general_purpose, cg))
- {}
- const base_reg = base.tracking(cg).short.register.to64();
- const rhs_reg = ops[1].tracking(cg).short.register.to64();
- if (!std.math.isPowerOfTwo(elem_size)) {
- try cg.spillEflagsIfOccupied();
- try cg.asmRegisterRegisterImmediate(
- .{ .i_, .mul },
- rhs_reg,
- rhs_reg,
- .u(elem_size),
- );
- try cg.asmRegisterMemory(
- .{ ._, .lea },
- base_reg,
- try ops[0].tracking(cg).short.mem(cg, .{ .index = rhs_reg }),
- );
- } else if (elem_size > 8) {
- try cg.spillEflagsIfOccupied();
- try cg.asmRegisterImmediate(
- .{ ._l, .sh },
- rhs_reg,
- .u(std.math.log2_int(u64, elem_size)),
- );
- try cg.asmRegisterMemory(
- .{ ._, .lea },
- base_reg,
- try ops[0].tracking(cg).short.mem(cg, .{ .index = rhs_reg }),
- );
- } else try cg.asmRegisterMemory(
- .{ ._, .lea },
- base_reg,
- try ops[0].tracking(cg).short.mem(cg, .{
- .index = rhs_reg,
- .scale = .fromFactor(@intCast(elem_size)),
- }),
- );
- // Hack around Sema insanity: lhs could be an arbitrarily large comptime-known array
- // which could easily get spilled by the upcoming `load`, which would infinite recurse
- // since spilling an array requires the same operation that triggered the spill.
- try ops[0].die(cg);
- ops[0] = base;
- res[0] = try ops[0].load(res_ty, .{}, cg);
+ .{ .src = .{ .to_mem, .none, .none } },
},
- else => |e| return e,
- };
- try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
- },
- .slice_elem_val, .ptr_elem_val => |air_tag| if (use_old) switch (air_tag) {
- else => unreachable,
- .slice_elem_val => try cg.airSliceElemVal(inst),
- .ptr_elem_val => try cg.airPtrElemVal(inst),
- } else {
- const bin_op = air_datas[@intFromEnum(inst)].bin_op;
- const res_ty = cg.typeOf(bin_op.lhs).elemType2(zcu);
- var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
- try ops[0].toSlicePtr(cg);
- var res: [1]Temp = undefined;
- if (!hack_around_sema_opv_bugs or res_ty.hasRuntimeBitsIgnoreComptime(zcu)) cg.select(&res, &.{res_ty}, &ops, comptime &.{ .{
- .dst_constraints = .{ .{ .int = .byte }, .any },
- .patterns = &.{
- .{ .src = .{ .to_gpr, .simm32, .none } },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .leaa(.src0b, .add_src0_elem_size_mul_src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .byte }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .leai(.src0b, .src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .word }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .leaa(.src0w, .add_src0_elem_size_mul_src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .word }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .dst0d, .leasi(.src0w, .@"2", .src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .dword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .leaa(.src0d, .add_src0_elem_size_mul_src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .dword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0d, .leasi(.src0d, .@"4", .src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .dst_constraints = .{ .{ .int = .qword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0q, .leaa(.src0q, .add_src0_elem_size_mul_src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", null, null, null },
- .dst_constraints = .{ .{ .int = .qword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_gpr, .to_gpr, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .dst0q, .leasi(.src0q, .@"8", .src1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
- } }) catch |err| switch (err) {
- error.SelectFailed => {
- const elem_size = res_ty.abiSize(zcu);
- while (true) for (&ops) |*op| {
- if (try op.toRegClass(true, .general_purpose, cg)) break;
- } else break;
- const lhs_reg = ops[0].tracking(cg).short.register.to64();
- const rhs_reg = ops[1].tracking(cg).short.register.to64();
- if (!std.math.isPowerOfTwo(elem_size)) {
- try cg.spillEflagsIfOccupied();
- try cg.asmRegisterRegisterImmediate(
- .{ .i_, .mul },
- rhs_reg,
- rhs_reg,
- .u(elem_size),
- );
- try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
- .base = .{ .reg = lhs_reg },
- .mod = .{ .rm = .{ .index = rhs_reg } },
- });
- } else if (elem_size > 8) {
- try cg.spillEflagsIfOccupied();
- try cg.asmRegisterImmediate(
- .{ ._l, .sh },
- rhs_reg,
- .u(std.math.log2_int(u64, elem_size)),
- );
- try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
- .base = .{ .reg = lhs_reg },
- .mod = .{ .rm = .{ .index = rhs_reg } },
- });
- } else try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
- .base = .{ .reg = lhs_reg },
- .mod = .{ .rm = .{
- .index = rhs_reg,
- .scale = .fromFactor(@intCast(elem_size)),
- } },
- });
- res[0] = try ops[0].load(res_ty, .{}, cg);
- },
- else => |e| return e,
- } else res[0] = try cg.tempInit(res_ty, .none);
- try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
- },
- .slice_elem_ptr, .ptr_elem_ptr => |air_tag| if (use_old) switch (air_tag) {
- else => unreachable,
- .slice_elem_ptr => try cg.airSliceElemPtr(inst),
- .ptr_elem_ptr => try cg.airPtrElemPtr(inst),
- } else {
- const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
- const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
- var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
- try ops[0].toSlicePtr(cg);
- const dst_ty = ty_pl.ty.toType();
- if (dst_ty.ptrInfo(zcu).flags.vector_index == .none) zero_offset: {
- const elem_size = dst_ty.childType(zcu).abiSize(zcu);
- if (hack_around_sema_opv_bugs and elem_size == 0) break :zero_offset;
- while (true) for (&ops) |*op| {
- if (try op.toRegClass(true, .general_purpose, cg)) break;
- } else break;
- const lhs_reg = ops[0].tracking(cg).short.register.to64();
- const rhs_reg = ops[1].tracking(cg).short.register.to64();
- if (!std.math.isPowerOfTwo(elem_size)) {
- try cg.spillEflagsIfOccupied();
- try cg.asmRegisterRegisterImmediate(
- .{ .i_, .mul },
- rhs_reg,
- rhs_reg,
- .u(elem_size),
- );
- try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
- .base = .{ .reg = lhs_reg },
- .mod = .{ .rm = .{ .index = rhs_reg } },
- });
- } else if (elem_size > 8) {
- try cg.spillEflagsIfOccupied();
- try cg.asmRegisterImmediate(
- .{ ._l, .sh },
- rhs_reg,
- .u(std.math.log2_int(u64, elem_size)),
- );
- try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
- .base = .{ .reg = lhs_reg },
- .mod = .{ .rm = .{ .index = rhs_reg } },
- });
- } else try cg.asmRegisterMemory(.{ ._, .lea }, lhs_reg, .{
- .base = .{ .reg = lhs_reg },
- .mod = .{ .rm = .{
- .index = rhs_reg,
- .scale = .fromFactor(@intCast(elem_size)),
- } },
- });
- }
- try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
- },
- .array_to_slice => if (use_old) try cg.airArrayToSlice(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- var len = try cg.tempInit(.usize, .{
- .immediate = cg.typeOf(ty_op.operand).childType(zcu).arrayLen(zcu),
- });
- try ops[0].toPair(&len, cg);
- try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .int_from_float, .int_from_float_optimized => |air_tag| if (use_old) try cg.airIntFromFloat(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- var res: [1]Temp = undefined;
- cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .int = .dword }, .any },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .dst0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .qword }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
.unused,
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .xor, .tmp4x, .tmp4x, .tmp4x, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .vp_w, .insr, .tmp4x, .tmp4x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .dst0q, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_ps, .xor, .tmp4x, .tmp4x, .tmp4x, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .vp_w, .insr, .tmp4x, .tmp4x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
.unused,
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp4x, .tmp4x, ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .p_w, .insr, .tmp4x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .dst0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp4x, .tmp4x, ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .p_w, .insr, .tmp4x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .xword }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp3d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ss, .mov, .tmp5x, .tmp4d, ._, ._ },
+ .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .tmp1q, .tmp0d, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp3d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ss, .mov, .tmp5x, .tmp4d, ._, ._ },
+ .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
.patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
- .extra_temps = .{
- .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
- .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .cvttss2si, .dst0d, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .tmp1q, .tmp0d, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._, .mov, .memd(.dst0q, 8), .si(0), ._, ._ },
+ .{ ._, ._, .cvttss2si, .dst0d, .src0d, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
.patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
- .extra_temps = .{
- .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .cvttss2si, .dst0q, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .tmp1q, .tmp0d, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .memd(.dst0, 8), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .cvttss2si, .dst0q, .src0d, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
.patterns = &.{
.{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
.{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
.unused,
.unused,
.unused,
@@ -98626,29 +100251,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .tmp1q, .tmp0d, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .memd(.dst0, 8), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
+ .{ ._, .v_, .cvttss2si, .tmp2q, .src0d, ._, ._ },
+ .{ ._, .v_ss, .sub, .tmp0x, .src0x, .lea(.tmp1d), ._ },
+ .{ ._, .v_, .cvttss2si, .dst0q, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp2q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .tmp2q, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp1q, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .dword }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
- .unused,
- .unused,
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
.unused,
.unused,
.unused,
@@ -98658,21 +100283,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .eax }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._, .cvttss2si, .tmp1q, .src0d, ._, ._ },
+ .{ ._, ._ss, .sub, .src0x, .lea(.tmp0d), ._, ._ },
+ .{ ._, ._, .cvttss2si, .dst0q, .src0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .dword }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
.unused,
.unused,
.unused,
@@ -98684,21 +100316,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .eax }, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .qword }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
.unused,
.unused,
.unused,
@@ -98710,100 +100342,146 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .rax }, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .rax }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, .v_d, .mov, .tmp0d, .src0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._d, .movsx, .tmp0q, .tmp0d, ._, ._ },
+ .{ ._, .v_ps, .@"and", .src0x, .src0x, .lea(.tmp1x), ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp4q, .tmp0q, ._, ._ },
+ .{ ._, ._, .sub, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp4q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .tmp1q, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .memd(.dst0, 16), ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .xword }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._d, .mov, .tmp0d, .src0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._d, .movsx, .tmp0q, .tmp0d, ._, ._ },
+ .{ ._, ._ps, .@"and", .src0x, .lea(.tmp1x), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp4q, .tmp0q, ._, ._ },
+ .{ ._, ._, .sub, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp4q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .tmp1q, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .memd(.dst0, 16), ._, ._ },
+ .{ ._, ._, .mov, .tmp6d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp0x, .src0d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._ps, .@"and", .tmp0x, .lea(.tmp1x), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._d, .movsx, .tmp4q, .src0d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp4q, .ui(63), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp4q, ._, ._ },
+ .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
+ .{ ._, ._, .sub, .tmp1q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp5q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .tmp1q, ._, ._ },
+ .{ ._, ._, .lea, .tmp6p, .memd(.dst0, 16), ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
@@ -98812,31 +100490,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
.{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .memd(.dst0, 8), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp2q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .lea, .tmp3p, .memd(.dst0, 16), ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
.{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .word }, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -98845,19 +100523,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .lea, .tmp2p, .memd(.dst0, 8), ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp0x), ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .required_features = .{ .ssse3, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -98879,13 +100553,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttps2dq, .dst0x, .dst0x, ._, ._ },
- .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .cvttps2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp0x), ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -98908,26 +100581,55 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
.{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .cvtph2, .tmp3x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_, .cvttps2dq, .tmp3x, .tmp3x, ._, ._ },
+ .{ .@"0:", .v_, .cvttps2dq, .tmp3x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .vp_b, .shuf, .tmp3x, .tmp3x, .tmp2x, ._ },
.{ ._, .v_d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .ssse3, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttps2dq, .tmp3x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_b, .shuf, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -98937,29 +100639,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ .@"0:", ._, .cvttss2si, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -98969,19 +100667,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ .@"0:", ._, .cvttss2si, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
.{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -98989,8 +100684,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99004,16 +100699,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
.{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99021,8 +100715,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99036,8 +100730,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
.{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
.{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
@@ -99045,7 +100738,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99053,10 +100746,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -99068,17 +100761,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99086,10 +100777,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -99101,31 +100792,41 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttps2dq, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .dst0x, .src0x, ._, ._ },
.{ ._, .vp_w, .ackssd, .dst0x, .dst0x, .dst0x, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .cvttps2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .ackssd, .dst0x, .dst0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -99133,13 +100834,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_, .cvttps2dq, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .v_, .cvttps2dq, .dst0x, .src0x, ._, ._ },
.{ ._, .vp_w, .ackusd, .dst0x, .dst0x, .dst0x, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .cvttps2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .ackusd, .dst0x, .dst0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99159,24 +100872,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_, .cvttps2dq, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .vp_w, .ackssd, .tmp1x, .tmp1x, .tmp1x, ._ },
.{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -99189,27 +100901,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_, .cvttps2dq, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .vp_w, .ackusd, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .ackssd, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -99219,29 +100929,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .ackusd, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -99251,19 +100958,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .ackusd, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99271,10 +100976,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -99285,27 +100990,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -99315,58 +101019,51 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .cvtph2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_, .cvttps2dq, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .rc = .sse } },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .cvttps2dq, .dst0x, .src0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, .v_ps, .cvtph2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .tmp2q, .tmp1x, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .cvttps2dq, .dst0x, .src0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -99376,29 +101073,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .v_, .cvttps2dq, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
- .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -99408,19 +101101,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .cvttps2dq, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99428,8 +101118,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99443,16 +101133,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99460,8 +101149,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfsi" } } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -99475,16 +101164,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99492,10 +101180,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfsi" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -99507,17 +101195,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99525,10 +101211,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfsi" } } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfsi" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -99540,24 +101226,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .rc = .sse } },
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
@@ -99567,63 +101250,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
+ .unused,
},
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, .v_ps, .cvtph2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, .v_, .cvttss2si, .tmp2q, .tmp1x, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .v_, .cvttss2si, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -99633,19 +101281,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .cvttss2si, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99653,8 +101298,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfdi" } } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -99668,16 +101313,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99685,8 +101329,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfdi" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -99700,16 +101344,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99717,10 +101360,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfdi" } } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfdi" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -99732,17 +101375,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99750,47 +101391,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfdi" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfdi" } } },
- .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- .unused,
.unused,
.unused,
},
@@ -99798,50 +101406,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99849,8 +101422,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -99864,17 +101437,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"4", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99882,8 +101454,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -99897,17 +101469,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"4", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99915,33 +101486,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfti" } } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
.unused,
.unused,
+ .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"4", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99949,33 +101518,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
.unused,
.unused,
+ .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp1d, ._, ._ },
- .{ ._, ._ss, .mov, .tmp3x, .tmp2d, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"4", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -99986,8 +101553,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfei" } } },
.unused,
.unused,
.unused,
@@ -99999,18 +101566,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .xor, .tmp4x, .tmp4x, .tmp4x, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .vp_w, .insr, .tmp4x, .tmp4x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, .v_ss, .mov, .tmp4x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp5d, ._, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -100021,8 +101587,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfei" } } },
.unused,
.unused,
.unused,
@@ -100034,18 +101600,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_ps, .xor, .tmp4x, .tmp4x, .tmp4x, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .vp_w, .insr, .tmp4x, .tmp4x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, .v_ss, .mov, .tmp4x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp5d, ._, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -100056,8 +101621,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfei" } } },
.unused,
.unused,
.unused,
@@ -100069,18 +101634,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp4x, .tmp4x, ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .p_w, .insr, .tmp4x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._ss, .mov, .tmp4x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp5d, ._, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -100091,8 +101655,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfei" } } },
.unused,
.unused,
.unused,
@@ -100104,114 +101668,143 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp4x, .tmp4x, ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .p_w, .insr, .tmp4x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, ._ss, .mov, .tmp4x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp5d, ._, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .cvttsd2si, .dst0d, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .cvttsd2si, .dst0d, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .byte }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixhfei" } } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp3d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ss, .mov, .tmp5x, .tmp4d, ._, ._ },
- .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .dst0d, .tmp1b, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f32, .kind = .mem },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunshfei" } } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp3d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ss, .mov, .tmp5x, .tmp4d, ._, ._ },
- .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp1b, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, .v_, .cvttss2si, .dst0d, .src0d, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .dst0w, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .cvttss2si, .dst0d, .src0d, ._, ._ },
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .dst0d, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -100219,11 +101812,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_, .cvttss2si, .dst0q, .src0d, ._, ._ },
+ .{ ._, .v_, .cvttsd2si, .dst0q, .src0q, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -100231,20 +101824,45 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .cvttss2si, .dst0q, .src0d, ._, ._ },
+ .{ ._, ._, .cvttsd2si, .dst0q, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .dst0q, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
.patterns = &.{
.{ .src = .{ .to_sse, .none, .none } },
},
.extra_temps = .{
- .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .f64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
+ .{ .type = .f64, .kind = .{ .@"0x1p63_mem" = .{} } },
.unused,
.unused,
.unused,
@@ -100257,17 +101875,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_, .cvttss2si, .tmp2q, .src0d, ._, ._ },
- .{ ._, .v_ss, .sub, .tmp0x, .src0x, .lea(.tmp1d), ._ },
- .{ ._, .v_, .cvttss2si, .dst0q, .tmp0d, ._, ._ },
+ .{ ._, .v_, .cvttsd2si, .tmp2q, .src0d, ._, ._ },
+ .{ ._, .v_sd, .sub, .tmp0x, .src0x, .lea(.tmp1q), ._ },
+ .{ ._, .v_, .cvttsd2si, .dst0q, .tmp0d, ._, ._ },
.{ ._, ._, .mov, .tmp1q, .tmp2q, ._, ._ },
.{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
.{ ._, ._, .@"and", .dst0q, .tmp2q, ._, ._ },
.{ ._, ._, .@"or", .dst0q, .tmp1q, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
.patterns = &.{
.{ .src = .{ .to_mut_sse, .none, .none } },
@@ -100275,7 +101893,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
.{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
+ .{ .type = .f64, .kind = .{ .@"0x1p63_mem" = .{} } },
.unused,
.unused,
.unused,
@@ -100289,24 +101907,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, ._, .cvttss2si, .tmp1q, .src0d, ._, ._ },
- .{ ._, ._ss, .sub, .src0x, .lea(.tmp0d), ._, ._ },
- .{ ._, ._, .cvttss2si, .dst0q, .src0d, ._, ._ },
+ .{ ._, ._, .cvttsd2si, .tmp1q, .src0d, ._, ._ },
+ .{ ._, ._sd, .sub, .src0x, .lea(.tmp0q), ._, ._ },
+ .{ ._, ._, .cvttsd2si, .dst0q, .src0d, ._, ._ },
.{ ._, ._, .mov, .tmp0q, .tmp1q, ._, ._ },
.{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
.{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
.{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i64, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .f_, .ld, .tmp3t, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp4q, ._, ._ },
+ .{ ._, .f_, .sub, .lea(.tmp0d), ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .tmp4q, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+ } },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.dst_constraints = .{ .{ .signed_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
.unused,
.unused,
.unused,
@@ -100325,14 +101978,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
.unused,
.unused,
.unused,
@@ -100350,62 +102003,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
.unused,
.unused,
.unused,
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, .v_d, .mov, .tmp0d, .src0x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
- .{ ._, ._d, .movsx, .tmp0q, .tmp0d, ._, ._ },
- .{ ._, .v_ps, .@"and", .src0x, .src0x, .lea(.tmp1x), ._ },
- .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
- .{ ._, ._, .xor, .tmp4q, .tmp0q, ._, ._ },
- .{ ._, ._, .sub, .tmp1q, .tmp0q, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._, .sbb, .tmp4q, .tmp0q, ._, ._ },
- .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .sbb, .tmp1q, .tmp1q, ._, ._ },
- .{ ._, ._, .lea, .tmp5p, .memd(.dst0, 16), ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
.unused,
.unused,
.unused,
@@ -100414,39 +102026,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._d, .mov, .tmp0d, .src0x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
- .{ ._, ._d, .movsx, .tmp0q, .tmp0d, ._, ._ },
- .{ ._, ._ps, .@"and", .src0x, .lea(.tmp1x), ._, ._ },
- .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
- .{ ._, ._, .xor, .tmp4q, .tmp0q, ._, ._ },
- .{ ._, ._, .sub, .tmp1q, .tmp0q, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._, .sbb, .tmp4q, .tmp0q, ._, ._ },
- .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .sbb, .tmp1q, .tmp1q, ._, ._ },
- .{ ._, ._, .lea, .tmp5p, .memd(.dst0, 16), ._, ._ },
- .{ ._, ._, .mov, .tmp6d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .vector_4_f32, .kind = .{ .smax_mem = .{} } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -100455,37 +102054,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._ss, .mov, .tmp0x, .src0d, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
- .{ ._, ._ps, .@"and", .tmp0x, .lea(.tmp1x), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._d, .movsx, .tmp4q, .src0d, ._, ._ },
- .{ ._, ._r, .sa, .tmp4q, .ui(63), ._, ._ },
- .{ ._, ._, .xor, .tmp1q, .tmp4q, ._, ._ },
- .{ ._, ._, .xor, .tmp5q, .tmp4q, ._, ._ },
- .{ ._, ._, .sub, .tmp1q, .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._, .sbb, .tmp5q, .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .sbb, .tmp1q, .tmp1q, ._, ._ },
- .{ ._, ._, .lea, .tmp6p, .memd(.dst0, 16), ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .dword }, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .u32, .kind = .{ .reg = .ecx } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -100493,21 +102079,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
- .{ ._, ._, .lea, .tmp3p, .memd(.dst0, 16), ._, ._ },
- .{ ._, ._, .mov, .tmp4d, .sia(-2, .dst0, .add_size_div_8), ._, ._ },
- .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .v_, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp0x), ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any },
+ .required_features = .{ .ssse3, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
@@ -100528,12 +102109,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_, .cvttps2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp0x), ._, ._ },
} },
}, .{
- .required_features = .{ .ssse3, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
@@ -100555,12 +102136,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._, .cvttps2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, .v_, .cvttpd2dq, .dst0x, .src0y, ._, ._ },
+ .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp0x), ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -100579,11 +102160,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
.{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttps2dq, .tmp3x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_, .cvttpd2dq, .tmp3x, .memsia(.src0y, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .vp_b, .shuf, .tmp3x, .tmp3x, .tmp2x, ._ },
.{ ._, .v_d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
@@ -100591,8 +102173,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .ssse3, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -100610,19 +102192,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
.{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttps2dq, .tmp3x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttpd2dq, .tmp3x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .p_b, .shuf, .tmp3x, .tmp2x, ._, ._ },
.{ ._, ._d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -100641,16 +102224,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttss2si, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttsd2si, .tmp1d, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -100669,26 +102253,529 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttss2si, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttsd2si, .tmp1d, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
.{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp3d, .tmp2b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp2w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp3d, .tmp2b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .vp_w, .ackssd, .dst0x, .dst0x, .dst0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .ackssd, .dst0x, .dst0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .cvttpd2dq, .dst0x, .src0y, ._, ._ },
+ .{ ._, .vp_w, .ackssd, .dst0x, .dst0x, .dst0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .vp_w, .ackusd, .dst0x, .dst0x, .dst0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .ackusd, .dst0x, .dst0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .cvttpd2dq, .dst0x, .src0y, ._, ._ },
+ .{ ._, .vp_w, .ackusd, .dst0x, .dst0x, .dst0x, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_, .cvttpd2dq, .tmp1x, .memsia(.src0y, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .ackssd, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttpd2dq, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .ackssd, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_, .cvttpd2dq, .tmp1x, .memsia(.src0y, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_w, .ackusd, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttpd2dq, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_w, .ackusd, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .cvttsd2si, .tmp1d, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i32, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -100698,27 +102785,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -100732,24 +102819,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -100763,24 +102850,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -100794,74 +102881,59 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_, .cvttps2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .vp_w, .ackssd, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .cvttps2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .p_w, .ackssd, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_, .cvttps2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .vp_w, .ackusd, .dst0x, .dst0x, .dst0x, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .cvttps2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .p_w, .ackusd, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .v_, .cvttpd2dq, .dst0x, .src0y, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -100873,24 +102945,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_w, .ackssd, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", .v_, .cvttpd2dq, .tmp1x, .memsia(.src0y, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -100902,24 +102974,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_w, .ackssd, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ .@"0:", ._, .cvttpd2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -100933,24 +103005,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_w, .ackusd, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i64, .kind = .mem },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -100962,24 +103033,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttps2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_w, .ackusd, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp2q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -100993,25 +103065,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
+ .{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -101024,48 +103096,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_, .cvttps2dq, .dst0x, .src0x, ._, ._ },
- } },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .cvttps2dq, .dst0x, .src0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -101075,25 +103124,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttps2dq, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
+ .{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -101103,16 +103155,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttps2dq, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101120,8 +103174,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101134,16 +103188,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
.{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101151,8 +103206,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfsi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
.{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -101165,26 +103220,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
.{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -101194,28 +103249,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", .v_, .cvttsd2si, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfsi" } } },
- .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -101225,25 +103278,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", ._, .cvttsd2si, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -101257,21 +103309,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttss2si, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -101279,20 +103334,51 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttss2si, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101300,8 +103386,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfdi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -101315,15 +103401,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101331,8 +103417,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfdi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -101346,15 +103432,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101362,8 +103448,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfdi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
.{ .type = .i64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -101377,15 +103463,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101393,8 +103480,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfdi" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
@@ -101408,15 +103495,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101424,8 +103512,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -101439,16 +103527,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"4", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101456,8 +103544,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -101471,16 +103559,80 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"4", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101488,8 +103640,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfti" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
@@ -101503,16 +103655,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"4", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101520,8 +103673,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfti" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
.{ .type = .u64, .kind = .{ .reg = .rax } },
.{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
@@ -101535,16 +103688,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"4", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101555,8 +103709,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfei" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
.unused,
.unused,
.unused,
@@ -101570,15 +103724,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
.{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_ss, .mov, .tmp4x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_sd, .mov, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp5d, ._, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101589,8 +103743,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfei" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
.unused,
.unused,
.unused,
@@ -101604,15 +103758,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
.{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_ss, .mov, .tmp4x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_sd, .mov, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp5d, ._, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101623,8 +103777,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfei" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
.unused,
.unused,
.unused,
@@ -101638,15 +103792,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
.{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ss, .mov, .tmp4x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sd, .mov, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp5d, ._, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
.dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -101657,8 +103811,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunssfei" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
.unused,
.unused,
.unused,
@@ -101672,98 +103826,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
.{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ss, .mov, .tmp4x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sd, .mov, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp5d, ._, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_, .cvttsd2si, .dst0d, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .cvttsd2si, .dst0d, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .byte }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
- .{ ._, ._, .movsx, .dst0d, .tmp1b, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp4x, .tmp4x, ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ps, .movl, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
- .{ ._, ._, .movzx, .dst0d, .tmp1b, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp4x, .tmp4x, ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ps, .movl, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .byte }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
},
.extra_temps = .{
.{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
+ .{ .type = .i16, .kind = .mem },
.unused,
.unused,
.unused,
@@ -101774,20 +103923,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0w, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .dst0d, .tmp1b, ._, ._ },
} },
}, .{
.required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
},
.extra_temps = .{
.{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
.unused,
.unused,
.unused,
@@ -101797,50 +103949,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_, .cvttsd2si, .dst0q, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .cvttsd2si, .dst0q, .src0q, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .dst0d, .tmp1b, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
+ .required_features = .{ .x87, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -101849,55 +103977,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0q, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
- .patterns = &.{
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .f64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .@"0x1p63_mem" = .{} } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_, .cvttsd2si, .tmp2q, .src0d, ._, ._ },
- .{ ._, .v_sd, .sub, .tmp0x, .src0x, .lea(.tmp1q), ._ },
- .{ ._, .v_, .cvttsd2si, .dst0q, .tmp0d, ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .tmp2q, ._, ._ },
- .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
- .{ ._, ._, .@"and", .dst0q, .tmp2q, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp4d, .tmp3b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .@"0x1p63_mem" = .{} } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -101905,31 +104009,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, ._, .cvttsd2si, .tmp1q, .src0d, ._, ._ },
- .{ ._, ._sd, .sub, .src0x, .lea(.tmp0q), ._, ._ },
- .{ ._, ._, .cvttsd2si, .dst0q, .src0d, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .tmp1q, ._, ._ },
- .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
- .{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp4d, .tmp3b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
+ .required_features = .{ .x87, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i64, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -101937,61 +104042,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .f_, .ld, .tmp3t, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp4q, ._, ._ },
- .{ ._, .f_, .sub, .lea(.tmp0d), ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
- .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
- .{ ._, ._, .@"and", .dst0q, .tmp4q, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .xword }, .any },
- .patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp4d, .tmp3b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -101999,51 +104075,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp3w, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp4d, .tmp3b, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .qword }, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
.unused,
.unused,
.unused,
@@ -102054,23 +104110,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .dst0w, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -102081,25 +104134,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .ssse3, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i32, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -102108,23 +104163,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -102135,24 +104195,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_, .cvttpd2dq, .dst0x, .src0y, ._, ._ },
- .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp0x), ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .dst0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -102164,27 +104223,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttpd2dq, .tmp3x, .memsia(.src0y, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_b, .shuf, .tmp3x, .tmp3x, .tmp2x, ._ },
- .{ ._, .v_d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .ssse3, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .byte } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
- .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i64, .kind = .mem },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -102196,25 +104252,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttpd2dq, .tmp3x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_b, .shuf, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp2q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -102226,24 +104282,56 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .dst0q, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_x87, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
+ .{ .type = .f64, .kind = .{ .reg = .st6 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .i64, .kind = .mem },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttsd2si, .tmp1d, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .f_, .ld, .tmp3t, ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .tmp4q, ._, ._ },
+ .{ ._, .f_, .sub, .lea(.tmp0d), ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .tmp4q, ._, ._ },
+ .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -102258,24 +104346,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttsd2si, .tmp1d, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .fi_p, .stt, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -102284,28 +104373,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .movzx, .tmp3d, .tmp2b, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -102314,29 +104405,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .movzx, .tmp3d, .tmp2b, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
.unused,
.unused,
.unused,
@@ -102348,25 +104440,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -102375,29 +104468,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1x, .tmp0x, ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -102406,29 +104496,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1x, .tmp0x, ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -102437,29 +104524,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .tmp0x, ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -102468,30 +104552,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .tmp0x, ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .xword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixsfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -102500,109 +104580,56 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .tmp0x, ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp3b, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .vp_w, .ackssd, .dst0x, .dst0x, .dst0x, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .p_w, .ackssd, .dst0x, .dst0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_, .cvttpd2dq, .dst0x, .src0y, ._, ._ },
- .{ ._, .vp_w, .ackssd, .dst0x, .dst0x, .dst0x, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .vp_w, .ackusd, .dst0x, .dst0x, .dst0x, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
- .{ ._, .p_w, .ackusd, .dst0x, .dst0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_, .cvttpd2dq, .dst0x, .src0y, ._, ._ },
- .{ ._, .vp_w, .ackusd, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .tmp0x, ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -102610,29 +104637,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttpd2dq, .tmp1x, .memsia(.src0y, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_w, .ackssd, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -102640,29 +104670,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttpd2dq, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_w, .ackssd, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -102670,29 +104703,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttpd2dq, .tmp1x, .memsia(.src0y, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_w, .ackusd, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .v_q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -102700,29 +104736,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttpd2dq, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_w, .ackusd, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._d, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -102730,28 +104769,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttsd2si, .tmp1d, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -102759,26 +104802,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i32, .kind = .mem },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
.unused,
.unused,
.unused,
@@ -102787,29 +104835,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .src0x, ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
.unused,
.unused,
.unused,
@@ -102820,27 +104867,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp2x, .src0x, ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
.unused,
.unused,
.unused,
@@ -102851,27 +104897,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .src0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
.unused,
.unused,
.unused,
@@ -102882,182 +104927,228 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp2x, .src0x, ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .cvttpd2dq, .dst0x, .src0x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .src0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_, .cvttpd2dq, .dst0x, .src0y, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp2x, .src0x, ._, ._ },
+ .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttpd2dq, .tmp1x, .memsia(.src0y, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttpd2dq, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i64, .kind = .mem },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2q, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
.unused,
.unused,
.unused,
@@ -103066,29 +105157,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
+ .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
- .{ .type = .u32, .kind = .{ .reg = .eax } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .frame = .call_frame } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
.unused,
.unused,
.unused,
@@ -103097,25 +105192,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp5x, .tmp4x, ._, ._ },
+ .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103123,32 +105223,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
- .{ .type = .u32, .kind = .{ .reg = .eax } },
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103159,25 +105260,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfsi" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
.{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
@@ -103185,33 +105289,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfsi" } } },
- .{ .type = .u32, .kind = .{ .reg = .eax } },
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103222,27 +105326,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103251,27 +105357,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_, .cvttsd2si, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103280,26 +105390,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .cvttsd2si, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103309,26 +105423,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103340,26 +105456,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103371,26 +105487,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103399,29 +105515,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .eax }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103430,29 +105541,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .eax }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfdi" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103464,27 +105570,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfdi" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
+ .{ .type = .u32, .kind = .{ .reg = .eax } },
.unused,
.unused,
.unused,
@@ -103496,28 +105601,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -103528,28 +105632,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
+ .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -103560,28 +105663,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
+ .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -103592,28 +105694,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
+ .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .unused,
.unused,
.unused,
.unused,
@@ -103624,28 +105725,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103653,32 +105753,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .rax }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103686,33 +105779,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .rax }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memsiad(.dst0q, .@"2", .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103722,31 +105808,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_sd, .mov, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103756,31 +105839,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_sd, .mov, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103790,31 +105870,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._sd, .mov, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103824,31 +105901,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._sd, .mov, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixdfei" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
+ .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103858,32 +105932,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp4x, .tmp4x, ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ps, .movl, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsdfei" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -103893,28 +105963,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp4x, .tmp4x, ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ps, .movl, .tmp4x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .byte }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .signed_int = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_x87, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -103925,23 +105991,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
- .{ ._, ._, .movsx, .dst0d, .tmp1b, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .byte }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_x87, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -103952,25 +106017,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+ .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp1w, ._, ._, ._ },
- .{ ._, ._, .movzx, .dst0d, .tmp1b, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -103979,31 +106044,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp3w, ._, ._, ._ },
- .{ ._, ._, .movsx, .tmp4d, .tmp3b, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -104012,31 +106076,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp3w, ._, ._, ._ },
- .{ ._, ._, .movsx, .tmp4d, .tmp3b, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -104045,65 +106108,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp3w, ._, ._, ._ },
- .{ ._, ._, .movzx, .tmp4d, .tmp3b, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp3w, ._, ._, ._ },
- .{ ._, ._, .movzx, .tmp4d, .tmp3b, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_x87, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -104112,23 +106140,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -104137,27 +106172,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .i32, .kind = .mem },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
- .unused,
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
.unused,
.unused,
.unused,
@@ -104166,28 +106204,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_x87, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
.unused,
.unused,
.unused,
@@ -104198,21 +106236,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .float = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
.unused,
.unused,
.unused,
@@ -104223,60 +106264,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .{ .type = .i64, .kind = .mem },
- .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp2q, ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp2d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_x87, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
.unused,
.unused,
.unused,
@@ -104284,60 +106292,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .dst0q, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .exact_unsigned_int = 64 }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_x87, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .@"0x1p63_mem" = .{} } },
- .{ .type = .f64, .kind = .{ .reg = .st6 } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .{ .type = .i64, .kind = .mem },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
- .{ ._, .f_, .ld, .tmp3t, ._, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .tmp4q, ._, ._ },
- .{ ._, .f_, .sub, .lea(.tmp0d), ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
- .{ ._, .fi_p, .stt, .tmp4q, ._, ._, ._ },
- .{ ._, ._r, .sa, .dst0q, .ui(63), ._, ._ },
- .{ ._, ._, .@"and", .dst0q, .tmp4q, ._, ._ },
- .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
.unused,
.unused,
.unused,
@@ -104345,29 +106326,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .fi_p, .stt, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
.unused,
.unused,
.unused,
@@ -104377,29 +106362,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
.unused,
.unused,
.unused,
@@ -104409,29 +106396,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
.unused,
.unused,
.unused,
@@ -104441,54 +106430,77 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .xword }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_dqa, .mov, .tmp0x, .src0x, ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1x, .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
+ } }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ @tagName(air_tag),
+ ty_op.ty.toType().fmt(pt),
+ cg.typeOf(ty_op.operand).fmt(pt),
+ ops[0].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+ .float_from_int => |air_tag| if (use_old) try cg.airFloatFromInt(inst) else {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ var res: [1]Temp = undefined;
+ cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .i8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104498,25 +106510,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_dqa, .mov, .tmp0x, .src0x, ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp1x, .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .xword }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104526,25 +106538,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
- .{ ._, ._dqa, .mov, .tmp1x, .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104554,25 +106566,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
- .{ ._, ._dqa, .mov, .tmp1x, .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .xword }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
+ .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104582,25 +106594,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
- .{ ._, ._ps, .mova, .tmp1x, .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0d, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
+ .{ .type = .u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104610,225 +106636,185 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
- .{ ._, ._ps, .mova, .tmp1x, .tmp0x, ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0q, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, ._, .@"test", .src0q, .src0q, ._, ._ },
+ .{ ._, ._ns, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, ._r, .sh, .src0q, .ui(1), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .@"or", .src0q, .tmp0q, ._, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
+ .{ ._, .v_ss, .add, .dst0x, .dst0x, .dst0d, ._ },
+ .{ ._, ._mp, .j, .@"0f", ._, ._, ._ },
+ .{ .@"1:", .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
+ .{ .@"0:", .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .dil }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .src0d, .src0b, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .dil }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .src0d, .src0b, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .di }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .src0d, .src0w, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .di }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp5q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .src0d, .src0w, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .edi }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104836,29 +106822,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2x, .src0x, ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .edi }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104866,29 +106848,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp2x, .src0x, ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .signed_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .rdi }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104896,29 +106874,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .src0x, ._, ._ },
- .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .rdi }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104926,29 +106900,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp2x, .src0x, ._, ._ },
- .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104956,29 +106926,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .src0x, ._, ._ },
- .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -104986,239 +106952,196 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp2x, .src0x, ._, ._ },
- .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
- .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .word }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
- .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
- .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .movsxb, .dst0y, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp5x, .tmp4x, ._, ._ },
- .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .movzxb, .dst0y, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixxfei" } } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp5x, .tmp4x, ._, ._ },
- .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .size = 16, .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f80, .kind = .{ .frame = .call_frame } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunsxfei" } } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp5x, .tmp4x, ._, ._ },
- .{ ._, ._, .call, .tmp6d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -105227,31 +107150,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -105260,31 +107180,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -105295,29 +107213,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -105328,29 +107244,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .sse4_1, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -105361,29 +107275,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -105394,28 +107306,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0b, .tmp1, .add_unaligned_size), .tmp4b, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105427,26 +107337,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105458,27 +107369,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
- .unused,
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -105489,27 +107401,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .xword }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .dword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -105517,24 +107431,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .eax }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .float = .xword }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .dword }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105543,24 +107464,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .eax }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105572,26 +107498,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse4_1, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
- .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105603,26 +107529,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, .p_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105634,26 +107560,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
- .{ .type = .u32, .kind = .{ .reg = .eax } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105665,26 +107591,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfsi" } } },
- .{ .type = .i32, .kind = .{ .reg = .eax } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105696,27 +107623,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfsi" } } },
- .{ .type = .u32, .kind = .{ .reg = .eax } },
- .unused,
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -105727,27 +107655,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .xword }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .qword }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -105755,50 +107685,86 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .rax }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .xword }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .qword }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .{ .reg = .rax }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, .vp_d, .movsxw, .dst0y, .src0x, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movzxw, .dst0y, .src0x, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -105808,28 +107774,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -105839,28 +107804,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -105870,28 +107834,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -105901,28 +107864,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfdi" } } },
- .{ .type = .i64, .kind = .{ .reg = .rax } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105934,26 +107897,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfdi" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105965,26 +107928,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .xword }, .any, .any },
- .dst_constraints = .{ .{ .signed_int = .xword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -105993,25 +107956,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .xword }, .any, .any },
- .dst_constraints = .{ .{ .unsigned_int = .xword }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -106019,25 +107988,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg_pair = .{ .rax, .rdx } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -106049,27 +108025,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -106081,27 +108056,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -106113,27 +108087,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -106145,27 +108119,53 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtdq2, .dst0x, .src0x, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtdq2, .dst0y, .src0y, ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
+ } },
+ }, .{
+ .required_features = .{ .f16c, .avx2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -106174,30 +108174,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtdq2, .tmp1y, .memsia(.src0y, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfti" } } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -106206,29 +108203,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_unaligned_size, 8), .tmp4q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtdq2, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .xword }, .any, .any },
- .dst_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106240,23 +108235,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .float = .xword }, .any, .any },
- .dst_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .xmm0 }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106268,25 +108266,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.dst0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.dst0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -106296,31 +108297,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
.unused,
.unused,
.unused,
@@ -106330,31 +108329,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -106364,31 +108362,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -106398,31 +108393,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._dqa, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixtfei" } } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -106432,31 +108424,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__fixunstfei" } } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
+ .unused,
.unused,
.unused,
.unused,
@@ -106466,42 +108456,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp1p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.dst0, .add_bit_size), ._, ._ },
- .{ ._, ._ps, .mova, .tmp4x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .leaa(.tmp1, .add_dst0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
- } }) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
- @tagName(air_tag),
- ty_op.ty.toType().fmt(pt),
- cg.typeOf(ty_op.operand).fmt(pt),
- ops[0].tracking(cg),
- }),
- else => |e| return e,
- };
- try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
- },
- .float_from_int => |air_tag| if (use_old) try cg.airFloatFromInt(inst) else {
- const ty_op = air_datas[@intFromEnum(inst)].ty_op;
- var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
- var res: [1]Temp = undefined;
- cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ }, .{
+ .required_features = .{ .@"64bit", .f16c, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -106512,26 +108485,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ps, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .tmp1x, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_, .cvtps2ph, .tmp1q, .tmp1x, .rm(.{}), ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106540,26 +108517,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse4_1, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106568,26 +108548,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106596,41 +108579,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0d, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -106638,39 +108611,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0q, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106679,35 +108644,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, ._, .@"test", .src0q, .src0q, ._, ._ },
- .{ ._, ._ns, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, ._r, .sh, .src0q, .ui(1), ._, ._ },
- .{ ._, ._, .@"and", .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .@"or", .src0q, .tmp0q, ._, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
- .{ ._, .v_ss, .add, .dst0x, .dst0x, .dst0d, ._ },
- .{ ._, ._mp, .j, .@"0f", ._, ._, ._ },
- .{ .@"1:", .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
- .{ .@"0:", .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse4_1, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .dil }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106716,25 +108675,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .src0d, .src0b, ._, ._ },
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .dil }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106743,26 +108706,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .src0d, .src0b, ._, ._ },
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .di }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -106770,26 +108738,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .src0d, .src0w, ._, ._ },
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .di }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106797,26 +108771,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .src0d, .src0w, ._, ._ },
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse4_1, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .edi }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106824,25 +108803,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .edi }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106850,51 +108835,98 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp4x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .signed_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .rdi }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
.unused,
.unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp5d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp5d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse4_1, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .rdi }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106902,25 +108934,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -106928,193 +108966,206 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp1d, .tmp4x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
.{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp5d, .tmp4d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp5d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
.{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp5x, .ui(0), ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .word }, .any },
+ .required_features = .{ .@"64bit", .sse4_1, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
- } },
- }, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movsxb, .dst0y, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp5x, .ui(0), ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
- } },
- }, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxb, .dst0y, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp2d, .tmp5x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp6d, .tmp5d, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp6d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -107122,29 +109173,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp5x, .ui(0), ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse4_1, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -107152,29 +109207,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp5x, .ui(0), ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -107182,31 +109241,35 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp2d, .tmp5x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .f32, .kind = .mem },
.unused,
.unused,
.unused,
@@ -107215,26 +109278,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp6d, .tmp5d, ._, ._ },
+ .{ ._, ._, .mov, .tmp2d, .tmp6d, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107243,29 +109311,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107274,29 +109338,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107305,29 +109365,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107336,30 +109392,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107368,31 +109419,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107400,32 +109446,53 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107433,31 +109500,51 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0d, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .dst0x, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107466,29 +109553,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0q, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107497,29 +109580,50 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0q, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .dst0x, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107528,29 +109632,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, ._, .@"test", .src0q, .src0q, ._, ._ },
+ .{ ._, ._ns, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, ._r, .sh, .src0q, .ui(1), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .@"or", .src0q, .tmp0q, ._, ._ },
+ .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
+ .{ ._, .v_ss, .add, .dst0x, .dst0x, .dst0d, ._ },
+ .{ ._, ._mp, .j, .@"0f", ._, ._, ._ },
+ .{ .@"1:", .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107559,29 +109667,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._, .@"test", .src0q, .src0q, ._, ._ },
+ .{ ._, ._ns, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, ._r, .sh, .src0q, .ui(1), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .@"or", .src0q, .tmp0q, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._ss, .add, .dst0x, .dst0d, ._, ._ },
+ .{ ._, ._mp, .j, .@"0f", ._, ._, ._ },
+ .{ .@"1:", ._ss, .cvtsi2, .dst0x, .src0q, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107590,30 +109703,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107622,31 +109729,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107654,32 +109755,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .dword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -107687,78 +109783,95 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ },
.{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movsxw, .dst0y, .src0x, ._, ._ },
+ .{ ._, .p_d, .movsxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movsxb, .dst0y, .src0q, ._, ._ },
.{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ },
.{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxw, .dst0y, .src0x, ._, ._ },
+ .{ ._, .p_d, .movzxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movzxb, .dst0y, .src0q, ._, ._ },
.{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
} },
}, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -107779,16 +109892,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -107809,16 +109922,46 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -107839,16 +109982,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -107869,16 +110012,46 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -107886,8 +110059,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -107900,16 +110073,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -107917,8 +110090,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -107931,16 +110104,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -107948,8 +110121,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -107962,17 +110135,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -107980,9 +110152,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -107994,18 +110166,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108013,8 +110183,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -108027,16 +110197,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108044,8 +110214,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -108058,16 +110228,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108075,8 +110245,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -108089,17 +110259,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108107,9 +110276,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -108121,44 +110290,94 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtdq2, .dst0x, .src0x, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+ .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtdq2, .dst0y, .src0y, ._, ._ },
- .{ ._, .v_, .cvtps2ph, .dst0x, .dst0y, .rm(.{}), ._ },
+ .{ ._, .p_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, .avx2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movsxw, .dst0y, .src0x, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .movzxw, .dst0y, .src0x, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108178,16 +110397,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .cvtdq2, .tmp1y, .memsia(.src0y, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1y, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .f16c, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108207,25 +110427,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .cvtdq2, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_, .cvtps2ph, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, .rm(.{}), ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108235,28 +110455,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108266,28 +110485,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108297,30 +110515,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108329,30 +110545,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .p_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -108364,26 +110578,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -108395,17 +110609,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
+ .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108413,8 +110627,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -108426,18 +110640,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108445,9 +110658,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -108458,121 +110671,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
+ .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .f16c, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .v_ss, .cvtsi2, .tmp1x, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_, .cvtps2ph, .tmp1q, .tmp1x, .rm(.{}), ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0x, .src0x, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .cvtdq2, .dst0x, .src0x, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse4_1, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_ps, .cvtdq2, .dst0y, .src0y, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108582,30 +110735,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtdq2, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108614,30 +110764,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtdq2, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108647,28 +110793,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ps, .cvtdq2, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse4_1, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108678,28 +110822,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ss, .cvtsi2, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -108712,27 +110855,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp3x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -108744,28 +110886,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp4d, .tmp3d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -108777,27 +110917,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse4_1, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -108809,27 +110948,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108838,32 +110975,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp4x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", .v_ps, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .v_ss, .cvtsi2, .tmp1x, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -108871,32 +111005,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp5d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp5d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._ss, .cvtsi2, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -108908,27 +111039,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse4_1, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -108940,17 +111070,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108958,9 +111087,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -108972,18 +111101,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp1d, .tmp4x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -108991,10 +111118,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -109005,30 +111132,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"8", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp5d, .tmp4d, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp5d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -109038,31 +111162,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp5x, .ui(0), ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"4", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse4_1, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -109072,31 +111194,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp5x, .ui(0), ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"4", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -109106,33 +111226,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp2d, .tmp5x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"4", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -109141,22 +111258,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp6d, .tmp5d, ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp6d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp2w, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"4", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -109166,8 +111279,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -109182,15 +111295,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp5x, .ui(0), ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
.{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse4_1, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -109200,8 +111313,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -109216,15 +111329,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp5x, .ui(0), ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
.{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
+ .required_features = .{ .@"64bit", .avx, null, null },
.src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -109234,8 +111347,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -109250,16 +111363,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .p_w, .extr, .tmp2d, .tmp5x, .ui(0), ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
.{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
.src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -109269,9 +111381,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneihf" } } },
- .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
- .{ .type = .f32, .kind = .mem },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -109285,23 +111397,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .tmp6d, .tmp5d, ._, ._ },
- .{ ._, ._, .mov, .tmp2d, .tmp6d, ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0w, .tmp1, .add_unaligned_size), .tmp2w, ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
.{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
.unused,
.unused,
.unused,
@@ -109316,19 +111426,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
+ .required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
.unused,
.unused,
.unused,
@@ -109343,19 +111453,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
.unused,
.unused,
.unused,
@@ -109370,19 +111480,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
+ .required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
.unused,
.unused,
.unused,
@@ -109397,13 +111507,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .signed_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
@@ -109424,13 +111534,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
+ .required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .signed_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
@@ -109451,13 +111561,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
@@ -109478,13 +111588,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
+ .required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
@@ -109505,39 +111615,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
},
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0d, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .src0d, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
+ .required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
},
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .dst0x, .src0d, ._, ._ },
+ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .cvtsi2, .dst0x, .src0d, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
@@ -109558,13 +111668,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .tmp0q, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0q, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
+ .required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
@@ -109585,117 +111695,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .dst0x, .tmp0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
+ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0q, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_gpr, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .dst0x, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, ._, .@"test", .src0q, .src0q, ._, ._ },
- .{ ._, ._ns, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, ._r, .sh, .src0q, .ui(1), ._, ._ },
- .{ ._, ._, .@"and", .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .@"or", .src0q, .tmp0q, ._, ._ },
- .{ ._, .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
- .{ ._, .v_ss, .add, .dst0x, .dst0x, .dst0d, ._ },
- .{ ._, ._mp, .j, .@"0f", ._, ._, ._ },
- .{ .@"1:", .v_ss, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._, .@"test", .src0q, .src0q, ._, ._ },
- .{ ._, ._ns, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, ._r, .sh, .src0q, .ui(1), ._, ._ },
- .{ ._, ._, .@"and", .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .@"or", .src0q, .tmp0q, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .dst0x, .src0q, ._, ._ },
- .{ ._, ._ss, .add, .dst0x, .dst0d, ._, ._ },
- .{ ._, ._mp, .j, .@"0f", ._, ._, ._ },
- .{ .@"1:", ._ss, .cvtsi2, .dst0x, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
- .unused,
- .unused,
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -109705,23 +111719,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
- .unused,
- .unused,
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -109731,51 +111747,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
- },
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .dword }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
.unused,
.unused,
.unused,
@@ -109785,102 +111774,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_d, .movsxb, .dst0x, .src0d, ._, ._ },
- .{ ._, ._ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movsxb, .dst0y, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, .p_d, .movzxb, .dst0x, .src0d, ._, ._ },
- .{ ._, ._ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .fi_, .ld, .src0w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movzxb, .dst0y, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i32, .kind = .mem },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -109891,55 +111801,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp0d, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp1d, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -109951,26 +111828,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .fi_, .ld, .src0d, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .i64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i64, .kind = .mem },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -109981,88 +111854,51 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp1q, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .cvtsi2, .dst0x, .src0q, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .extra_temps = .{
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .u32_0x1p52_hi_0x1p84_hi_0_0_mem },
+ .{ .type = .vector_2_f64, .kind = .f64_0x1p52_0x1p84_mem },
.unused,
.unused,
.unused,
@@ -110071,29 +111907,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_q, .mov, .tmp0x, .src0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
+ .{ ._, .vp_, .unpckldq, .tmp0x, .tmp0x, .lea(.tmp1x), ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
+ .{ ._, .v_pd, .sub, .tmp0x, .tmp0x, .lea(.tmp1x), ._ },
+ .{ ._, .v_pd, .unpckh, .dst0x, .tmp0x, .tmp0x, ._ },
+ .{ ._, .v_sd, .add, .dst0x, .dst0x, .tmp0x, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .u32_0x1p52_hi_0x1p84_hi_0_0_mem },
+ .{ .type = .vector_2_f64, .kind = .f64_0x1p52_0x1p84_mem },
.unused,
.unused,
.unused,
@@ -110102,29 +111938,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._q, .mov, .tmp0x, .src0q, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
+ .{ ._, .p_, .unpckldq, .tmp0x, .lea(.tmp1x), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
+ .{ ._, ._pd, .sub, .tmp0x, .lea(.tmp1x), ._, ._ },
+ .{ ._, ._pd, .mova, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._pd, .unpckh, .dst0x, .dst0x, ._, ._ },
+ .{ ._, ._sd, .add, .dst0x, .tmp0x, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -110134,28 +111970,22 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .fi_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -110165,28 +111995,36 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .src0q, .src0q, ._, ._ },
+ .{ ._, ._ns, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, ._r, .sh, .src0q, .ui(1), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._, .@"or", .src0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .src0q, ._, ._ },
+ .{ ._, .fi_, .ld, .dst0q, ._, ._, ._ },
+ .{ ._, .f_, .add, .tmp1t, .tmp1t, ._, ._ },
+ .{ ._, ._mp, .j, .@"0f", ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .in, ._, ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .dst0q, .src0q, ._, ._ },
+ .{ ._, .fi_, .ld, .dst0q, ._, ._, ._ },
+ .{ .@"0:", .f_p, .st, .dst0q, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -110195,29 +112033,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -110226,29 +112059,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -110257,29 +112085,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .qword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -110288,98 +112113,95 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_d, .movsxw, .dst0x, .src0q, ._, ._ },
- .{ ._, ._ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .movsxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movsxw, .dst0y, .src0x, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
+ .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0y, .dst0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_d, .movzxw, .dst0x, .src0q, ._, ._ },
- .{ ._, ._ps, .cvtdq2, .dst0x, .dst0x, ._, ._ },
+ .{ ._, .p_d, .movzxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
.{ .src = .{ .to_sse, .none, .none } },
},
.dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxw, .dst0y, .src0x, ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .dst0y, .dst0y, ._, ._ },
+ .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0y, .dst0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110400,16 +112222,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
+ .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"8", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110430,16 +112252,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, .vp_d, .movsxb, .tmp1x, .tmp1d, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, .v_pd, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110460,16 +112284,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, .p_d, .movsxb, .tmp1x, .tmp1d, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, ._pd, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110490,16 +112316,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
+ .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"8", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110520,16 +112346,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+ .{ ._, .vp_d, .movzxb, .tmp1x, .tmp1d, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, .v_pd, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110550,16 +112378,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+ .{ ._, .p_d, .movzxb, .tmp1x, .tmp1d, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, ._pd, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110567,8 +112397,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110581,16 +112411,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110598,8 +112428,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110612,25 +112442,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110643,25 +112473,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110674,60 +112504,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtdq2, .dst0x, .src0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._ps, .cvtdq2, .dst0x, .src0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_ps, .cvtdq2, .dst0y, .src0y, ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110737,26 +112532,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .cvtdq2, .tmp1y, .memia(.src0y, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110766,26 +112563,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .cvtdq2, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110795,26 +112594,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .cvtdq2, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110824,27 +112625,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ss, .cvtsi2, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110856,26 +112658,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110887,17 +112689,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110905,8 +112707,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110918,17 +112720,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -110936,8 +112738,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -110949,243 +112751,104 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_ps, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .v_ss, .cvtsi2, .tmp1x, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._ss, .cvtsi2, .tmp1x, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0y, .dst0x, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0y, .dst0x, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"4", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111194,62 +112857,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"4", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"4", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111258,99 +112887,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"4", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_d, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .movsxw, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
- .unused,
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
.unused,
- },
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
- .patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111358,33 +112918,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
- .each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(4), ._, ._ },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._d, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_d, .movsxw, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneisf" } } },
- .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -111392,29 +112949,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._ss, .mov, .memia(.dst0d, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -111425,23 +112978,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
- .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_d, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .vp_d, .movzxw, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -111452,25 +113009,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._d, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .p_d, .movzxw, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111479,25 +113041,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
- .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111506,25 +113072,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111533,25 +113103,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
- .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111560,25 +113134,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
- .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111587,25 +113165,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
- .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0d, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111614,104 +113196,63 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
- .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .src0d, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0x, .src0q, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .cvtsi2, .dst0x, .src0d, ._, ._ },
+ .{ ._, ._pd, .cvtdq2, .dst0x, .src0q, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .tmp0q, ._ },
+ .{ ._, .v_pd, .cvtdq2, .dst0y, .src0x, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
.unused,
- },
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .cvtsi2, .dst0x, .tmp0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
- },
- .extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -111722,24 +113263,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
- .{ ._, .fi_, .ld, .tmp1w, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_pd, .cvtdq2, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .unused,
.unused,
.unused,
.unused,
@@ -111750,22 +113292,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
- .{ ._, .fi_, .ld, .tmp1w, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_pd, .cvtdq2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, .v_pd, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -111777,23 +113321,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .fi_, .ld, .src0w, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._pd, .cvtdq2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._pd, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .{ .type = .i32, .kind = .mem },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111803,24 +113351,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp0d, ._, ._ },
- .{ ._, .fi_, .ld, .tmp1d, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111830,23 +113382,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .fi_, .ld, .src0d, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .{ .type = .i64, .kind = .mem },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111856,51 +113413,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
- .{ ._, .fi_, .ld, .tmp1q, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_sd, .cvtsi2, .dst0x, .dst0x, .src0q, ._ },
- } },
- }, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
- },
- .dst_temps = .{ .{ .rc = .sse }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .cvtsi2, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u32, .kind = .u32_0x1p52_hi_0x1p84_hi_0_0_mem },
- .{ .type = .vector_2_f64, .kind = .f64_0x1p52_0x1p84_mem },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111909,29 +113443,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_q, .mov, .tmp0x, .src0q, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
- .{ ._, .vp_, .unpckldq, .tmp0x, .tmp0x, .lea(.tmp1x), ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
- .{ ._, .v_pd, .sub, .tmp0x, .tmp0x, .lea(.tmp1x), ._ },
- .{ ._, .v_pd, .unpckh, .dst0x, .tmp0x, .tmp0x, ._ },
- .{ ._, .v_sd, .add, .dst0x, .dst0x, .tmp0x, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_u32, .kind = .u32_0x1p52_hi_0x1p84_hi_0_0_mem },
- .{ .type = .vector_2_f64, .kind = .f64_0x1p52_0x1p84_mem },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111940,29 +113474,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._q, .mov, .tmp0x, .src0q, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.tmp2), ._, ._ },
- .{ ._, .p_, .unpckldq, .tmp0x, .lea(.tmp1x), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
- .{ ._, ._pd, .sub, .tmp0x, .lea(.tmp1x), ._, ._ },
- .{ ._, ._pd, .mova, .dst0x, .tmp0x, ._, ._ },
- .{ ._, ._pd, .unpckh, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .add, .dst0x, .tmp0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -111972,20 +113506,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .fi_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .to_mut_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
- .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .reg = .st7 } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -111999,32 +113538,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .@"test", .src0q, .src0q, ._, ._ },
- .{ ._, ._ns, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, ._r, .sh, .src0q, .ui(1), ._, ._ },
- .{ ._, ._, .@"and", .tmp0d, .si(1), ._, ._ },
- .{ ._, ._, .@"or", .src0q, .tmp0q, ._, ._ },
- .{ ._, ._, .mov, .dst0q, .src0q, ._, ._ },
- .{ ._, .fi_, .ld, .dst0q, ._, ._, ._ },
- .{ ._, .f_, .add, .tmp1t, .tmp1t, ._, ._ },
- .{ ._, ._mp, .j, .@"0f", ._, ._, ._ },
- .{ .pseudo, .f_cstp, .in, ._, ._, ._, ._ },
- .{ .@"1:", ._, .mov, .dst0q, .src0q, ._, ._ },
- .{ ._, .fi_, .ld, .dst0q, ._, ._, ._ },
- .{ .@"0:", .f_p, .st, .dst0q, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_pd, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ ._, .v_sd, .cvtsi2, .tmp1x, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._ },
+ .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -112035,24 +113565,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._pd, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ ._, ._sd, .cvtsi2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112061,24 +113596,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112087,26 +113627,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .qword }, .any },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112115,103 +113658,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_d, .movsxb, .dst0x, .src0d, ._, ._ },
- .{ ._, ._pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .dst0y, .dst0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .word, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .word, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .p_d, .movzxb, .dst0x, .src0d, ._, ._ },
- .{ ._, ._pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .dst0y, .dst0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112221,27 +113690,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
- .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"8", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112251,29 +113721,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, .vp_d, .movsxb, .tmp1x, .tmp1d, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, .v_pd, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112283,30 +113752,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
- .{ ._, .p_d, .movsxb, .tmp1x, .tmp1d, ._, ._ },
- .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, ._pd, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112315,28 +113783,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
- .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"8", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112345,30 +113815,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
- .{ ._, .vp_d, .movzxb, .tmp1x, .tmp1d, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, .v_pd, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -112377,20 +113847,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
- .{ ._, .p_d, .movzxb, .tmp1x, .tmp1d, ._, ._ },
- .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, ._pd, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -112398,8 +113867,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112407,21 +113877,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -112429,8 +113899,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112438,21 +113909,21 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
@@ -112460,8 +113931,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
@@ -112469,217 +113941,235 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
.unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
.dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
.{ .type = .f64, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
- .unused,
- .unused,
},
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -112688,29 +114178,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -112719,29 +114206,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp1w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -112750,104 +114233,184 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .fi_, .ld, .src0w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i32, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .tmp0d, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp1d, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
.each = .{ .once = &.{
- .{ ._, .p_d, .movsxw, .dst0x, .src0q, ._, ._ },
- .{ ._, ._pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
+ .{ ._, .fi_, .ld, .src0d, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
.{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
+ .{ .type = .i64, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .dst0y, .dst0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp1q, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
+ .{ ._, .fi_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f32, .kind = .f32_0_0x1p64_mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .p_d, .movzxw, .dst0x, .src0q, ._, ._ },
- .{ ._, ._pd, .cvtdq2, .dst0x, .dst0q, ._, ._ },
+ .{ ._, .fi_, .ld, .src0q, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .memd(.src0d, 4), ._, ._ },
+ .{ ._, ._r, .sh, .tmp1d, .ui(31), ._, ._ },
+ .{ ._, .f_, .add, .leasi(.tmp0d, .@"4", .tmp1), ._, ._, ._ },
+ .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattixf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .dst0y, .dst0x, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntixf" } } },
+ .unused,
.unused,
.unused,
.unused,
@@ -112858,27 +114421,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateixf" } } },
.unused,
.unused,
.unused,
@@ -112888,28 +114447,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_d, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_d, .movsxw, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .tbyte }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneixf" } } },
.unused,
.unused,
.unused,
@@ -112919,30 +114475,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._d, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_d, .movsxw, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .x87, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -112954,25 +114506,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3w, .tmp2w, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp3w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -112984,26 +114539,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_d, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .vp_d, .movzxw, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, .v_ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3w, .tmp2w, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp3w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse4_1, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .x87, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113015,27 +114572,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._d, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .p_d, .movzxw, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3w, .tmp2w, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp3w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i16, .kind = .mem },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113044,29 +114602,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp3w, .tmp2w, ._, ._ },
+ .{ ._, .fi_, .ld, .tmp3w, ._, ._, ._ },
+ .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .unused,
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113078,26 +114639,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .unused,
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113109,26 +114673,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .unused,
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113140,26 +114707,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .unused,
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113171,25 +114741,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113199,63 +114771,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ .@"0:", .fi_, .ld, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .cvtdq2, .dst0x, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, ._pd, .cvtdq2, .dst0x, .src0q, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
- .patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_sse, .none, .none } },
- },
- .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
- .each = .{ .once = &.{
- .{ ._, .v_pd, .cvtdq2, .dst0y, .src0x, ._, ._ },
- } },
- }, .{
- .required_features = .{ .avx2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113265,26 +114801,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_pd, .cvtdq2, .tmp1y, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_unaligned_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113294,24 +114833,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_pd, .cvtdq2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, .v_pd, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113326,15 +114867,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._pd, .cvtdq2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._pd, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", .fi_, .ld, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
+ .required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -113342,8 +114883,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113358,23 +114899,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113389,23 +114931,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113415,28 +114957,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", .fi_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113449,25 +114990,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113480,26 +115022,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113511,25 +115054,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113538,29 +115084,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .v_pd, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
- .{ ._, .v_sd, .cvtsi2, .tmp1x, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._ },
- .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f64, .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113568,30 +115117,34 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._pd, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, ._sd, .cvtsi2, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp1, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .x87, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneixf" } } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
.unused,
.unused,
@@ -113601,26 +115154,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp1, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113629,29 +115187,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113660,29 +115215,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
+ .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113691,29 +115243,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113722,29 +115271,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
+ .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .edi }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113753,30 +115298,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .edi }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113784,31 +115324,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .signed_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .rdi }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113816,31 +115350,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg = .rdi }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113848,31 +115376,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113880,31 +115402,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113912,31 +115428,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -113944,66 +115454,56 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memsiad(.src0q, .@"2", .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .float = .xword }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
+ .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114013,31 +115513,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114047,31 +115546,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114081,31 +115579,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114115,31 +115612,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._sd, .mov, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneidf" } } },
- .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114149,30 +115645,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._ps, .movl, .memia(.dst0q, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114180,27 +115675,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
- .{ ._, .fi_, .ld, .tmp1w, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .avx, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114208,26 +115708,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
- .{ ._, .fi_, .ld, .tmp1w, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114235,25 +115741,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .fi_, .ld, .src0w, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .sse2, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .{ .type = .i32, .kind = .mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114261,26 +115774,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .tmp0d, ._, ._ },
- .{ ._, .fi_, .ld, .tmp1d, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114288,25 +115807,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .fi_, .ld, .src0d, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .sse, .slow_incdec, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } } },
- .{ .type = .i64, .kind = .mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114314,26 +115840,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
- .{ ._, .fi_, .ld, .tmp1q, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .signed_or_exclusive_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114341,23 +115873,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .x87 }, .unused },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .fi_, .ld, .src0q, ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .lea(.tmp1x), .tmp4x, ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u1, .kind = .{ .rc = .general_purpose } },
- .{ .type = .vector_2_f32, .kind = .f32_0_0x1p64_mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114366,29 +115906,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .rc = .x87 }, .unused },
- .clobbers = .{ .eflags = true },
+ .dst_temps = .{ .mem, .unused },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .fi_, .ld, .src0q, ._, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .memd(.src0d, 4), ._, ._ },
- .{ ._, ._r, .sh, .tmp1d, .ui(31), ._, ._ },
- .{ ._, .f_, .add, .leasi(.tmp0d, .@"4", .tmp1), ._, ._, ._ },
- .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattixf" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114397,24 +115937,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntixf" } } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114423,24 +115968,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateixf" } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114449,26 +115999,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .tbyte }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneixf" } } },
- .unused,
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114477,26 +116030,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .st0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114505,31 +116062,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp3w, .tmp2w, ._, ._ },
- .{ ._, .fi_, .ld, .tmp3w, ._, ._, ._ },
- .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114538,31 +116093,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp3w, .tmp2w, ._, ._ },
- .{ ._, .fi_, .ld, .tmp3w, ._, ._, ._ },
- .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114571,31 +116124,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp3w, .tmp2w, ._, ._ },
- .{ ._, .fi_, .ld, .tmp3w, ._, ._, ._ },
- .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i16, .kind = .mem },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114604,32 +116155,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp3w, .tmp2w, ._, ._ },
- .{ ._, .fi_, .ld, .tmp3w, ._, ._, ._ },
- .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114641,29 +116189,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u32, .kind = .{ .reg = .edi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114675,29 +116220,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114709,29 +116251,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .unused,
.unused,
.unused,
.unused,
@@ -114743,27 +116282,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .lea(.tmp1t), ._, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114773,27 +116310,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .fi_, .ld, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .i64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114806,26 +116344,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114838,25 +116375,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114866,27 +116403,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .fi_, .ld, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114899,27 +116437,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114931,26 +116468,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .x87, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
+ .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
- .unused,
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114959,28 +116497,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true },
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", .fi_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatdixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rdi } },
+ .{ .type = .i64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -114993,16 +116533,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -115010,9 +116550,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatundixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
- .unused,
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -115025,16 +116565,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
.{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memsia(.dst0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -115042,9 +116582,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.extra_temps = .{
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .u64, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -115059,15 +116599,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
+ .required_features = .{ .@"64bit", .sse, null, null },
.src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -115076,8 +116615,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .reg = .rdi } },
.{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -115092,15 +116631,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
.{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
.{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
+ .required_features = .{ .@"64bit", .avx, null, null },
.src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -115110,8 +116648,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -115126,16 +116664,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp1, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
.{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
.{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .x87, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
@@ -115145,8 +116682,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneixf" } } },
- .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
@@ -115161,134 +116698,185 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
.{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
- .{ ._, .f_p, .st, .memia(.dst0t, .tmp1, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
.{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
.{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
- .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ },
- .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
.patterns = &.{
- .{ .src = .{ .mem, .none, .none } },
- .{ .src = .{ .to_gpr, .none, .none } },
+ .{ .src = .{ .to_mem, .none, .none } },
},
.call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .reg = .rdi } },
+ .{ .type = .usize, .kind = .{ .reg = .rsi } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
.unused,
.unused,
.unused,
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+ .dst_temps = .{ .mem, .unused },
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ },
- .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
+ .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ } }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ @tagName(air_tag),
+ ty_op.ty.toType().fmt(pt),
+ cg.typeOf(ty_op.operand).fmt(pt),
+ ops[0].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+ },
+
+ .splat => |air_tag| if (use_old) try cg.airSplat(inst) else fallback: {
+ const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+ if (cg.typeOf(ty_op.operand).toIntern() == .bool_type) break :fallback try cg.airSplat(inst);
+ var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+ var res: [1]Temp = undefined;
+ cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_b, .broadcast, .dst0x, .src0b, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .edi }, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -115300,21 +116888,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, .vp_, .xor, .tmp0x, .tmp0x, .tmp0x, ._ },
+ .{ ._, .vp_b, .shuf, .dst0x, .src0x, .tmp0x, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .ssse3, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .edi }, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
.unused,
.unused,
.unused,
@@ -115326,22 +116913,47 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, .p_b, .shuf, .dst0x, .tmp0x, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .signed_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .rdi }, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_, .unpcklbw, .src0x, .src0x, ._, ._ },
+ .{ ._, .p_w, .shufl, .dst0x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ ._, .p_d, .shuf, .dst0x, .dst0x, .ui(0b00_00_00_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_b, .broadcast, .dst0y, .src0b, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
- .unused,
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_32_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
.unused,
.unused,
.unused,
@@ -115352,23 +116964,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .broadcast, .tmp1y, .src0b, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg = .rdi }, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
- .unused,
- .unused,
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
.unused,
.unused,
.unused,
@@ -115378,22 +116992,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, .vp_, .xor, .tmp0x, .tmp0x, .tmp0x, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .shuf, .tmp2x, .src0x, .tmp0x, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0x, .tmp1), .tmp2x, ._, ._ },
+ .{ ._, ._, .sub, .tmp1d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .ssse3, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
- .unused,
+ .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -115404,21 +117021,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .p_b, .shuf, .src0x, .tmp0x, ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp1), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp1d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
.patterns = &.{
- .{ .src = .{ .{ .to_reg_pair = .{ .rdi, .rsi } }, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -115430,23 +117050,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
+ .{ ._, .p_, .unpcklbw, .src0x, .src0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .p_w, .shufl, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ ._, .p_d, .shuf, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .required_features = .{ .slow_incdec, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115456,25 +117080,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .memi(.dst0b, .tmp0), .src0b, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .float = .xword }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any },
+ .src_constraints = .{ .{ .int = .byte }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115484,60 +117106,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .mem, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .memi(.dst0b, .tmp0), .src0b, ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
- },
- .call_frame = .{ .alignment = .@"16" },
- .extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
- .unused,
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_w, .broadcast, .dst0x, .src0w, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_splat_mem = .{ .size = .word } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115545,32 +117145,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .shuf, .dst0x, .src0x, .lea(.tmp0x), ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .ssse3, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_splat_mem = .{ .size = .word } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115578,32 +117170,49 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
.unused,
},
- .dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp0x), ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_w, .shufl, .dst0x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ ._, .p_d, .shuf, .dst0x, .dst0x, .ui(0b00_00_00_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .yword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_w, .broadcast, .dst0y, .src0w, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .yword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115612,31 +117221,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .broadcast, .tmp1y, .src0w, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_splat_mem = .{ .size = .word } } },
+ .{ .type = .vector_8_u16, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115645,31 +117249,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .vp_b, .shuf, .tmp2x, .src0x, .lea(.tmp0x), ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0x, .tmp0), .tmp2x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .ssse3, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_16_u8, .kind = .{ .pshufb_splat_mem = .{ .size = .word } } },
+ .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115678,31 +117278,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
+ .{ ._, .p_b, .shuf, .src0x, .lea(.tmp0x), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115711,31 +117307,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_w, .shufl, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .p_d, .shuf, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .word, .is = .word } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .word }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115744,31 +117335,151 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-2, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .memi(.dst0w, .tmp0), .src0w, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(2), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .broadcast, .dst0x, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ss, .broadcast, .dst0x, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ss, .broadcast, .dst0x, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .shuf, .dst0x, .src0x, .ui(0b00_00_00_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b00_00_00_00) },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .dst0x, .src0x, .ui(0b00_00_00_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b00_00_00_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .dst0x, .src0x, .ui(0b00_00_00_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b00_00_00_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_d, .broadcast, .dst0y, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_ss, .broadcast, .dst0y, .src0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int = .dword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_u32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115777,31 +117488,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .broadcast, .tmp1y, .src0d, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115810,31 +117517,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_ss, .broadcast, .tmp1y, .src0d, ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, .slow_incdec, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115843,31 +117545,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_ss, .broadcast, .tmp1x, .src0d, ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115876,30 +117573,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .lea(.tmp1x), .tmp4x, ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
- .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .shuf, .tmp1x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115909,28 +117601,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .shuf, .tmp1x, .tmp1x, .src0x, .ui(0b00_00_00_00) },
+ .{ .@"0:", .v_ps, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115940,28 +117629,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -115971,28 +117657,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, ._ps, .shuf, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ .@"0:", ._ps, .mova, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .float = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116002,28 +117685,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116033,28 +117713,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, ._ps, .shuf, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+ .{ .@"0:", ._ps, .mova, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .dword, .is = .dword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .dword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116064,28 +117740,152 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-4, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .memi(.dst0d, .tmp0), .src0d, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(4), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .broadcast, .dst0x, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .movddup, .dst0x, .src0q, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_, .movddup, .dst0x, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse3, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .movddup, .dst0x, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .dst0x, .src0x, .ui(0b01_00_01_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._pd, .shuf, .dst0x, .src0x, .ui(0b0_0), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .sse }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .p_d, .shuf, .dst0x, .src0x, .ui(0b01_00_01_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._pd, .shuf, .dst0x, .src0x, .ui(0b0_0), ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b01_00_01_00), ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .vp_q, .broadcast, .dst0y, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_sd, .broadcast, .dst0y, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int = .qword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116095,28 +117895,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .broadcast, .tmp1y, .src0q, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116126,28 +117924,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_sd, .broadcast, .tmp1y, .src0q, ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116157,28 +117953,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_, .movddup, .tmp1x, .src0q, ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse3, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116188,28 +117982,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, ._, .movddup, .tmp1x, .src0q, ._, ._ },
+ .{ .@"0:", ._pd, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116219,28 +118010,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .src0x, .ui(0b01_00_01_00), ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse, null, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u32, .kind = .{ .reg = .edi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunsitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116250,28 +118038,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, ._pd, .shuf, .src0x, .src0x, .ui(0b0_0), ._ },
+ .{ .@"0:", ._pd, .mova, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116281,28 +118066,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .p_d, .shuf, .tmp1x, .src0x, .ui(0b01_00_01_00), ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116312,28 +118094,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, ._pd, .shuf, .src0x, .src0x, .ui(0b0_0), ._ },
+ .{ .@"0:", ._pd, .mova, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .i64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatditf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116343,28 +118122,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, ._ps, .shuf, .src0x, .src0x, .ui(0b01_00_01_00), ._ },
+ .{ .@"0:", ._ps, .mova, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .qword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_gpr, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116374,28 +118150,78 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .memi(.dst0q, .tmp0), .src0q, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .xword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .yword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_i128, .broadcast, .dst0y, .src0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .yword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_i128, .insert, .dst0y, .src0y, .src0x, .ui(1) },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .yword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_f128, .broadcast, .dst0y, .src0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .scalar = .{ .of = .yword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_f128, .insert, .dst0y, .src0y, .src0x, .ui(1) },
+ } },
+ }, .{
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .yword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u128, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116405,28 +118231,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_i128, .broadcast, .tmp1y, .src0x, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .yword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatunditf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u128, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116436,29 +118259,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_i128, .insert, .tmp1y, .src0y, .src0x, .ui(1) },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .yword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116467,30 +118287,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_f128, .broadcast, .tmp1y, .src0x, ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .yword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116499,30 +118315,26 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_f128, .insert, .tmp1y, .src0y, .src0x, .ui(1) },
+ .{ .@"0:", .v_pd, .mova, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .avx, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .i64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floattitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116531,30 +118343,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse2, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116563,30 +118370,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .sse, null, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar = .{ .of = .xword, .is = .xword } }, .any },
+ .src_constraints = .{ .{ .int_or_float = .xword }, .any, .any },
.patterns = &.{
- .{ .src = .{ .to_mem, .none, .none } },
+ .{ .src = .{ .to_sse, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116595,30 +118397,79 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .memi(.dst0x, .tmp0), .src0x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ .{ .src = .{ .to_mut_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{} },
+ }, .{
+ .required_features = .{ .@"64bit", .avx2, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_i128, .broadcast, .dst0y, .src0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx2, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_i128, .insert, .dst0y, .src0y, .src0x, .ui(1) },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_f128, .broadcast, .dst0y, .src0x, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .dst_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_sse, .none, .none } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, .v_f128, .insert, .dst0y, .src0y, .src0x, .ui(1) },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .avx2, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdi } },
- .{ .type = .u64, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuntitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_u128, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116627,31 +118478,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .tmp2q, .memiad(.src0q, .tmp0, .add_unaligned_size, 8), ._, ._ },
- .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp4x, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_i128, .broadcast, .tmp1y, .src0x, ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116659,33 +118506,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_f128, .broadcast, .tmp1y, .src0x, ._, ._ },
+ .{ .@"0:", .v_pd, .mova, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .avx, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116693,33 +118534,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, .v_dqa, .mov, .tmp1x, .mem(.src0x), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .scalar_remainder_signed_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .sse2, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floateitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116727,33 +118562,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, ._dqa, .mov, .tmp1x, .mem(.src0x), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .sse, null, null },
+ .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .src_constraints = .{ .{ .float = .tbyte }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rdi } },
- .{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116761,33 +118590,27 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+ .{ ._, ._ps, .mova, .tmp1x, .mem(.src0x), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+ .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .dst_constraints = .{ .{ .scalar_remainder_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116795,33 +118618,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.dst0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2q, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._a, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
- .src_constraints = .{ .{ .scalar_remainder_unsigned_int = .{ .of = .dword, .is = .dword } }, .any, .any },
- .dst_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .required_features = .{ .@"64bit", null, null, null },
+ .dst_constraints = .{ .{ .scalar_remainder_int = .{ .of = .qword, .is = .qword } }, .any },
+ .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any, .any },
.patterns = &.{
.{ .src = .{ .to_mem, .none, .none } },
},
- .call_frame = .{ .alignment = .@"16" },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .reg = .rdi } },
.{ .type = .usize, .kind = .{ .reg = .rsi } },
- .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__floatuneitf" } } },
- .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .reg = .rcx } },
+ .unused,
+ .unused,
.unused,
.unused,
.unused,
@@ -116829,23 +118648,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{ .mem, .unused },
- .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
- .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2p, .tmp0p, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_bit_size), ._, ._ },
- .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
- .{ ._, ._ps, .mova, .memia(.dst0x, .tmp1, .add_unaligned_size), .tmp5x, ._, ._ },
- .{ ._, ._, .lea, .tmp0p, .leaa(.tmp0, .add_src0_elem_size), ._, ._ },
- .{ ._, ._, .add, .tmp1p, .si(16), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .sa(.dst0, .add_len), ._, ._ },
+ .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp2q, .mem(.src0), ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .sa(.src0, .add_size_div_8), ._, ._ },
+ .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
} },
} }) catch |err| switch (err) {
- error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
@tagName(air_tag),
ty_op.ty.toType().fmt(pt),
- cg.typeOf(ty_op.operand).fmt(pt),
ops[0].tracking(cg),
}),
else => |e| return e,
@@ -143084,16 +144899,17 @@ const Select = struct {
any_float,
po2_any,
bool_vec: Memory.Size,
- vec: Memory.Size,
signed_int_vec: Memory.Size,
signed_int_or_full_vec: Memory.Size,
unsigned_int_vec: Memory.Size,
size: Memory.Size,
multiple_size: Memory.Size,
int: Memory.Size,
+ int_or_float: Memory.Size,
scalar_int_is: Memory.Size,
scalar_signed_int_is: Memory.Size,
scalar_unsigned_int_is: Memory.Size,
+ scalar: OfIsSizes,
scalar_int: OfIsSizes,
scalar_signed_int: OfIsSizes,
scalar_unsigned_int: OfIsSizes,
@@ -143101,6 +144917,7 @@ const Select = struct {
scalar_exact_int: struct { of: Memory.Size, is: u16 },
scalar_exact_signed_int: struct { of: Memory.Size, is: u16 },
scalar_exact_unsigned_int: struct { of: Memory.Size, is: u16 },
+ multiple_scalar: OfIsSizes,
multiple_scalar_int: OfIsSizes,
multiple_scalar_signed_int: OfIsSizes,
multiple_scalar_unsigned_int: OfIsSizes,
@@ -143159,8 +144976,6 @@ const Select = struct {
.po2_any => std.math.isPowerOfTwo(ty.abiSize(zcu)),
.bool_vec => |size| ty.isVector(zcu) and ty.scalarType(zcu).toIntern() == .bool_type and
size.bitSize(cg.target) >= ty.vectorLen(zcu),
- .vec => |size| ty.isVector(zcu) and ty.scalarType(zcu).toIntern() != .bool_type and
- size.bitSize(cg.target) >= ty.abiSize(zcu),
.signed_int_vec => |size| ty.isVector(zcu) and @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
if (cg.intInfo(ty.childType(zcu))) |int_info| int_info.signedness == .signed else false,
.signed_int_or_full_vec => |size| ty.isVector(zcu) and @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
@@ -143173,6 +144988,12 @@ const Select = struct {
.size => |size| @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu),
.multiple_size => |size| ty.abiSize(zcu) % @divExact(size.bitSize(cg.target), 8) == 0,
.int => |size| if (cg.intInfo(ty)) |int_info| size.bitSize(cg.target) >= int_info.bits else false,
+ .int_or_float => |size| if (cg.intInfo(ty)) |int_info|
+ size.bitSize(cg.target) >= int_info.bits
+ else if (cg.floatBits(ty)) |float_bits|
+ size.bitSize(cg.target) == float_bits
+ else
+ false,
.scalar_int_is => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info|
size.bitSize(cg.target) >= int_info.bits
else
@@ -143185,6 +145006,13 @@ const Select = struct {
.signed => false,
.unsigned => size.bitSize(cg.target) >= int_info.bits,
} else false,
+ .scalar => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
+ if (cg.intInfo(ty.scalarType(zcu))) |int_info|
+ of_is.is.bitSize(cg.target) >= int_info.bits
+ else if (cg.floatBits(ty.scalarType(zcu))) |float_bits|
+ of_is.is.bitSize(cg.target) == float_bits
+ else
+ false,
.scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false,
.scalar_signed_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
@@ -143206,6 +145034,13 @@ const Select = struct {
.scalar_exact_unsigned_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned and
of_is.is == int_info.bits else false,
+ .multiple_scalar => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and
+ if (cg.intInfo(ty.scalarType(zcu))) |int_info|
+ of_is.is.bitSize(cg.target) >= int_info.bits
+ else if (cg.floatBits(ty.scalarType(zcu))) |float_bits|
+ of_is.is.bitSize(cg.target) == float_bits
+ else
+ false,
.multiple_scalar_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and
if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false,
.multiple_scalar_signed_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and
@@ -143557,6 +145392,7 @@ const Select = struct {
f64_0x1p52_0x1p84_mem,
u32_0x1p52_hi_0x1p84_hi_0_0_mem,
f32_0_0x1p64_mem,
+ pshufb_splat_mem: struct { of: Memory.Size = .none, size: Memory.Size },
pshufb_trunc_mem: struct { of: Memory.Size = .none, from: Memory.Size, to: Memory.Size },
pand_trunc_mem: struct { from: Memory.Size, to: Memory.Size },
pshufb_bswap_mem: struct { repeat: u4 = 1, size: Memory.Size, smear: u4 = 1 },
@@ -143809,6 +145645,26 @@ const Select = struct {
(try pt.floatValue(.f32, @as(f32, 0x1p64))).toIntern(),
} },
} }))), true },
+ .pshufb_splat_mem => |splat_spec| {
+ const zcu = pt.zcu;
+ assert(spec.type.isVector(zcu));
+ assert(spec.type.childType(zcu).toIntern() == .u8_type);
+ var elem_buf: [32]u8 = @splat(1 << 7);
+ const elems = elem_buf[0..spec.type.vectorLen(zcu)];
+ const of_bytes: u32 = @intCast(switch (splat_spec.of) {
+ .none => elems.len,
+ else => |of| @divExact(of.bitSize(cg.target), 8),
+ });
+ const size_bytes: u32 = @intCast(@divExact(splat_spec.size.bitSize(cg.target), 8));
+ var index: u32 = 0;
+ while (index < of_bytes) : (index += size_bytes) for (0..size_bytes) |byte_off| {
+ elems[index + byte_off] = @as(u4, @truncate(byte_off));
+ };
+ return .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = spec.type.toIntern(),
+ .storage = .{ .bytes = try zcu.intern_pool.getOrPutString(zcu.gpa, pt.tid, elems, .maybe_embedded_nulls) },
+ } }))), true };
+ },
.pshufb_trunc_mem => |trunc_spec| {
const zcu = pt.zcu;
assert(spec.type.isVector(zcu));
src/codegen/c/Type.zig
@@ -1788,6 +1788,21 @@ pub const Pool = struct {
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
+ .vector_2_u128_type => {
+ const vector_ctype = try pool.getVector(allocator, .{
+ .elem_ctype = .u128,
+ .len = 2,
+ });
+ if (!kind.isParameter()) return vector_ctype;
+ var fields = [_]Info.Field{
+ .{
+ .name = .{ .index = .array },
+ .ctype = vector_ctype,
+ .alignas = AlignAs.fromAbiAlignment(Type.u128.abiAlignment(zcu)),
+ },
+ };
+ return pool.fromFields(allocator, .@"struct", &fields, kind);
+ },
.vector_4_f16_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .f16,
src/Air.zig
@@ -1020,6 +1020,7 @@ pub const Inst = struct {
vector_4_i64_type = @intFromEnum(InternPool.Index.vector_4_i64_type),
vector_2_u64_type = @intFromEnum(InternPool.Index.vector_2_u64_type),
vector_4_u64_type = @intFromEnum(InternPool.Index.vector_4_u64_type),
+ vector_2_u128_type = @intFromEnum(InternPool.Index.vector_2_u128_type),
vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type),
vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type),
vector_2_f32_type = @intFromEnum(InternPool.Index.vector_2_f32_type),
src/InternPool.zig
@@ -4595,6 +4595,7 @@ pub const Index = enum(u32) {
vector_4_i64_type,
vector_2_u64_type,
vector_4_u64_type,
+ vector_2_u128_type,
vector_4_f16_type,
vector_8_f16_type,
vector_2_f32_type,
@@ -5139,6 +5140,8 @@ pub const static_keys = [_]Key{
.{ .vector_type = .{ .len = 2, .child = .u64_type } },
// @Vector(8, u64)
.{ .vector_type = .{ .len = 4, .child = .u64_type } },
+ // @Vector(2, u128)
+ .{ .vector_type = .{ .len = 2, .child = .u128_type } },
// @Vector(4, f16)
.{ .vector_type = .{ .len = 4, .child = .f16_type } },
// @Vector(8, f16)
@@ -11809,6 +11812,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
.vector_4_i64_type,
.vector_2_u64_type,
.vector_4_u64_type,
+ .vector_2_u128_type,
.vector_4_f16_type,
.vector_8_f16_type,
.vector_2_f32_type,
@@ -12156,6 +12160,7 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
.vector_4_i64_type,
.vector_2_u64_type,
.vector_4_u64_type,
+ .vector_2_u128_type,
.vector_4_f16_type,
.vector_8_f16_type,
.vector_2_f32_type,
src/Sema.zig
@@ -36540,6 +36540,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
.vector_4_i64_type,
.vector_2_u64_type,
.vector_4_u64_type,
+ .vector_2_u128_type,
.vector_4_f16_type,
.vector_8_f16_type,
.vector_2_f32_type,
src/Type.zig
@@ -4119,6 +4119,7 @@ pub const vector_2_i64: Type = .{ .ip_index = .vector_2_i64_type };
pub const vector_4_i64: Type = .{ .ip_index = .vector_4_i64_type };
pub const vector_2_u64: Type = .{ .ip_index = .vector_2_u64_type };
pub const vector_4_u64: Type = .{ .ip_index = .vector_4_u64_type };
+pub const vector_2_u128: Type = .{ .ip_index = .vector_2_u128_type };
pub const vector_4_f16: Type = .{ .ip_index = .vector_4_f16_type };
pub const vector_8_f16: Type = .{ .ip_index = .vector_8_f16_type };
pub const vector_2_f32: Type = .{ .ip_index = .vector_2_f32_type };
test/behavior/x86_64/unary.zig
@@ -1818,3 +1818,12 @@ test optionalNotEqualNull {
try test_optional_not_equal_null.testInts();
try test_optional_not_equal_null.testFloats();
}
+
+inline fn splat(comptime Type: type, lhs: Type) Type {
+ return @splat(lhs[0]);
+}
+test splat {
+ const test_splat = unary(splat, .{});
+ try test_splat.testIntVectors();
+ try test_splat.testFloatVectors();
+}
test/behavior/export_builtin.zig
@@ -57,10 +57,6 @@ test "exporting using namespace access" {
test "exporting comptime-known value" {
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
- if (builtin.zig_backend == .stage2_x86_64 and
- (builtin.target.ofmt != .elf and
- builtin.target.ofmt != .macho and
- builtin.target.ofmt != .coff)) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
test/behavior/vector.zig
@@ -31,8 +31,7 @@ test "vector wrap operators" {
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
- if (builtin.zig_backend == .stage2_x86_64 and
- !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .sse4_1)) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
const S = struct {
fn doTheTest() !void {
@@ -350,12 +349,12 @@ test "vector casts of sizes not divisible by 8" {
}
test "vector @splat" {
- 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_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_llvm and
builtin.os.tag == .macos)
@@ -1511,9 +1510,6 @@ test "boolean vector with 2 or more booleans" {
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
- // TODO: try removing this after <https://github.com/ziglang/zig/issues/13782>:
- if (!(builtin.os.tag == .linux and builtin.cpu.arch == .x86_64)) return;
-
const vec1 = @Vector(2, bool){ true, true };
_ = vec1;
test/cases/compile_errors/@import_zon_bad_type.zig
@@ -117,9 +117,9 @@ export fn testMutablePointer() void {
// tmp.zig:37:38: note: imported here
// neg_inf.zon:1:1: error: expected type '?u8'
// tmp.zig:57:28: note: imported here
-// neg_inf.zon:1:1: error: expected type 'tmp.testNonExhaustiveEnum__enum_495'
+// neg_inf.zon:1:1: error: expected type 'tmp.testNonExhaustiveEnum__enum_496'
// tmp.zig:62:39: note: imported here
-// neg_inf.zon:1:1: error: expected type 'tmp.testUntaggedUnion__union_497'
+// neg_inf.zon:1:1: error: expected type 'tmp.testUntaggedUnion__union_498'
// tmp.zig:67:44: note: imported here
-// neg_inf.zon:1:1: error: expected type 'tmp.testTaggedUnionVoid__union_500'
+// neg_inf.zon:1:1: error: expected type 'tmp.testTaggedUnionVoid__union_501'
// tmp.zig:72:50: note: imported here
test/cases/compile_errors/anytype_param_requires_comptime.zig
@@ -15,6 +15,6 @@ pub export fn entry() void {
// error
//
// :7:25: error: unable to resolve comptime value
-// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_469.C' must be comptime-known
+// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_470.C' must be comptime-known
// :4:16: note: struct requires comptime because of this field
// :4:16: note: types are not available at runtime
test/cases/compile_errors/bogus_method_call_on_slice.zig
@@ -16,5 +16,5 @@ pub export fn entry2() void {
//
// :3:6: error: no field or member function named 'copy' in '[]const u8'
// :9:8: error: no field or member function named 'bar' in '@TypeOf(.{})'
-// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_473'
+// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_474'
// :12:6: note: struct declared here
test/cases/compile_errors/coerce_anon_struct.zig
@@ -6,6 +6,6 @@ export fn foo() void {
// error
//
-// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_462'
+// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_463'
// :3:16: note: struct declared here
// :1:11: note: struct declared here
test/cases/compile_errors/redundant_try.zig
@@ -44,9 +44,9 @@ comptime {
//
// :5:23: error: expected error union type, found 'comptime_int'
// :10:23: error: expected error union type, found '@TypeOf(.{})'
-// :15:23: error: expected error union type, found 'tmp.test2__struct_499'
+// :15:23: error: expected error union type, found 'tmp.test2__struct_500'
// :15:23: note: struct declared here
-// :20:27: error: expected error union type, found 'tmp.test3__struct_501'
+// :20:27: error: expected error union type, found 'tmp.test3__struct_502'
// :20:27: note: struct declared here
// :25:23: error: expected error union type, found 'struct { comptime *const [5:0]u8 = "hello" }'
// :31:13: error: expected error union type, found 'u32'