Commit b9531f5de6
Changed files (11)
lib
std
zig
src
test
behavior
x86_64
lib/std/zig/Zir.zig
@@ -2128,7 +2128,7 @@ pub const Inst = struct {
ref_start_index = static_len,
_,
- pub const static_len = 92;
+ pub const static_len = 93;
pub fn toRef(i: Index) Inst.Ref {
return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
@@ -2229,6 +2229,7 @@ pub const Inst = struct {
vector_4_u64_type,
vector_4_f16_type,
vector_8_f16_type,
+ vector_2_f32_type,
vector_4_f32_type,
vector_8_f32_type,
vector_2_f64_type,
src/arch/x86_64/CodeGen.zig
@@ -2414,7 +2414,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}
fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
- @setEvalBranchQuota(3_900);
+ @setEvalBranchQuota(4_100);
const pt = cg.pt;
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
@@ -5567,13 +5567,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
.{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
.{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -5600,14 +5600,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
.{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
.{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
.{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -5634,7 +5634,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
.{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
.{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
@@ -5642,7 +5642,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
.{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -5657,7 +5657,7 @@ 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 = .eax } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
@@ -5669,7 +5669,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
.{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
@@ -5680,7 +5680,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
.{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
.{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -5878,14 +5878,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
.{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
.{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
.{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
.{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
.{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -5911,7 +5911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
@@ -5919,7 +5919,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
.{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
.{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -5945,7 +5945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
@@ -5955,7 +5955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
.{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },
.{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -6179,14 +6179,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
.{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
.{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
.{ ._, .v_pd, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
.{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
.{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -6212,7 +6212,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
@@ -6220,7 +6220,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
.{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
.{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -6246,7 +6246,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
@@ -6256,7 +6256,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
.{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },
.{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -6283,14 +6283,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
.{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
.{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -6580,12 +6580,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -6612,12 +6612,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -6644,12 +6644,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
} }) catch |err| switch (err) {
@@ -9411,13 +9411,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
.{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
.{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -9444,14 +9444,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
.{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
.{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
.{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
- .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -9478,7 +9478,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
.{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
.{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
@@ -9486,7 +9486,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
.{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -9501,7 +9501,7 @@ 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 = .eax } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f16, .kind = .{ .reg = .xmm0 } },
.{ .type = .f16, .kind = .{ .reg = .xmm1 } },
@@ -9513,7 +9513,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
.{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
@@ -9524,7 +9524,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
.{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
.{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -9722,14 +9722,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
.{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
.{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
.{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
.{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
.{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -9755,7 +9755,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
@@ -9763,7 +9763,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
.{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
.{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -9789,7 +9789,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
@@ -9799,7 +9799,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
.{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },
.{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -10023,14 +10023,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
.{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
.{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
.{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
.{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
.{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -10056,7 +10056,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
@@ -10064,7 +10064,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
.{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
.{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -10090,7 +10090,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
@@ -10100,7 +10100,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
.{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },
.{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -10127,14 +10127,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
.{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
.{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -10412,12 +10412,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -10444,12 +10444,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -10476,12 +10476,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.dst_temps = .{.mem},
.clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
.{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
.{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
.{ ._, ._, .call, .tmp3d, ._, ._, ._ },
.{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
- .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
} }) catch |err| switch (err) {
@@ -11990,13 +11990,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{.mem},
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp2q, .leai(.qword, .tmp1, .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ },
+ .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.patterns = &.{
@@ -12015,13 +12016,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.dst_temps = .{.mem},
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
.{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
- .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ },
- .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
- .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .leai(.dword, .tmp1, .tmp0), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ },
+ .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 4), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
} },
} }) catch |err| switch (err) {
error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
@@ -20246,7 +20248,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ },
.{ ._, ._, .sub, .tmp1d, .si(8), ._, ._ },
.{ ._, ._a, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
.{ ._, ._b, .j, .@"0b", ._, ._, ._ },
} },
}, .{
@@ -21899,7 +21901,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.patterns = &.{
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ },
} },
@@ -21910,7 +21912,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.patterns = &.{
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ },
} },
@@ -21921,7 +21923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.patterns = &.{
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_, .cvtps2ph, .dst0x, .src0y, .rm(.{}), ._ },
} },
@@ -21949,6 +21951,152 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_ps, .mova, .tmp1y, .memsia(.src0y, .@"2", .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_size), .tmp1y, .rm(.{}), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .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 },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
@@ -21975,60 +22123,158 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
- .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
.patterns = &.{
- .{ .src = .{ .mem, .none } },
+ .{ .src = .{ .to_mem, .none } },
},
- .dst_temps = .{.{ .rc = .sse }},
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_ss, .cvtsd2, .dst0x, .dst0x, .src0q, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
- .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
.patterns = &.{
- .{ .src = .{ .to_sse, .none } },
+ .{ .src = .{ .to_mem, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_ss, .cvtsd2, .dst0x, .src0x, .src0q, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .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 = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
.patterns = &.{
- .{ .src = .{ .mut_sse, .none } },
+ .{ .src = .{ .mem, .none } },
},
- .dst_temps = .{.{ .ref = .src0 }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
- .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_ss, .cvtsd2, .dst0x, .dst0x, .src0q, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
+ .required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
.patterns = &.{
- .{ .src = .{ .mem, .none } },
- .{ .src = .{ .sse, .none } },
+ .{ .src = .{ .to_sse, .none } },
},
.dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
- .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ss, .cvtsd2, .dst0x, .src0x, .src0q, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none } },
+ .{ .src = .{ .mem, .none } },
+ .{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .ref = .src0 }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
+ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
.{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },
} },
}, .{
@@ -22062,9 +22308,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtpd2, .dst0x, .src0q, ._, ._ },
+ .{ ._, .v_ps, .cvtpd2, .dst0x, .src0x, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
@@ -22074,9 +22320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
- .{ ._, ._ps, .cvtpd2, .dst0x, .src0q, ._, ._ },
+ .{ ._, ._ps, .cvtpd2, .dst0x, .src0x, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null, null, null },
@@ -22086,12 +22332,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtpd2, .dst0x, .src0y, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, .v_ps, .cvtpd2, .dst0y, .src0x, ._, ._ },
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtpd2, .tmp1x, .memsia(.src0y, .@"2", .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ },
+ .{ .@"0:", ._ps, .cvtpd2, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
.patterns = &.{
@@ -22117,7 +22444,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
+ .required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
.patterns = &.{
@@ -22143,7 +22470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
+ .required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
.patterns = &.{
@@ -22168,6 +22495,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ },
.{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .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 = "__truncxfhf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, .v_dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .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 = "__truncxfhf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .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 = "__truncxfhf2" } } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .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 = "__truncxfhf2" } } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._ps, .mova, .mem(.tmp2x), .tmp1x, ._, ._ },
+ .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .mem(.tmp2d), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
@@ -22192,6 +22642,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .f_, .ld, .src0t, ._, ._, ._ },
.{ ._, .f_p, .st, .dst0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
@@ -22216,6 +22693,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .f_, .ld, .src0t, ._, ._, ._ },
.{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
@@ -22240,6 +22744,125 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse4_1, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ },
+ .{ ._, ._, .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 = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
@@ -22264,6 +22887,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_ss, .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 = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
@@ -22288,6 +22998,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .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 = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .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 = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
@@ -22312,6 +23109,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ .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 = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
} }) catch |err| switch (err) {
error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
@tagName(air_tag),
@@ -22334,7 +23221,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.patterns = &.{
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
} },
@@ -22346,7 +23233,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
} },
@@ -22358,7 +23245,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
} },
@@ -22386,6 +23273,124 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, .mem(.tmp2d), .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .f16c, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
@@ -22393,7 +23398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.patterns = &.{
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
.{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .dst0d, ._ },
@@ -22406,7 +23411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
.{ ._, .v_pd, .cvtps2, .dst0x, .dst0q, ._, ._ },
@@ -22419,11 +23424,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
.{ ._, .v_pd, .cvtps2, .dst0y, .dst0x, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .dst_constraints = .{.{ .scalar_float = .{ .of = .zword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .mem, .none } },
+ .{ .src = .{ .to_sse, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .each = .{ .once = &.{
+ .{ ._, .v_ps, .cvtph2, .tmp0y, .src0x, ._, ._ },
+ .{ ._, .v_pd, .cvtps2, .tmp1y, .tmp0x, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp0x, .tmp0y, .ui(1), ._ },
+ .{ ._, .v_pd, .mova, .mem(.dst0y), .tmp1y, ._, ._ },
+ .{ ._, .v_pd, .cvtps2, .tmp1y, .tmp0x, ._, ._ },
+ .{ ._, .v_pd, .mova, .memd(.dst0y, 32), .tmp1y, ._, ._ },
+ } },
}, .{
.required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
@@ -22448,6 +23481,128 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .f16c, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .cvtps2, .tmp2y, .tmp1x, ._, ._ },
+ .{ ._, .v_f128, .extract, .tmp1x, .tmp1y, .ui(1), ._ },
+ .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_size), .tmp2y, ._, ._ },
+ .{ ._, .v_pd, .cvtps2, .tmp2y, .tmp1x, ._, ._ },
+ .{ ._, .v_pd, .mova, .memsiad(.dst0y, .@"4", .tmp0, .add_size, 32), .tmp2y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, ._sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, .mem(.tmp2d), .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ps, .movl, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .f16c, .x87, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
@@ -22456,7 +23611,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_sse, .none } },
},
.extra_temps = .{
- .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+ .{ .type = .f32, .kind = .{ .rc = .sse } },
.{ .type = .f32, .kind = .mem },
.{ .type = .f80, .kind = .{ .reg = .st7 } },
.unused,
@@ -22497,6 +23652,100 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ .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_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, .mem(.tmp2d), .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
@@ -22523,60 +23772,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
} },
}, .{
.required_features = .{ .avx, null, null, null },
- .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
- .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
.patterns = &.{
- .{ .src = .{ .mem, .none } },
+ .{ .src = .{ .to_mem, .none } },
},
- .dst_temps = .{.{ .rc = .sse }},
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
- .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .src0d, ._ },
+ .{ ._, ._, .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, ._, ._, ._ },
+ .{ ._, .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 = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
- .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
.patterns = &.{
- .{ .src = .{ .to_sse, .none } },
+ .{ .src = .{ .to_mem, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
.each = .{ .once = &.{
- .{ ._, .v_sd, .cvtss2, .dst0x, .src0x, .src0d, ._ },
+ .{ ._, ._, .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, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f16, .kind = .{ .reg = .ax } },
+ .{ .type = .f32, .kind = .mem },
+ .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, .mem(.tmp2d), .tmp1d, ._, ._ },
+ .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
+ .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
.patterns = &.{
- .{ .src = .{ .mut_sse, .none } },
+ .{ .src = .{ .mem, .none } },
},
- .dst_temps = .{.{ .ref = .src0 }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
- .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },
+ .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
+ .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .src0d, ._ },
} },
}, .{
- .required_features = .{ .sse2, null, null, null },
+ .required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
.patterns = &.{
- .{ .src = .{ .mem, .none } },
- .{ .src = .{ .sse, .none } },
+ .{ .src = .{ .to_sse, .none } },
},
.dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
- .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
- .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },
+ .{ ._, .v_sd, .cvtss2, .dst0x, .src0x, .src0d, ._ },
} },
}, .{
.required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
.patterns = &.{
- .{ .src = .{ .to_mut_sse, .none } },
+ .{ .src = .{ .mem, .none } },
+ .{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .ref = .src0 }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
+ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
.{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },
} },
}, .{
@@ -22610,7 +23928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_pd, .cvtps2, .dst0x, .src0q, ._, ._ },
} },
@@ -22622,7 +23940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, ._pd, .cvtps2, .dst0x, .src0q, ._, ._ },
} },
@@ -22634,10 +23952,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .mem, .none } },
.{ .src = .{ .to_sse, .none } },
},
- .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
+ .dst_temps = .{.{ .rc = .sse }},
.each = .{ .once = &.{
.{ ._, .v_pd, .cvtps2, .dst0y, .src0x, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_pd, .cvtps2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._pd, .cvtps2, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._pd, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .ld, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, .f_p, .st, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
@@ -22661,6 +24060,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .f_, .ld, .src0d, ._, ._, ._ },
.{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .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 = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
@@ -22685,6 +24110,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.each = .{ .once = &.{
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse2, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .sse, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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), ._, ._ },
+ .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+ .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
}, .{
.required_features = .{ .x87, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
@@ -22708,6 +24220,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, .f_, .ld, .src0q, ._, ._, ._ },
.{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .x87, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f80, .kind = .{ .reg = .st7 } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
+ .{ .@"0:", .f_, .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 = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
@@ -22733,7 +24271,95 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .call, .tmp0d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .avx, null, null },
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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_dqa, .mov, .memsia(.dst0x, .@"2", .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 },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, ._dqa, .mov, .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_float = .{ .of = .qword, .is = .qword } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .none } },
+ },
+ .call_frame = .{ .alignment = .@"16" },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
+ .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
.patterns = &.{
@@ -22759,7 +24385,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse2, null, null },
+ .required_features = .{ .sse2, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
.patterns = &.{
@@ -22785,7 +24411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .sse, null, null },
+ .required_features = .{ .sse, null, null, null },
.src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
.dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
.patterns = &.{
@@ -22810,6 +24436,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ },
.{ ._, ._, .call, .tmp1d, ._, ._, ._ },
} },
+ }, .{
+ .required_features = .{ .avx, null, null, null },
+ .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .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 = "__extendxftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, .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 = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .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 = "__extendxftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, ._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 = .tbyte } }, .any },
+ .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .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 = "__extendxftf2" } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{.mem},
+ .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, ._, ._, ._ },
+ .{ ._, ._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),
@@ -30715,6 +32431,7 @@ fn genBinOp(
try self.copyToTmpRegister(rhs_ty, rhs_mcv)).to128(),
);
try self.asmRegisterRegister(.{ .v_ps, .cvtph2 }, dst_reg, dst_reg);
+ try self.asmRegisterRegister(.{ .v_, .movshdup }, tmp_reg, dst_reg);
break :src .{ .register = tmp_reg };
} else rhs_mcv;
@@ -43508,7 +45225,7 @@ const Select = struct {
top: u3,
fn emitLabel(s: *Select, label_index: Label) void {
- if (label_index == ._) return;
+ assert(@intFromEnum(label_index) < @intFromEnum(Label._));
const label = &s.labels[@intFromEnum(label_index)];
for (&label.forward) |*reloc| {
if (reloc.*) |r| s.cg.performReloc(r);
@@ -43518,29 +45235,35 @@ const Select = struct {
}
fn emit(s: *Select, inst: Instruction) !void {
- s.emitLabel(inst[0]);
const mir_tag: Mir.Inst.FixedTag = .{ inst[1], inst[2] };
- var mir_ops: [4]CodeGen.Operand = undefined;
- inline for (&mir_ops, 3..) |*mir_op, inst_index| mir_op.* = try inst[inst_index].lower(s);
- s.cg.asmOps(mir_tag, mir_ops) catch |err| switch (err) {
- error.InvalidInstruction => {
- const fixes = @tagName(mir_tag[0]);
- const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;
- return s.cg.fail(
- "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'",
- .{
- fixes[0..fixes_blank],
- @tagName(mir_tag[1]),
- fixes[fixes_blank + 1 ..],
- @tagName(mir_ops[0]),
- @tagName(mir_ops[1]),
- @tagName(mir_ops[2]),
- @tagName(mir_ops[3]),
- },
- );
- },
- else => |e| return e,
- };
+ pseudo: {
+ switch (inst[0]) {
+ .@"0:", .@"1:", .@"2:" => |label| s.emitLabel(label),
+ ._ => {},
+ .pseudo => break :pseudo,
+ }
+ var mir_ops: [4]CodeGen.Operand = undefined;
+ inline for (&mir_ops, 3..) |*mir_op, inst_index| mir_op.* = try inst[inst_index].lower(s);
+ s.cg.asmOps(mir_tag, mir_ops) catch |err| switch (err) {
+ error.InvalidInstruction => {
+ const fixes = @tagName(mir_tag[0]);
+ const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;
+ return s.cg.fail(
+ "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'",
+ .{
+ fixes[0..fixes_blank],
+ @tagName(mir_tag[1]),
+ fixes[fixes_blank + 1 ..],
+ @tagName(mir_ops[0]),
+ @tagName(mir_ops[1]),
+ @tagName(mir_ops[2]),
+ @tagName(mir_ops[3]),
+ },
+ );
+ },
+ else => |e| return e,
+ };
+ }
switch (mir_tag[0]) {
.f_ => switch (mir_tag[1]) {
.@"2xm1",
@@ -43594,32 +45317,6 @@ const Select = struct {
.yl2x => s.top +%= 1,
else => unreachable,
},
- .fb_ => switch (mir_tag[1]) {
- .ld => s.top -%= 1,
- else => unreachable,
- },
- .fb_p => switch (mir_tag[1]) {
- .st => s.top +%= 1,
- else => unreachable,
- },
- .fi_ => switch (mir_tag[1]) {
- .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {},
- .ld => s.top -%= 1,
- else => unreachable,
- },
- .fi_p => switch (mir_tag[1]) {
- .com, .st => s.top +%= 1,
- else => unreachable,
- },
- .fn_ => switch (mir_tag[1]) {
- .clex => {},
- .init, .save => s.top = 0,
- else => unreachable,
- },
- .fn_cw, .fn_env, .fn_sw => switch (mir_tag[1]) {
- .st => {},
- else => unreachable,
- },
.f_cstp => switch (mir_tag[1]) {
.de => s.top -%= 1,
.in => s.top +%= 1,
@@ -43646,6 +45343,32 @@ const Select = struct {
.com, .ucom => s.top +%= 2,
else => unreachable,
},
+ .fb_ => switch (mir_tag[1]) {
+ .ld => s.top -%= 1,
+ else => unreachable,
+ },
+ .fb_p => switch (mir_tag[1]) {
+ .st => s.top +%= 1,
+ else => unreachable,
+ },
+ .fi_ => switch (mir_tag[1]) {
+ .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {},
+ .ld => s.top -%= 1,
+ else => unreachable,
+ },
+ .fi_p => switch (mir_tag[1]) {
+ .com, .st => s.top +%= 1,
+ else => unreachable,
+ },
+ .fn_ => switch (mir_tag[1]) {
+ .clex => {},
+ .init, .save => s.top = 0,
+ else => unreachable,
+ },
+ .fn_cw, .fn_env, .fn_sw => switch (mir_tag[1]) {
+ .st => {},
+ else => unreachable,
+ },
.fx_ => switch (mir_tag[1]) {
.rstor => unreachable,
.save => {},
@@ -44199,7 +45922,7 @@ const Select = struct {
Select.Operand,
Select.Operand,
};
- const Label = enum { @"0:", @"1:", @"2:", @"_" };
+ const Label = enum { @"0:", @"1:", @"2:", @"_", pseudo };
const Operand = struct {
tag: Tag,
base: Ref.Sized = .none,
@@ -44228,7 +45951,7 @@ const Select = struct {
ptr_bit_size,
size,
size_sub_elem_size,
- src0_unaligned_size,
+ unaligned_size,
bit_size,
src0_bit_size,
len,
@@ -44252,8 +45975,8 @@ const Select = struct {
const sub_size_div_4: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"4" };
const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" };
const add_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_size, .op = .mul, .rhs = .@"1" };
- const add_src0_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" };
- const sub_src0_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" };
+ const add_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" };
+ const sub_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" };
const add_2_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"2" };
const add_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };
const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };
@@ -44744,7 +46467,7 @@ const Select = struct {
const ty = op.base.ref.deref(s).typeOf(s.cg);
break :lhs @intCast(ty.abiSize(s.cg.pt.zcu) - ty.elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu));
},
- .src0_unaligned_size => @intCast(s.cg.unalignedSize(Select.Operand.Ref.src0.deref(s).typeOf(s.cg))),
+ .unaligned_size => @intCast(s.cg.unalignedSize(op.base.ref.deref(s).typeOf(s.cg))),
.bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),
.src0_bit_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),
.len => @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu)),
src/codegen/c/Type.zig
@@ -1707,6 +1707,21 @@ pub const Pool = struct {
};
return pool.fromFields(allocator, .@"struct", &fields, kind);
},
+ .vector_2_f32_type => {
+ const vector_ctype = try pool.getVector(allocator, .{
+ .elem_ctype = .f32,
+ .len = 2,
+ });
+ if (!kind.isParameter()) return vector_ctype;
+ var fields = [_]Info.Field{
+ .{
+ .name = .{ .index = .array },
+ .ctype = vector_ctype,
+ .alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)),
+ },
+ };
+ return pool.fromFields(allocator, .@"struct", &fields, kind);
+ },
.vector_4_f32_type => {
const vector_ctype = try pool.getVector(allocator, .{
.elem_ctype = .f32,
src/Air.zig
@@ -1001,6 +1001,7 @@ pub const Inst = struct {
vector_4_u64_type = @intFromEnum(InternPool.Index.vector_4_u64_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),
vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type),
vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type),
vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type),
src/InternPool.zig
@@ -4593,6 +4593,7 @@ pub const Index = enum(u32) {
vector_4_u64_type,
vector_4_f16_type,
vector_8_f16_type,
+ vector_2_f32_type,
vector_4_f32_type,
vector_8_f32_type,
vector_2_f64_type,
@@ -5124,6 +5125,8 @@ pub const static_keys = [_]Key{
.{ .vector_type = .{ .len = 4, .child = .f16_type } },
// @Vector(8, f16)
.{ .vector_type = .{ .len = 8, .child = .f16_type } },
+ // @Vector(2, f32)
+ .{ .vector_type = .{ .len = 2, .child = .f32_type } },
// @Vector(4, f32)
.{ .vector_type = .{ .len = 4, .child = .f32_type } },
// @Vector(8, f32)
@@ -11778,6 +11781,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
.vector_4_u64_type,
.vector_4_f16_type,
.vector_8_f16_type,
+ .vector_2_f32_type,
.vector_4_f32_type,
.vector_8_f32_type,
.vector_2_f64_type,
@@ -12117,6 +12121,7 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
.vector_4_u64_type,
.vector_4_f16_type,
.vector_8_f16_type,
+ .vector_2_f32_type,
.vector_4_f32_type,
.vector_8_f32_type,
.vector_2_f64_type,
src/Sema.zig
@@ -36733,6 +36733,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
.vector_4_u64_type,
.vector_4_f16_type,
.vector_8_f16_type,
+ .vector_2_f32_type,
.vector_4_f32_type,
.vector_8_f32_type,
.vector_2_f64_type,
src/Type.zig
@@ -4209,6 +4209,7 @@ 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_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 };
pub const vector_4_f32: Type = .{ .ip_index = .vector_4_f32_type };
pub const vector_8_f32: Type = .{ .ip_index = .vector_8_f32_type };
pub const vector_2_f64: Type = .{ .ip_index = .vector_2_f64_type };
test/behavior/x86_64/math.zig
@@ -10810,6 +10810,7 @@ inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type) Resul
test floatCast {
const test_float_cast = cast(floatCast, .{ .strict = true });
try test_float_cast.testFloats();
+ try test_float_cast.testFloatVectors();
}
inline fn equal(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs == rhs) {
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_463.C' must be comptime-known
+// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_464.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_467'
+// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_468'
// :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_456'
+// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_457'
// :3:16: note: struct declared here
// :1:11: note: struct declared here