authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-01-29 23:55:55-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-01-31 23:00:34-05:00
logb9531f5de6a36d016a551be68080a314b90eb154
tree127fb77990d6f2f7609b723ffa9470c0ab9c8106
parentafa74c6b213efb1ff85b86ce4a9edd5cc03e5a9b

x86_64: rewrite float vector conversions


11 files changed, 1948 insertions(+), 200 deletions(-)

lib/std/zig/Zir.zig+2-1
...@@ -2128,7 +2128,7 @@ pub const Inst = struct {...@@ -2128,7 +2128,7 @@ pub const Inst = struct {
2128 ref_start_index = static_len,2128 ref_start_index = static_len,
2129 _,2129 _,
21302130
2131 pub const static_len = 92;2131 pub const static_len = 93;
21322132
2133 pub fn toRef(i: Index) Inst.Ref {2133 pub fn toRef(i: Index) Inst.Ref {
2134 return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));2134 return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
...@@ -2229,6 +2229,7 @@ pub const Inst = struct {...@@ -2229,6 +2229,7 @@ pub const Inst = struct {
2229 vector_4_u64_type,2229 vector_4_u64_type,
2230 vector_4_f16_type,2230 vector_4_f16_type,
2231 vector_8_f16_type,2231 vector_8_f16_type,
2232 vector_2_f32_type,
2232 vector_4_f32_type,2233 vector_4_f32_type,
2233 vector_8_f32_type,2234 vector_8_f32_type,
2234 vector_2_f64_type,2235 vector_2_f64_type,
src/Air.zig+1
...@@ -1001,6 +1001,7 @@ pub const Inst = struct {...@@ -1001,6 +1001,7 @@ pub const Inst = struct {
1001 vector_4_u64_type = @intFromEnum(InternPool.Index.vector_4_u64_type),1001 vector_4_u64_type = @intFromEnum(InternPool.Index.vector_4_u64_type),
1002 vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type),1002 vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type),
1003 vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type),1003 vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type),
1004 vector_2_f32_type = @intFromEnum(InternPool.Index.vector_2_f32_type),
1004 vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type),1005 vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type),
1005 vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type),1006 vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type),
1006 vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type),1007 vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type),
src/InternPool.zig+5
...@@ -4593,6 +4593,7 @@ pub const Index = enum(u32) {...@@ -4593,6 +4593,7 @@ pub const Index = enum(u32) {
4593 vector_4_u64_type,4593 vector_4_u64_type,
4594 vector_4_f16_type,4594 vector_4_f16_type,
4595 vector_8_f16_type,4595 vector_8_f16_type,
4596 vector_2_f32_type,
4596 vector_4_f32_type,4597 vector_4_f32_type,
4597 vector_8_f32_type,4598 vector_8_f32_type,
4598 vector_2_f64_type,4599 vector_2_f64_type,
...@@ -5124,6 +5125,8 @@ pub const static_keys = [_]Key{...@@ -5124,6 +5125,8 @@ pub const static_keys = [_]Key{
5124 .{ .vector_type = .{ .len = 4, .child = .f16_type } },5125 .{ .vector_type = .{ .len = 4, .child = .f16_type } },
5125 // @Vector(8, f16)5126 // @Vector(8, f16)
5126 .{ .vector_type = .{ .len = 8, .child = .f16_type } },5127 .{ .vector_type = .{ .len = 8, .child = .f16_type } },
5128 // @Vector(2, f32)
5129 .{ .vector_type = .{ .len = 2, .child = .f32_type } },
5127 // @Vector(4, f32)5130 // @Vector(4, f32)
5128 .{ .vector_type = .{ .len = 4, .child = .f32_type } },5131 .{ .vector_type = .{ .len = 4, .child = .f32_type } },
5129 // @Vector(8, f32)5132 // @Vector(8, f32)
...@@ -11778,6 +11781,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {...@@ -11778,6 +11781,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
11778 .vector_4_u64_type,11781 .vector_4_u64_type,
11779 .vector_4_f16_type,11782 .vector_4_f16_type,
11780 .vector_8_f16_type,11783 .vector_8_f16_type,
11784 .vector_2_f32_type,
11781 .vector_4_f32_type,11785 .vector_4_f32_type,
11782 .vector_8_f32_type,11786 .vector_8_f32_type,
11783 .vector_2_f64_type,11787 .vector_2_f64_type,
...@@ -12117,6 +12121,7 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {...@@ -12117,6 +12121,7 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
12117 .vector_4_u64_type,12121 .vector_4_u64_type,
12118 .vector_4_f16_type,12122 .vector_4_f16_type,
12119 .vector_8_f16_type,12123 .vector_8_f16_type,
12124 .vector_2_f32_type,
12120 .vector_4_f32_type,12125 .vector_4_f32_type,
12121 .vector_8_f32_type,12126 .vector_8_f32_type,
12122 .vector_2_f64_type,12127 .vector_2_f64_type,
src/Sema.zig+1
...@@ -36733,6 +36733,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {...@@ -36733,6 +36733,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
36733 .vector_4_u64_type,36733 .vector_4_u64_type,
36734 .vector_4_f16_type,36734 .vector_4_f16_type,
36735 .vector_8_f16_type,36735 .vector_8_f16_type,
36736 .vector_2_f32_type,
36736 .vector_4_f32_type,36737 .vector_4_f32_type,
36737 .vector_8_f32_type,36738 .vector_8_f32_type,
36738 .vector_2_f64_type,36739 .vector_2_f64_type,
src/Type.zig+1
...@@ -4209,6 +4209,7 @@ pub const vector_2_u64: Type = .{ .ip_index = .vector_2_u64_type };...@@ -4209,6 +4209,7 @@ pub const vector_2_u64: Type = .{ .ip_index = .vector_2_u64_type };
4209pub const vector_4_u64: Type = .{ .ip_index = .vector_4_u64_type };4209pub const vector_4_u64: Type = .{ .ip_index = .vector_4_u64_type };
4210pub const vector_4_f16: Type = .{ .ip_index = .vector_4_f16_type };4210pub const vector_4_f16: Type = .{ .ip_index = .vector_4_f16_type };
4211pub const vector_8_f16: Type = .{ .ip_index = .vector_8_f16_type };4211pub const vector_8_f16: Type = .{ .ip_index = .vector_8_f16_type };
4212pub const vector_2_f32: Type = .{ .ip_index = .vector_2_f32_type };
4212pub const vector_4_f32: Type = .{ .ip_index = .vector_4_f32_type };4213pub const vector_4_f32: Type = .{ .ip_index = .vector_4_f32_type };
4213pub const vector_8_f32: Type = .{ .ip_index = .vector_8_f32_type };4214pub const vector_8_f32: Type = .{ .ip_index = .vector_8_f32_type };
4214pub const vector_2_f64: Type = .{ .ip_index = .vector_2_f64_type };4215pub const vector_2_f64: Type = .{ .ip_index = .vector_2_f64_type };
src/arch/x86_64/CodeGen.zig+1919-196
...@@ -2414,7 +2414,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -2414,7 +2414,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2414}2414}
24152415
2416fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {2416fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2417 @setEvalBranchQuota(3_900);2417 @setEvalBranchQuota(4_100);
2418 const pt = cg.pt;2418 const pt = cg.pt;
2419 const zcu = pt.zcu;2419 const zcu = pt.zcu;
2420 const ip = &zcu.intern_pool;2420 const ip = &zcu.intern_pool;
...@@ -5567,13 +5567,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5567,13 +5567,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5567 .dst_temps = .{.mem},5567 .dst_temps = .{.mem},
5568 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },5568 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5569 .each = .{ .once = &.{5569 .each = .{ .once = &.{
5570 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },5570 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5571 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },5571 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
5572 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },5572 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
5573 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },5573 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
5574 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },5574 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
5575 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },5575 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
5576 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },5576 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
5577 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5577 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5578 } },5578 } },
5579 }, .{5579 }, .{
...@@ -5600,14 +5600,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5600,14 +5600,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5600 .dst_temps = .{.mem},5600 .dst_temps = .{.mem},
5601 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },5601 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5602 .each = .{ .once = &.{5602 .each = .{ .once = &.{
5603 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },5603 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5604 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },5604 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
5605 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },5605 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
5606 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },5606 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
5607 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },5607 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
5608 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },5608 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
5609 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },5609 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
5610 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },5610 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
5611 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5611 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5612 } },5612 } },
5613 }, .{5613 }, .{
...@@ -5634,7 +5634,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5634,7 +5634,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5634 .dst_temps = .{.mem},5634 .dst_temps = .{.mem},
5635 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },5635 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5636 .each = .{ .once = &.{5636 .each = .{ .once = &.{
5637 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },5637 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5638 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },5638 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
5639 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },5639 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
5640 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },5640 .{ ._, .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 {...@@ -5642,7 +5642,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5642 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },5642 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
5643 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },5643 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
5644 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },5644 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
5645 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },5645 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
5646 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5646 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5647 } },5647 } },
5648 }, .{5648 }, .{
...@@ -5657,7 +5657,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5657,7 +5657,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5657 .call_frame = .{ .alignment = .@"16" },5657 .call_frame = .{ .alignment = .@"16" },
5658 .extra_temps = .{5658 .extra_temps = .{
5659 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },5659 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5660 .{ .type = .f16, .kind = .{ .reg = .eax } },5660 .{ .type = .f16, .kind = .{ .reg = .ax } },
5661 .{ .type = .f32, .kind = .mem },5661 .{ .type = .f32, .kind = .mem },
5662 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },5662 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
5663 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },5663 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
...@@ -5669,7 +5669,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5669,7 +5669,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5669 .dst_temps = .{.mem},5669 .dst_temps = .{.mem},
5670 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },5670 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
5671 .each = .{ .once = &.{5671 .each = .{ .once = &.{
5672 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },5672 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5673 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },5673 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
5674 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },5674 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
5675 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },5675 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
...@@ -5680,7 +5680,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5680,7 +5680,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5680 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },5680 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
5681 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },5681 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
5682 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },5682 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
5683 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },5683 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
5684 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5684 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5685 } },5685 } },
5686 }, .{5686 }, .{
...@@ -5878,14 +5878,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5878,14 +5878,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5878 .dst_temps = .{.mem},5878 .dst_temps = .{.mem},
5879 .clobbers = .{ .eflags = true },5879 .clobbers = .{ .eflags = true },
5880 .each = .{ .once = &.{5880 .each = .{ .once = &.{
5881 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },5881 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5882 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },5882 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
5883 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },5883 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
5884 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },5884 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
5885 .{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ },5885 .{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
5886 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },5886 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
5887 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },5887 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
5888 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },5888 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
5889 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5889 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5890 } },5890 } },
5891 }, .{5891 }, .{
...@@ -5911,7 +5911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5911,7 +5911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5911 .dst_temps = .{.mem},5911 .dst_temps = .{.mem},
5912 .clobbers = .{ .eflags = true },5912 .clobbers = .{ .eflags = true },
5913 .each = .{ .once = &.{5913 .each = .{ .once = &.{
5914 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },5914 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5915 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },5915 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5916 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },5916 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5917 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },5917 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
...@@ -5919,7 +5919,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5919,7 +5919,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5919 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },5919 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
5920 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },5920 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
5921 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },5921 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
5922 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },5922 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5923 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5923 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5924 } },5924 } },
5925 }, .{5925 }, .{
...@@ -5945,7 +5945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5945,7 +5945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5945 .dst_temps = .{.mem},5945 .dst_temps = .{.mem},
5946 .clobbers = .{ .eflags = true },5946 .clobbers = .{ .eflags = true },
5947 .each = .{ .once = &.{5947 .each = .{ .once = &.{
5948 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },5948 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5949 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },5949 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5950 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },5950 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5951 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },5951 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
...@@ -5955,7 +5955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -5955,7 +5955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
5955 .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },5955 .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
5956 .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },5956 .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },
5957 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },5957 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5958 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },5958 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5959 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },5959 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5960 } },5960 } },
5961 }, .{5961 }, .{
...@@ -6179,14 +6179,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6179,14 +6179,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6179 .dst_temps = .{.mem},6179 .dst_temps = .{.mem},
6180 .clobbers = .{ .eflags = true },6180 .clobbers = .{ .eflags = true },
6181 .each = .{ .once = &.{6181 .each = .{ .once = &.{
6182 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },6182 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6183 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },6183 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6184 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },6184 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
6185 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },6185 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
6186 .{ ._, .v_pd, .max, .tmp1y, .tmp2y, .tmp1y, ._ },6186 .{ ._, .v_pd, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
6187 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },6187 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
6188 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },6188 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6189 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },6189 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
6190 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6190 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6191 } },6191 } },
6192 }, .{6192 }, .{
...@@ -6212,7 +6212,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6212,7 +6212,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6212 .dst_temps = .{.mem},6212 .dst_temps = .{.mem},
6213 .clobbers = .{ .eflags = true },6213 .clobbers = .{ .eflags = true },
6214 .each = .{ .once = &.{6214 .each = .{ .once = &.{
6215 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },6215 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6216 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6216 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6217 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6217 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6218 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },6218 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
...@@ -6220,7 +6220,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6220,7 +6220,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6220 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },6220 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
6221 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },6221 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
6222 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },6222 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
6223 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },6223 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6224 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6224 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6225 } },6225 } },
6226 }, .{6226 }, .{
...@@ -6246,7 +6246,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6246,7 +6246,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6246 .dst_temps = .{.mem},6246 .dst_temps = .{.mem},
6247 .clobbers = .{ .eflags = true },6247 .clobbers = .{ .eflags = true },
6248 .each = .{ .once = &.{6248 .each = .{ .once = &.{
6249 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },6249 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6250 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6250 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6251 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6251 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6252 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },6252 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
...@@ -6256,7 +6256,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6256,7 +6256,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6256 .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },6256 .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
6257 .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },6257 .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },
6258 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },6258 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6259 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },6259 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6260 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6260 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6261 } },6261 } },
6262 }, .{6262 }, .{
...@@ -6283,14 +6283,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6283,14 +6283,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6283 .dst_temps = .{.mem},6283 .dst_temps = .{.mem},
6284 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },6284 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6285 .each = .{ .once = &.{6285 .each = .{ .once = &.{
6286 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },6286 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6287 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },6287 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
6288 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },6288 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
6289 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },6289 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
6290 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },6290 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
6291 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },6291 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6292 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },6292 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
6293 .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },6293 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
6294 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6294 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6295 } },6295 } },
6296 }, .{6296 }, .{
...@@ -6580,12 +6580,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6580,12 +6580,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6580 .dst_temps = .{.mem},6580 .dst_temps = .{.mem},
6581 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },6581 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6582 .each = .{ .once = &.{6582 .each = .{ .once = &.{
6583 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },6583 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6584 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6584 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6585 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6585 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6586 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },6586 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6587 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },6587 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6588 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },6588 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6589 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6589 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6590 } },6590 } },
6591 }, .{6591 }, .{
...@@ -6612,12 +6612,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6612,12 +6612,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6612 .dst_temps = .{.mem},6612 .dst_temps = .{.mem},
6613 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },6613 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6614 .each = .{ .once = &.{6614 .each = .{ .once = &.{
6615 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },6615 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6616 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6616 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6617 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6617 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6618 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },6618 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6619 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },6619 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6620 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },6620 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6621 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6621 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6622 } },6622 } },
6623 }, .{6623 }, .{
...@@ -6644,12 +6644,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -6644,12 +6644,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
6644 .dst_temps = .{.mem},6644 .dst_temps = .{.mem},
6645 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },6645 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
6646 .each = .{ .once = &.{6646 .each = .{ .once = &.{
6647 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },6647 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6648 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },6648 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6649 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },6649 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6650 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },6650 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
6651 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },6651 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6652 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },6652 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6653 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },6653 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
6654 } },6654 } },
6655 } }) catch |err| switch (err) {6655 } }) catch |err| switch (err) {
...@@ -9411,13 +9411,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9411,13 +9411,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9411 .dst_temps = .{.mem},9411 .dst_temps = .{.mem},
9412 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },9412 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9413 .each = .{ .once = &.{9413 .each = .{ .once = &.{
9414 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },9414 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9415 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },9415 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
9416 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },9416 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
9417 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },9417 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
9418 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },9418 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9419 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },9419 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
9420 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },9420 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
9421 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9421 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9422 } },9422 } },
9423 }, .{9423 }, .{
...@@ -9444,14 +9444,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9444,14 +9444,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9444 .dst_temps = .{.mem},9444 .dst_temps = .{.mem},
9445 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },9445 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9446 .each = .{ .once = &.{9446 .each = .{ .once = &.{
9447 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },9447 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9448 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },9448 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
9449 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },9449 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
9450 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },9450 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
9451 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },9451 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
9452 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },9452 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9453 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },9453 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
9454 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },9454 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
9455 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9455 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9456 } },9456 } },
9457 }, .{9457 }, .{
...@@ -9478,7 +9478,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9478,7 +9478,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9478 .dst_temps = .{.mem},9478 .dst_temps = .{.mem},
9479 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },9479 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9480 .each = .{ .once = &.{9480 .each = .{ .once = &.{
9481 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },9481 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9482 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },9482 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
9483 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },9483 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
9484 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },9484 .{ ._, .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 {...@@ -9486,7 +9486,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9486 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },9486 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
9487 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },9487 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
9488 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },9488 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
9489 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },9489 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
9490 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9490 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9491 } },9491 } },
9492 }, .{9492 }, .{
...@@ -9501,7 +9501,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9501,7 +9501,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9501 .call_frame = .{ .alignment = .@"16" },9501 .call_frame = .{ .alignment = .@"16" },
9502 .extra_temps = .{9502 .extra_temps = .{
9503 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },9503 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9504 .{ .type = .f16, .kind = .{ .reg = .eax } },9504 .{ .type = .f16, .kind = .{ .reg = .ax } },
9505 .{ .type = .f32, .kind = .mem },9505 .{ .type = .f32, .kind = .mem },
9506 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },9506 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
9507 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },9507 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
...@@ -9513,7 +9513,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9513,7 +9513,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9513 .dst_temps = .{.mem},9513 .dst_temps = .{.mem},
9514 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },9514 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
9515 .each = .{ .once = &.{9515 .each = .{ .once = &.{
9516 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },9516 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9517 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },9517 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
9518 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },9518 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
9519 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },9519 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
...@@ -9524,7 +9524,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9524,7 +9524,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9524 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },9524 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
9525 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },9525 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
9526 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },9526 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
9527 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },9527 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
9528 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9528 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9529 } },9529 } },
9530 }, .{9530 }, .{
...@@ -9722,14 +9722,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9722,14 +9722,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9722 .dst_temps = .{.mem},9722 .dst_temps = .{.mem},
9723 .clobbers = .{ .eflags = true },9723 .clobbers = .{ .eflags = true },
9724 .each = .{ .once = &.{9724 .each = .{ .once = &.{
9725 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },9725 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9726 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },9726 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
9727 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },9727 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
9728 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },9728 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
9729 .{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ },9729 .{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
9730 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },9730 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
9731 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },9731 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
9732 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },9732 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
9733 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9733 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9734 } },9734 } },
9735 }, .{9735 }, .{
...@@ -9755,7 +9755,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9755,7 +9755,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9755 .dst_temps = .{.mem},9755 .dst_temps = .{.mem},
9756 .clobbers = .{ .eflags = true },9756 .clobbers = .{ .eflags = true },
9757 .each = .{ .once = &.{9757 .each = .{ .once = &.{
9758 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },9758 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9759 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9759 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9760 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },9760 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9761 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },9761 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
...@@ -9763,7 +9763,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9763,7 +9763,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9763 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },9763 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
9764 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },9764 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
9765 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },9765 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
9766 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },9766 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9767 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9767 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9768 } },9768 } },
9769 }, .{9769 }, .{
...@@ -9789,7 +9789,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9789,7 +9789,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9789 .dst_temps = .{.mem},9789 .dst_temps = .{.mem},
9790 .clobbers = .{ .eflags = true },9790 .clobbers = .{ .eflags = true },
9791 .each = .{ .once = &.{9791 .each = .{ .once = &.{
9792 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },9792 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
9793 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },9793 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
9794 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },9794 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
9795 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },9795 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
...@@ -9799,7 +9799,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -9799,7 +9799,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
9799 .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },9799 .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
9800 .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },9800 .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },
9801 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },9801 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
9802 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },9802 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9803 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },9803 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9804 } },9804 } },
9805 }, .{9805 }, .{
...@@ -10023,14 +10023,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10023,14 +10023,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10023 .dst_temps = .{.mem},10023 .dst_temps = .{.mem},
10024 .clobbers = .{ .eflags = true },10024 .clobbers = .{ .eflags = true },
10025 .each = .{ .once = &.{10025 .each = .{ .once = &.{
10026 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },10026 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10027 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },10027 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10028 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },10028 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
10029 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },10029 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
10030 .{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ },10030 .{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
10031 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },10031 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
10032 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },10032 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
10033 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },10033 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10034 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10034 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10035 } },10035 } },
10036 }, .{10036 }, .{
...@@ -10056,7 +10056,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10056,7 +10056,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10056 .dst_temps = .{.mem},10056 .dst_temps = .{.mem},
10057 .clobbers = .{ .eflags = true },10057 .clobbers = .{ .eflags = true },
10058 .each = .{ .once = &.{10058 .each = .{ .once = &.{
10059 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },10059 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10060 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10060 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10061 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10061 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10062 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },10062 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
...@@ -10064,7 +10064,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10064,7 +10064,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10064 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },10064 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
10065 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },10065 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
10066 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },10066 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
10067 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },10067 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10068 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10068 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10069 } },10069 } },
10070 }, .{10070 }, .{
...@@ -10090,7 +10090,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10090,7 +10090,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10090 .dst_temps = .{.mem},10090 .dst_temps = .{.mem},
10091 .clobbers = .{ .eflags = true },10091 .clobbers = .{ .eflags = true },
10092 .each = .{ .once = &.{10092 .each = .{ .once = &.{
10093 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },10093 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10094 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10094 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10095 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10095 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10096 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },10096 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
...@@ -10100,7 +10100,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10100,7 +10100,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10100 .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },10100 .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
10101 .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },10101 .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },
10102 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },10102 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10103 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },10103 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10104 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10104 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10105 } },10105 } },
10106 }, .{10106 }, .{
...@@ -10127,14 +10127,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10127,14 +10127,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10127 .dst_temps = .{.mem},10127 .dst_temps = .{.mem},
10128 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },10128 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10129 .each = .{ .once = &.{10129 .each = .{ .once = &.{
10130 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },10130 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10131 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },10131 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
10132 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },10132 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
10133 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },10133 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
10134 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },10134 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
10135 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },10135 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
10136 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },10136 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
10137 .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },10137 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
10138 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10138 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10139 } },10139 } },
10140 }, .{10140 }, .{
...@@ -10412,12 +10412,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10412,12 +10412,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10412 .dst_temps = .{.mem},10412 .dst_temps = .{.mem},
10413 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },10413 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10414 .each = .{ .once = &.{10414 .each = .{ .once = &.{
10415 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },10415 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10416 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10416 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10417 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10417 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10418 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },10418 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
10419 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },10419 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10420 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },10420 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10421 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10421 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10422 } },10422 } },
10423 }, .{10423 }, .{
...@@ -10444,12 +10444,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10444,12 +10444,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10444 .dst_temps = .{.mem},10444 .dst_temps = .{.mem},
10445 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },10445 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10446 .each = .{ .once = &.{10446 .each = .{ .once = &.{
10447 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },10447 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10448 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10448 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10449 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10449 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10450 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },10450 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
10451 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },10451 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10452 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },10452 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10453 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10453 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10454 } },10454 } },
10455 }, .{10455 }, .{
...@@ -10476,12 +10476,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -10476,12 +10476,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
10476 .dst_temps = .{.mem},10476 .dst_temps = .{.mem},
10477 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },10477 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
10478 .each = .{ .once = &.{10478 .each = .{ .once = &.{
10479 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },10479 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10480 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },10480 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10481 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },10481 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10482 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },10482 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
10483 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },10483 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10484 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },10484 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10485 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },10485 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10486 } },10486 } },
10487 } }) catch |err| switch (err) {10487 } }) catch |err| switch (err) {
...@@ -11990,13 +11990,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -11990,13 +11990,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
11990 },11990 },
11991 .dst_temps = .{.mem},11991 .dst_temps = .{.mem},
11992 .each = .{ .once = &.{11992 .each = .{ .once = &.{
11993 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },11993 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
11994 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },11994 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
11995 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ },11995 .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ },
11996 .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },11996 .{ ._, ._, .xor, .tmp2q, .leai(.qword, .tmp1, .tmp0), ._, ._ },
11997 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ },11997 .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ },
11998 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },11998 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ },
11999 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },11999 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
12000 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
12000 } },12001 } },
12001 }, .{12002 }, .{
12002 .patterns = &.{12003 .patterns = &.{
...@@ -12015,13 +12016,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -12015,13 +12016,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
12015 },12016 },
12016 .dst_temps = .{.mem},12017 .dst_temps = .{.mem},
12017 .each = .{ .once = &.{12018 .each = .{ .once = &.{
12018 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },12019 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
12019 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },12020 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
12020 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ },12021 .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ },
12021 .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },12022 .{ ._, ._, .xor, .tmp2d, .leai(.dword, .tmp1, .tmp0), ._, ._ },
12022 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ },12023 .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ },
12023 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },12024 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 4), ._, ._ },
12024 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },12025 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
12026 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
12025 } },12027 } },
12026 } }) catch |err| switch (err) {12028 } }) catch |err| switch (err) {
12027 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{12029 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
...@@ -20246,7 +20248,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -20246,7 +20248,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
20246 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ },20248 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ },
20247 .{ ._, ._, .sub, .tmp1d, .si(8), ._, ._ },20249 .{ ._, ._, .sub, .tmp1d, .si(8), ._, ._ },
20248 .{ ._, ._a, .j, .@"1b", ._, ._, ._ },20250 .{ ._, ._a, .j, .@"1b", ._, ._, ._ },
20249 .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ },20251 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
20250 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },20252 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
20251 } },20253 } },
20252 }, .{20254 }, .{
...@@ -21899,7 +21901,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -21899,7 +21901,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
21899 .patterns = &.{21901 .patterns = &.{
21900 .{ .src = .{ .to_sse, .none } },21902 .{ .src = .{ .to_sse, .none } },
21901 },21903 },
21902 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},21904 .dst_temps = .{.{ .rc = .sse }},
21903 .each = .{ .once = &.{21905 .each = .{ .once = &.{
21904 .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ },21906 .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ },
21905 } },21907 } },
...@@ -21910,7 +21912,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -21910,7 +21912,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
21910 .patterns = &.{21912 .patterns = &.{
21911 .{ .src = .{ .to_sse, .none } },21913 .{ .src = .{ .to_sse, .none } },
21912 },21914 },
21913 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},21915 .dst_temps = .{.{ .rc = .sse }},
21914 .each = .{ .once = &.{21916 .each = .{ .once = &.{
21915 .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ },21917 .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ },
21916 } },21918 } },
...@@ -21921,7 +21923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -21921,7 +21923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
21921 .patterns = &.{21923 .patterns = &.{
21922 .{ .src = .{ .to_sse, .none } },21924 .{ .src = .{ .to_sse, .none } },
21923 },21925 },
21924 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},21926 .dst_temps = .{.{ .rc = .sse }},
21925 .each = .{ .once = &.{21927 .each = .{ .once = &.{
21926 .{ ._, .v_, .cvtps2ph, .dst0x, .src0y, .rm(.{}), ._ },21928 .{ ._, .v_, .cvtps2ph, .dst0x, .src0y, .rm(.{}), ._ },
21927 } },21929 } },
...@@ -21949,6 +21951,152 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -21949,6 +21951,152 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
21949 .each = .{ .once = &.{21951 .each = .{ .once = &.{
21950 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },21952 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
21951 } },21953 } },
21954 }, .{
21955 .required_features = .{ .f16c, null, null, null },
21956 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
21957 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }},
21958 .patterns = &.{
21959 .{ .src = .{ .to_mem, .none } },
21960 },
21961 .extra_temps = .{
21962 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21963 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
21964 .unused,
21965 .unused,
21966 .unused,
21967 .unused,
21968 .unused,
21969 .unused,
21970 .unused,
21971 },
21972 .dst_temps = .{.mem},
21973 .clobbers = .{ .eflags = true },
21974 .each = .{ .once = &.{
21975 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ },
21976 .{ .@"0:", .v_ps, .mova, .tmp1y, .memsia(.src0y, .@"2", .tmp0, .add_size), ._, ._ },
21977 .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_size), .tmp1y, .rm(.{}), ._ },
21978 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
21979 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21980 } },
21981 }, .{
21982 .required_features = .{ .avx, null, null, null },
21983 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
21984 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
21985 .patterns = &.{
21986 .{ .src = .{ .to_mem, .none } },
21987 },
21988 .call_frame = .{ .alignment = .@"16" },
21989 .extra_temps = .{
21990 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
21991 .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
21992 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
21993 .unused,
21994 .unused,
21995 .unused,
21996 .unused,
21997 .unused,
21998 .unused,
21999 },
22000 .dst_temps = .{.mem},
22001 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22002 .each = .{ .once = &.{
22003 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22004 .{ .@"0:", .v_ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
22005 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22006 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
22007 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22008 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22009 } },
22010 }, .{
22011 .required_features = .{ .sse4_1, null, null, null },
22012 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
22013 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22014 .patterns = &.{
22015 .{ .src = .{ .to_mem, .none } },
22016 },
22017 .call_frame = .{ .alignment = .@"16" },
22018 .extra_temps = .{
22019 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22020 .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
22021 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
22022 .unused,
22023 .unused,
22024 .unused,
22025 .unused,
22026 .unused,
22027 .unused,
22028 },
22029 .dst_temps = .{.mem},
22030 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22031 .each = .{ .once = &.{
22032 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22033 .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
22034 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22035 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
22036 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22037 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22038 } },
22039 }, .{
22040 .required_features = .{ .sse2, null, null, null },
22041 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
22042 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22043 .patterns = &.{
22044 .{ .src = .{ .to_mem, .none } },
22045 },
22046 .call_frame = .{ .alignment = .@"16" },
22047 .extra_temps = .{
22048 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22049 .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
22050 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
22051 .{ .type = .f16, .kind = .{ .reg = .ax } },
22052 .unused,
22053 .unused,
22054 .unused,
22055 .unused,
22056 .unused,
22057 },
22058 .dst_temps = .{.mem},
22059 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22060 .each = .{ .once = &.{
22061 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22062 .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
22063 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22064 .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ },
22065 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
22066 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22067 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22068 } },
22069 }, .{
22070 .required_features = .{ .sse, null, null, null },
22071 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
22072 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22073 .patterns = &.{
22074 .{ .src = .{ .to_mem, .none } },
22075 },
22076 .call_frame = .{ .alignment = .@"16" },
22077 .extra_temps = .{
22078 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22079 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
22080 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } },
22081 .{ .type = .f32, .kind = .mem },
22082 .{ .type = .f16, .kind = .{ .reg = .ax } },
22083 .unused,
22084 .unused,
22085 .unused,
22086 .unused,
22087 },
22088 .dst_temps = .{.mem},
22089 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22090 .each = .{ .once = &.{
22091 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22092 .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
22093 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22094 .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ },
22095 .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ },
22096 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
22097 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22098 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22099 } },
21952 }, .{22100 }, .{
21953 .required_features = .{ .sse, null, null, null },22101 .required_features = .{ .sse, null, null, null },
21954 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },22102 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
...@@ -21975,60 +22123,158 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -21975,60 +22123,158 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
21975 } },22123 } },
21976 }, .{22124 }, .{
21977 .required_features = .{ .avx, null, null, null },22125 .required_features = .{ .avx, null, null, null },
21978 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },22126 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
21979 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},22127 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
21980 .patterns = &.{22128 .patterns = &.{
21981 .{ .src = .{ .mem, .none } },22129 .{ .src = .{ .to_mem, .none } },
21982 },22130 },
21983 .dst_temps = .{.{ .rc = .sse }},22131 .call_frame = .{ .alignment = .@"16" },
22132 .extra_temps = .{
22133 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22134 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
22135 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
22136 .unused,
22137 .unused,
22138 .unused,
22139 .unused,
22140 .unused,
22141 .unused,
22142 },
22143 .dst_temps = .{.mem},
22144 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
21984 .each = .{ .once = &.{22145 .each = .{ .once = &.{
21985 .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },22146 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
21986 .{ ._, .v_ss, .cvtsd2, .dst0x, .dst0x, .src0q, ._ },22147 .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
22148 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22149 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
22150 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22151 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21987 } },22152 } },
21988 }, .{22153 }, .{
21989 .required_features = .{ .avx, null, null, null },22154 .required_features = .{ .sse4_1, null, null, null },
21990 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },22155 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
21991 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},22156 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
21992 .patterns = &.{22157 .patterns = &.{
21993 .{ .src = .{ .to_sse, .none } },22158 .{ .src = .{ .to_mem, .none } },
21994 },22159 },
21995 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},22160 .call_frame = .{ .alignment = .@"16" },
22161 .extra_temps = .{
22162 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22163 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
22164 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
22165 .unused,
22166 .unused,
22167 .unused,
22168 .unused,
22169 .unused,
22170 .unused,
22171 },
22172 .dst_temps = .{.mem},
22173 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
21996 .each = .{ .once = &.{22174 .each = .{ .once = &.{
21997 .{ ._, .v_ss, .cvtsd2, .dst0x, .src0x, .src0q, ._ },22175 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22176 .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
22177 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22178 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
22179 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22180 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
21998 } },22181 } },
21999 }, .{22182 }, .{
22000 .required_features = .{ .sse2, null, null, null },22183 .required_features = .{ .sse2, null, null, null },
22184 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
22185 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22186 .patterns = &.{
22187 .{ .src = .{ .to_mem, .none } },
22188 },
22189 .call_frame = .{ .alignment = .@"16" },
22190 .extra_temps = .{
22191 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22192 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
22193 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
22194 .{ .type = .f16, .kind = .{ .reg = .ax } },
22195 .unused,
22196 .unused,
22197 .unused,
22198 .unused,
22199 .unused,
22200 },
22201 .dst_temps = .{.mem},
22202 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22203 .each = .{ .once = &.{
22204 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22205 .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
22206 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22207 .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ },
22208 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
22209 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22210 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22211 } },
22212 }, .{
22213 .required_features = .{ .sse, null, null, null },
22214 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
22215 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22216 .patterns = &.{
22217 .{ .src = .{ .to_mem, .none } },
22218 },
22219 .call_frame = .{ .alignment = .@"16" },
22220 .extra_temps = .{
22221 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22222 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
22223 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } },
22224 .{ .type = .f32, .kind = .mem },
22225 .{ .type = .f16, .kind = .{ .reg = .ax } },
22226 .unused,
22227 .unused,
22228 .unused,
22229 .unused,
22230 },
22231 .dst_temps = .{.mem},
22232 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22233 .each = .{ .once = &.{
22234 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22235 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
22236 .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
22237 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22238 .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ },
22239 .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ },
22240 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
22241 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22242 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22243 } },
22244 }, .{
22245 .required_features = .{ .avx, null, null, null },
22001 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },22246 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
22002 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},22247 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
22003 .patterns = &.{22248 .patterns = &.{
22004 .{ .src = .{ .mut_sse, .none } },22249 .{ .src = .{ .mem, .none } },
22005 },22250 },
22006 .dst_temps = .{.{ .ref = .src0 }},22251 .dst_temps = .{.{ .rc = .sse }},
22007 .each = .{ .once = &.{22252 .each = .{ .once = &.{
22008 .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },22253 .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
22254 .{ ._, .v_ss, .cvtsd2, .dst0x, .dst0x, .src0q, ._ },
22009 } },22255 } },
22010 }, .{22256 }, .{
22011 .required_features = .{ .sse2, null, null, null },22257 .required_features = .{ .avx, null, null, null },
22012 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },22258 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
22013 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},22259 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
22014 .patterns = &.{22260 .patterns = &.{
22015 .{ .src = .{ .mem, .none } },22261 .{ .src = .{ .to_sse, .none } },
22016 .{ .src = .{ .sse, .none } },
22017 },22262 },
22018 .dst_temps = .{.{ .rc = .sse }},22263 .dst_temps = .{.{ .rc = .sse }},
22019 .each = .{ .once = &.{22264 .each = .{ .once = &.{
22020 .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },22265 .{ ._, .v_ss, .cvtsd2, .dst0x, .src0x, .src0q, ._ },
22021 .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },
22022 } },22266 } },
22023 }, .{22267 }, .{
22024 .required_features = .{ .sse2, null, null, null },22268 .required_features = .{ .sse2, null, null, null },
22025 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },22269 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
22026 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},22270 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
22027 .patterns = &.{22271 .patterns = &.{
22028 .{ .src = .{ .to_mut_sse, .none } },22272 .{ .src = .{ .mem, .none } },
22273 .{ .src = .{ .to_sse, .none } },
22029 },22274 },
22030 .dst_temps = .{.{ .ref = .src0 }},22275 .dst_temps = .{.{ .rc = .sse }},
22031 .each = .{ .once = &.{22276 .each = .{ .once = &.{
22277 .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
22032 .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },22278 .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },
22033 } },22279 } },
22034 }, .{22280 }, .{
...@@ -22062,9 +22308,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22062,9 +22308,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22062 .{ .src = .{ .mem, .none } },22308 .{ .src = .{ .mem, .none } },
22063 .{ .src = .{ .to_sse, .none } },22309 .{ .src = .{ .to_sse, .none } },
22064 },22310 },
22065 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},22311 .dst_temps = .{.{ .rc = .sse }},
22066 .each = .{ .once = &.{22312 .each = .{ .once = &.{
22067 .{ ._, .v_ps, .cvtpd2, .dst0x, .src0q, ._, ._ },22313 .{ ._, .v_ps, .cvtpd2, .dst0x, .src0x, ._, ._ },
22068 } },22314 } },
22069 }, .{22315 }, .{
22070 .required_features = .{ .sse2, null, null, null },22316 .required_features = .{ .sse2, null, null, null },
...@@ -22074,9 +22320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22074,9 +22320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22074 .{ .src = .{ .mem, .none } },22320 .{ .src = .{ .mem, .none } },
22075 .{ .src = .{ .to_sse, .none } },22321 .{ .src = .{ .to_sse, .none } },
22076 },22322 },
22077 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},22323 .dst_temps = .{.{ .rc = .sse }},
22078 .each = .{ .once = &.{22324 .each = .{ .once = &.{
22079 .{ ._, ._ps, .cvtpd2, .dst0x, .src0q, ._, ._ },22325 .{ ._, ._ps, .cvtpd2, .dst0x, .src0x, ._, ._ },
22080 } },22326 } },
22081 }, .{22327 }, .{
22082 .required_features = .{ .avx, null, null, null },22328 .required_features = .{ .avx, null, null, null },
...@@ -22086,12 +22332,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22086,12 +22332,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22086 .{ .src = .{ .mem, .none } },22332 .{ .src = .{ .mem, .none } },
22087 .{ .src = .{ .to_sse, .none } },22333 .{ .src = .{ .to_sse, .none } },
22088 },22334 },
22089 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},22335 .dst_temps = .{.{ .rc = .sse }},
22336 .each = .{ .once = &.{
22337 .{ ._, .v_ps, .cvtpd2, .dst0x, .src0y, ._, ._ },
22338 } },
22339 }, .{
22340 .required_features = .{ .avx, null, null, null },
22341 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
22342 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }},
22343 .patterns = &.{
22344 .{ .src = .{ .to_mem, .none } },
22345 },
22346 .extra_temps = .{
22347 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22348 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
22349 .unused,
22350 .unused,
22351 .unused,
22352 .unused,
22353 .unused,
22354 .unused,
22355 .unused,
22356 },
22357 .dst_temps = .{.mem},
22358 .clobbers = .{ .eflags = true },
22090 .each = .{ .once = &.{22359 .each = .{ .once = &.{
22091 .{ ._, .v_ps, .cvtpd2, .dst0y, .src0x, ._, ._ },22360 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ },
22361 .{ .@"0:", .v_ps, .cvtpd2, .tmp1x, .memsia(.src0y, .@"2", .tmp0, .add_size), ._, ._ },
22362 .{ ._, .v_ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
22363 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
22364 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22092 } },22365 } },
22093 }, .{22366 }, .{
22094 .required_features = .{ .@"64bit", .avx, null, null },22367 .required_features = .{ .sse2, null, null, null },
22368 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
22369 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }},
22370 .patterns = &.{
22371 .{ .src = .{ .to_mem, .none } },
22372 },
22373 .extra_temps = .{
22374 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22375 .{ .type = .vector_2_f32, .kind = .{ .rc = .sse } },
22376 .unused,
22377 .unused,
22378 .unused,
22379 .unused,
22380 .unused,
22381 .unused,
22382 .unused,
22383 },
22384 .dst_temps = .{.mem},
22385 .clobbers = .{ .eflags = true },
22386 .each = .{ .once = &.{
22387 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ },
22388 .{ .@"0:", ._ps, .cvtpd2, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_size), ._, ._ },
22389 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1x, ._, ._ },
22390 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
22391 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22392 } },
22393 }, .{
22394 .required_features = .{ .x87, null, null, null },
22395 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
22396 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
22397 .patterns = &.{
22398 .{ .src = .{ .to_mem, .none } },
22399 },
22400 .extra_temps = .{
22401 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22402 .{ .type = .f80, .kind = .{ .reg = .st7 } },
22403 .unused,
22404 .unused,
22405 .unused,
22406 .unused,
22407 .unused,
22408 .unused,
22409 .unused,
22410 },
22411 .dst_temps = .{.mem},
22412 .clobbers = .{ .eflags = true },
22413 .each = .{ .once = &.{
22414 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22415 .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
22416 .{ ._, .f_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
22417 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
22418 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22419 } },
22420 }, .{
22421 .required_features = .{ .avx, null, null, null },
22095 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },22422 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22096 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},22423 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
22097 .patterns = &.{22424 .patterns = &.{
...@@ -22117,7 +22444,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22117,7 +22444,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22117 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },22444 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
22118 } },22445 } },
22119 }, .{22446 }, .{
22120 .required_features = .{ .@"64bit", .sse2, null, null },22447 .required_features = .{ .sse2, null, null, null },
22121 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },22448 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22122 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},22449 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
22123 .patterns = &.{22450 .patterns = &.{
...@@ -22143,7 +22470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22143,7 +22470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22143 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },22470 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
22144 } },22471 } },
22145 }, .{22472 }, .{
22146 .required_features = .{ .@"64bit", .sse, null, null },22473 .required_features = .{ .sse, null, null, null },
22147 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },22474 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22148 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},22475 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
22149 .patterns = &.{22476 .patterns = &.{
...@@ -22168,6 +22495,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22168,6 +22495,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22168 .{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ },22495 .{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ },
22169 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },22496 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
22170 } },22497 } },
22498 }, .{
22499 .required_features = .{ .avx, null, null, null },
22500 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22501 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22502 .patterns = &.{
22503 .{ .src = .{ .to_mem, .none } },
22504 },
22505 .call_frame = .{ .size = 16, .alignment = .@"16" },
22506 .extra_temps = .{
22507 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22508 .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
22509 .{ .type = .f80, .kind = .{ .frame = .call_frame } },
22510 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
22511 .unused,
22512 .unused,
22513 .unused,
22514 .unused,
22515 .unused,
22516 },
22517 .dst_temps = .{.mem},
22518 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22519 .each = .{ .once = &.{
22520 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22521 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
22522 .{ ._, .v_dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
22523 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
22524 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
22525 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22526 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22527 } },
22528 }, .{
22529 .required_features = .{ .sse4_1, null, null, null },
22530 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22531 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22532 .patterns = &.{
22533 .{ .src = .{ .to_mem, .none } },
22534 },
22535 .call_frame = .{ .size = 16, .alignment = .@"16" },
22536 .extra_temps = .{
22537 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22538 .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
22539 .{ .type = .f80, .kind = .{ .frame = .call_frame } },
22540 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
22541 .unused,
22542 .unused,
22543 .unused,
22544 .unused,
22545 .unused,
22546 },
22547 .dst_temps = .{.mem},
22548 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22549 .each = .{ .once = &.{
22550 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22551 .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
22552 .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
22553 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
22554 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
22555 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22556 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22557 } },
22558 }, .{
22559 .required_features = .{ .sse2, null, null, null },
22560 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22561 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22562 .patterns = &.{
22563 .{ .src = .{ .to_mem, .none } },
22564 },
22565 .call_frame = .{ .size = 16, .alignment = .@"16" },
22566 .extra_temps = .{
22567 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22568 .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
22569 .{ .type = .f80, .kind = .{ .frame = .call_frame } },
22570 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
22571 .{ .type = .f16, .kind = .{ .reg = .ax } },
22572 .unused,
22573 .unused,
22574 .unused,
22575 .unused,
22576 },
22577 .dst_temps = .{.mem},
22578 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22579 .each = .{ .once = &.{
22580 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22581 .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
22582 .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
22583 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
22584 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
22585 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
22586 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22587 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22588 } },
22589 }, .{
22590 .required_features = .{ .sse, null, null, null },
22591 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22592 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22593 .patterns = &.{
22594 .{ .src = .{ .to_mem, .none } },
22595 },
22596 .call_frame = .{ .size = 16, .alignment = .@"16" },
22597 .extra_temps = .{
22598 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22599 .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
22600 .{ .type = .f80, .kind = .{ .frame = .call_frame } },
22601 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } },
22602 .{ .type = .f16, .kind = .{ .reg = .ax } },
22603 .unused,
22604 .unused,
22605 .unused,
22606 .unused,
22607 },
22608 .dst_temps = .{.mem},
22609 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22610 .each = .{ .once = &.{
22611 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22612 .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
22613 .{ ._, ._ps, .mova, .mem(.tmp2x), .tmp1x, ._, ._ },
22614 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
22615 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp1x, ._, ._ },
22616 .{ ._, ._, .mov, .tmp4d, .mem(.tmp2d), ._, ._ },
22617 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
22618 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22619 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22620 } },
22171 }, .{22621 }, .{
22172 .required_features = .{ .x87, null, null, null },22622 .required_features = .{ .x87, null, null, null },
22173 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },22623 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
...@@ -22192,6 +22642,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22192,6 +22642,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22192 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },22642 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
22193 .{ ._, .f_p, .st, .dst0d, ._, ._, ._ },22643 .{ ._, .f_p, .st, .dst0d, ._, ._, ._ },
22194 } },22644 } },
22645 }, .{
22646 .required_features = .{ .x87, null, null, null },
22647 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22648 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
22649 .patterns = &.{
22650 .{ .src = .{ .to_mem, .none } },
22651 },
22652 .extra_temps = .{
22653 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22654 .{ .type = .f80, .kind = .{ .reg = .st7 } },
22655 .unused,
22656 .unused,
22657 .unused,
22658 .unused,
22659 .unused,
22660 .unused,
22661 .unused,
22662 },
22663 .dst_temps = .{.mem},
22664 .clobbers = .{ .eflags = true },
22665 .each = .{ .once = &.{
22666 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22667 .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
22668 .{ ._, .f_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
22669 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
22670 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22671 } },
22195 }, .{22672 }, .{
22196 .required_features = .{ .x87, null, null, null },22673 .required_features = .{ .x87, null, null, null },
22197 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },22674 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
...@@ -22216,6 +22693,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22216,6 +22693,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22216 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },22693 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
22217 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },22694 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
22218 } },22695 } },
22696 }, .{
22697 .required_features = .{ .x87, null, null, null },
22698 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22699 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
22700 .patterns = &.{
22701 .{ .src = .{ .to_mem, .none } },
22702 },
22703 .extra_temps = .{
22704 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22705 .{ .type = .f80, .kind = .{ .reg = .st7 } },
22706 .unused,
22707 .unused,
22708 .unused,
22709 .unused,
22710 .unused,
22711 .unused,
22712 .unused,
22713 },
22714 .dst_temps = .{.mem},
22715 .clobbers = .{ .eflags = true },
22716 .each = .{ .once = &.{
22717 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22718 .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
22719 .{ ._, .f_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
22720 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
22721 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22722 } },
22219 }, .{22723 }, .{
22220 .required_features = .{ .sse, null, null, null },22724 .required_features = .{ .sse, null, null, null },
22221 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },22725 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
...@@ -22240,6 +22744,125 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22240,6 +22744,125 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22240 .each = .{ .once = &.{22744 .each = .{ .once = &.{
22241 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },22745 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22242 } },22746 } },
22747 }, .{
22748 .required_features = .{ .avx, null, null, null },
22749 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
22750 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22751 .patterns = &.{
22752 .{ .src = .{ .to_mem, .none } },
22753 },
22754 .call_frame = .{ .alignment = .@"16" },
22755 .extra_temps = .{
22756 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22757 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
22758 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
22759 .unused,
22760 .unused,
22761 .unused,
22762 .unused,
22763 .unused,
22764 .unused,
22765 },
22766 .dst_temps = .{.mem},
22767 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22768 .each = .{ .once = &.{
22769 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22770 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
22771 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22772 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
22773 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22774 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22775 } },
22776 }, .{
22777 .required_features = .{ .sse4_1, null, null, null },
22778 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
22779 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22780 .patterns = &.{
22781 .{ .src = .{ .to_mem, .none } },
22782 },
22783 .call_frame = .{ .alignment = .@"16" },
22784 .extra_temps = .{
22785 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22786 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
22787 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
22788 .unused,
22789 .unused,
22790 .unused,
22791 .unused,
22792 .unused,
22793 .unused,
22794 },
22795 .dst_temps = .{.mem},
22796 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22797 .each = .{ .once = &.{
22798 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22799 .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
22800 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22801 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ },
22802 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22803 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22804 } },
22805 }, .{
22806 .required_features = .{ .sse2, null, null, null },
22807 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
22808 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22809 .patterns = &.{
22810 .{ .src = .{ .to_mem, .none } },
22811 },
22812 .call_frame = .{ .alignment = .@"16" },
22813 .extra_temps = .{
22814 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22815 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
22816 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
22817 .{ .type = .f16, .kind = .{ .reg = .ax } },
22818 .unused,
22819 .unused,
22820 .unused,
22821 .unused,
22822 .unused,
22823 },
22824 .dst_temps = .{.mem},
22825 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22826 .each = .{ .once = &.{
22827 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22828 .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
22829 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22830 .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ },
22831 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ },
22832 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22833 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22834 } },
22835 }, .{
22836 .required_features = .{ .sse, null, null, null },
22837 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
22838 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
22839 .patterns = &.{
22840 .{ .src = .{ .to_mem, .none } },
22841 },
22842 .call_frame = .{ .alignment = .@"16" },
22843 .extra_temps = .{
22844 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22845 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
22846 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } },
22847 .{ .type = .f32, .kind = .mem },
22848 .{ .type = .f16, .kind = .{ .reg = .ax } },
22849 .unused,
22850 .unused,
22851 .unused,
22852 .unused,
22853 },
22854 .dst_temps = .{.mem},
22855 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22856 .each = .{ .once = &.{
22857 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22858 .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ },
22859 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22860 .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ },
22861 .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ },
22862 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ },
22863 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
22864 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22865 } },
22243 }, .{22866 }, .{
22244 .required_features = .{ .sse, null, null, null },22867 .required_features = .{ .sse, null, null, null },
22245 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },22868 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
...@@ -22264,6 +22887,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22264,6 +22887,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22264 .each = .{ .once = &.{22887 .each = .{ .once = &.{
22265 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },22888 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22266 } },22889 } },
22890 }, .{
22891 .required_features = .{ .avx, null, null, null },
22892 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
22893 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
22894 .patterns = &.{
22895 .{ .src = .{ .to_mem, .none } },
22896 },
22897 .call_frame = .{ .alignment = .@"16" },
22898 .extra_temps = .{
22899 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22900 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
22901 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
22902 .unused,
22903 .unused,
22904 .unused,
22905 .unused,
22906 .unused,
22907 .unused,
22908 },
22909 .dst_temps = .{.mem},
22910 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22911 .each = .{ .once = &.{
22912 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22913 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
22914 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22915 .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
22916 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
22917 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22918 } },
22919 }, .{
22920 .required_features = .{ .sse2, null, null, null },
22921 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
22922 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
22923 .patterns = &.{
22924 .{ .src = .{ .to_mem, .none } },
22925 },
22926 .call_frame = .{ .alignment = .@"16" },
22927 .extra_temps = .{
22928 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22929 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
22930 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
22931 .unused,
22932 .unused,
22933 .unused,
22934 .unused,
22935 .unused,
22936 .unused,
22937 },
22938 .dst_temps = .{.mem},
22939 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22940 .each = .{ .once = &.{
22941 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22942 .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
22943 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22944 .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
22945 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
22946 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22947 } },
22948 }, .{
22949 .required_features = .{ .sse, null, null, null },
22950 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
22951 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
22952 .patterns = &.{
22953 .{ .src = .{ .to_mem, .none } },
22954 },
22955 .call_frame = .{ .alignment = .@"16" },
22956 .extra_temps = .{
22957 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
22958 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
22959 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } },
22960 .unused,
22961 .unused,
22962 .unused,
22963 .unused,
22964 .unused,
22965 .unused,
22966 },
22967 .dst_temps = .{.mem},
22968 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22969 .each = .{ .once = &.{
22970 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
22971 .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ },
22972 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
22973 .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
22974 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
22975 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22976 } },
22267 }, .{22977 }, .{
22268 .required_features = .{ .sse, null, null, null },22978 .required_features = .{ .sse, null, null, null },
22269 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },22979 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
...@@ -22288,6 +22998,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22288,6 +22998,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22288 .each = .{ .once = &.{22998 .each = .{ .once = &.{
22289 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },22999 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22290 } },23000 } },
23001 }, .{
23002 .required_features = .{ .avx, null, null, null },
23003 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
23004 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
23005 .patterns = &.{
23006 .{ .src = .{ .to_mem, .none } },
23007 },
23008 .call_frame = .{ .alignment = .@"16" },
23009 .extra_temps = .{
23010 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23011 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
23012 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
23013 .unused,
23014 .unused,
23015 .unused,
23016 .unused,
23017 .unused,
23018 .unused,
23019 },
23020 .dst_temps = .{.mem},
23021 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23022 .each = .{ .once = &.{
23023 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
23024 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
23025 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23026 .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23027 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
23028 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23029 } },
23030 }, .{
23031 .required_features = .{ .sse2, null, null, null },
23032 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
23033 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
23034 .patterns = &.{
23035 .{ .src = .{ .to_mem, .none } },
23036 },
23037 .call_frame = .{ .alignment = .@"16" },
23038 .extra_temps = .{
23039 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23040 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
23041 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
23042 .unused,
23043 .unused,
23044 .unused,
23045 .unused,
23046 .unused,
23047 .unused,
23048 },
23049 .dst_temps = .{.mem},
23050 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23051 .each = .{ .once = &.{
23052 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
23053 .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
23054 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23055 .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23056 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
23057 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23058 } },
23059 }, .{
23060 .required_features = .{ .sse, null, null, null },
23061 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
23062 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
23063 .patterns = &.{
23064 .{ .src = .{ .to_mem, .none } },
23065 },
23066 .call_frame = .{ .alignment = .@"16" },
23067 .extra_temps = .{
23068 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23069 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
23070 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } },
23071 .unused,
23072 .unused,
23073 .unused,
23074 .unused,
23075 .unused,
23076 .unused,
23077 },
23078 .dst_temps = .{.mem},
23079 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23080 .each = .{ .once = &.{
23081 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
23082 .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ },
23083 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23084 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23085 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
23086 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23087 } },
22291 }, .{23088 }, .{
22292 .required_features = .{ .sse, null, null, null },23089 .required_features = .{ .sse, null, null, null },
22293 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },23090 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
...@@ -22312,6 +23109,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22312,6 +23109,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22312 .each = .{ .once = &.{23109 .each = .{ .once = &.{
22313 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },23110 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22314 } },23111 } },
23112 }, .{
23113 .required_features = .{ .avx, null, null, null },
23114 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
23115 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
23116 .patterns = &.{
23117 .{ .src = .{ .to_mem, .none } },
23118 },
23119 .call_frame = .{ .alignment = .@"16" },
23120 .extra_temps = .{
23121 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23122 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
23123 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
23124 .unused,
23125 .unused,
23126 .unused,
23127 .unused,
23128 .unused,
23129 .unused,
23130 },
23131 .dst_temps = .{.mem},
23132 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23133 .each = .{ .once = &.{
23134 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
23135 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
23136 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23137 .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
23138 .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
23139 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
23140 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23141 } },
23142 }, .{
23143 .required_features = .{ .sse2, null, null, null },
23144 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
23145 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
23146 .patterns = &.{
23147 .{ .src = .{ .to_mem, .none } },
23148 },
23149 .call_frame = .{ .alignment = .@"16" },
23150 .extra_temps = .{
23151 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23152 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
23153 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
23154 .unused,
23155 .unused,
23156 .unused,
23157 .unused,
23158 .unused,
23159 .unused,
23160 },
23161 .dst_temps = .{.mem},
23162 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23163 .each = .{ .once = &.{
23164 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
23165 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
23166 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23167 .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
23168 .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
23169 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
23170 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23171 } },
23172 }, .{
23173 .required_features = .{ .sse, null, null, null },
23174 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any },
23175 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
23176 .patterns = &.{
23177 .{ .src = .{ .to_mem, .none } },
23178 },
23179 .call_frame = .{ .alignment = .@"16" },
23180 .extra_temps = .{
23181 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23182 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
23183 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } },
23184 .unused,
23185 .unused,
23186 .unused,
23187 .unused,
23188 .unused,
23189 .unused,
23190 },
23191 .dst_temps = .{.mem},
23192 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23193 .each = .{ .once = &.{
23194 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
23195 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
23196 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23197 .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
23198 .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
23199 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
23200 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23201 } },
22315 } }) catch |err| switch (err) {23202 } }) catch |err| switch (err) {
22316 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{23203 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
22317 @tagName(air_tag),23204 @tagName(air_tag),
...@@ -22334,7 +23221,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22334,7 +23221,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22334 .patterns = &.{23221 .patterns = &.{
22335 .{ .src = .{ .to_sse, .none } },23222 .{ .src = .{ .to_sse, .none } },
22336 },23223 },
22337 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23224 .dst_temps = .{.{ .rc = .sse }},
22338 .each = .{ .once = &.{23225 .each = .{ .once = &.{
22339 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },23226 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
22340 } },23227 } },
...@@ -22346,7 +23233,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22346,7 +23233,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22346 .{ .src = .{ .mem, .none } },23233 .{ .src = .{ .mem, .none } },
22347 .{ .src = .{ .to_sse, .none } },23234 .{ .src = .{ .to_sse, .none } },
22348 },23235 },
22349 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23236 .dst_temps = .{.{ .rc = .sse }},
22350 .each = .{ .once = &.{23237 .each = .{ .once = &.{
22351 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },23238 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
22352 } },23239 } },
...@@ -22358,7 +23245,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22358,7 +23245,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22358 .{ .src = .{ .mem, .none } },23245 .{ .src = .{ .mem, .none } },
22359 .{ .src = .{ .to_sse, .none } },23246 .{ .src = .{ .to_sse, .none } },
22360 },23247 },
22361 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23248 .dst_temps = .{.{ .rc = .sse }},
22362 .each = .{ .once = &.{23249 .each = .{ .once = &.{
22363 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },23250 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
22364 } },23251 } },
...@@ -22386,6 +23273,124 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22386,6 +23273,124 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22386 .each = .{ .once = &.{23273 .each = .{ .once = &.{
22387 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },23274 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22388 } },23275 } },
23276 }, .{
23277 .required_features = .{ .f16c, null, null, null },
23278 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
23279 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }},
23280 .patterns = &.{
23281 .{ .src = .{ .to_mem, .none } },
23282 },
23283 .extra_temps = .{
23284 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23285 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
23286 .unused,
23287 .unused,
23288 .unused,
23289 .unused,
23290 .unused,
23291 .unused,
23292 .unused,
23293 },
23294 .dst_temps = .{.mem},
23295 .clobbers = .{ .eflags = true },
23296 .each = .{ .once = &.{
23297 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
23298 .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
23299 .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ },
23300 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
23301 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23302 } },
23303 }, .{
23304 .required_features = .{ .avx, null, null, null },
23305 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23306 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
23307 .patterns = &.{
23308 .{ .src = .{ .to_mem, .none } },
23309 },
23310 .call_frame = .{ .alignment = .@"16" },
23311 .extra_temps = .{
23312 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23313 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23314 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
23315 .unused,
23316 .unused,
23317 .unused,
23318 .unused,
23319 .unused,
23320 .unused,
23321 },
23322 .dst_temps = .{.mem},
23323 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23324 .each = .{ .once = &.{
23325 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23326 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
23327 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
23328 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23329 .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23330 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23331 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23332 } },
23333 }, .{
23334 .required_features = .{ .sse2, null, null, null },
23335 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23336 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
23337 .patterns = &.{
23338 .{ .src = .{ .to_mem, .none } },
23339 },
23340 .call_frame = .{ .alignment = .@"16" },
23341 .extra_temps = .{
23342 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23343 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23344 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
23345 .unused,
23346 .unused,
23347 .unused,
23348 .unused,
23349 .unused,
23350 .unused,
23351 },
23352 .dst_temps = .{.mem},
23353 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23354 .each = .{ .once = &.{
23355 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23356 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
23357 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
23358 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23359 .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23360 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23361 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23362 } },
23363 }, .{
23364 .required_features = .{ .sse, null, null, null },
23365 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23366 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }},
23367 .patterns = &.{
23368 .{ .src = .{ .to_mem, .none } },
23369 },
23370 .call_frame = .{ .alignment = .@"16" },
23371 .extra_temps = .{
23372 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23373 .{ .type = .f16, .kind = .{ .reg = .ax } },
23374 .{ .type = .f32, .kind = .mem },
23375 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23376 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } },
23377 .unused,
23378 .unused,
23379 .unused,
23380 .unused,
23381 },
23382 .dst_temps = .{.mem},
23383 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23384 .each = .{ .once = &.{
23385 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23386 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
23387 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
23388 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
23389 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
23390 .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
23391 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23392 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23393 } },
22389 }, .{23394 }, .{
22390 .required_features = .{ .f16c, null, null, null },23395 .required_features = .{ .f16c, null, null, null },
22391 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },23396 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
...@@ -22393,7 +23398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22393,7 +23398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22393 .patterns = &.{23398 .patterns = &.{
22394 .{ .src = .{ .to_sse, .none } },23399 .{ .src = .{ .to_sse, .none } },
22395 },23400 },
22396 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23401 .dst_temps = .{.{ .rc = .sse }},
22397 .each = .{ .once = &.{23402 .each = .{ .once = &.{
22398 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },23403 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
22399 .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .dst0d, ._ },23404 .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .dst0d, ._ },
...@@ -22406,7 +23411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22406,7 +23411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22406 .{ .src = .{ .mem, .none } },23411 .{ .src = .{ .mem, .none } },
22407 .{ .src = .{ .to_sse, .none } },23412 .{ .src = .{ .to_sse, .none } },
22408 },23413 },
22409 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23414 .dst_temps = .{.{ .rc = .sse }},
22410 .each = .{ .once = &.{23415 .each = .{ .once = &.{
22411 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },23416 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
22412 .{ ._, .v_pd, .cvtps2, .dst0x, .dst0q, ._, ._ },23417 .{ ._, .v_pd, .cvtps2, .dst0x, .dst0q, ._, ._ },
...@@ -22419,11 +23424,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22419,11 +23424,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22419 .{ .src = .{ .mem, .none } },23424 .{ .src = .{ .mem, .none } },
22420 .{ .src = .{ .to_sse, .none } },23425 .{ .src = .{ .to_sse, .none } },
22421 },23426 },
22422 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23427 .dst_temps = .{.{ .rc = .sse }},
22423 .each = .{ .once = &.{23428 .each = .{ .once = &.{
22424 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },23429 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
22425 .{ ._, .v_pd, .cvtps2, .dst0y, .dst0x, ._, ._ },23430 .{ ._, .v_pd, .cvtps2, .dst0y, .dst0x, ._, ._ },
22426 } },23431 } },
23432 }, .{
23433 .required_features = .{ .f16c, null, null, null },
23434 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any },
23435 .dst_constraints = .{.{ .scalar_float = .{ .of = .zword, .is = .qword } }},
23436 .patterns = &.{
23437 .{ .src = .{ .mem, .none } },
23438 .{ .src = .{ .to_sse, .none } },
23439 },
23440 .extra_temps = .{
23441 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
23442 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
23443 .unused,
23444 .unused,
23445 .unused,
23446 .unused,
23447 .unused,
23448 .unused,
23449 .unused,
23450 },
23451 .dst_temps = .{.mem},
23452 .each = .{ .once = &.{
23453 .{ ._, .v_ps, .cvtph2, .tmp0y, .src0x, ._, ._ },
23454 .{ ._, .v_pd, .cvtps2, .tmp1y, .tmp0x, ._, ._ },
23455 .{ ._, .v_f128, .extract, .tmp0x, .tmp0y, .ui(1), ._ },
23456 .{ ._, .v_pd, .mova, .mem(.dst0y), .tmp1y, ._, ._ },
23457 .{ ._, .v_pd, .cvtps2, .tmp1y, .tmp0x, ._, ._ },
23458 .{ ._, .v_pd, .mova, .memd(.dst0y, 32), .tmp1y, ._, ._ },
23459 } },
22427 }, .{23460 }, .{
22428 .required_features = .{ .sse, null, null, null },23461 .required_features = .{ .sse, null, null, null },
22429 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },23462 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
...@@ -22448,6 +23481,128 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22448,6 +23481,128 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22448 .each = .{ .once = &.{23481 .each = .{ .once = &.{
22449 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },23482 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22450 } },23483 } },
23484 }, .{
23485 .required_features = .{ .f16c, null, null, null },
23486 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any },
23487 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }},
23488 .patterns = &.{
23489 .{ .src = .{ .to_mem, .none } },
23490 },
23491 .extra_temps = .{
23492 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23493 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
23494 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
23495 .unused,
23496 .unused,
23497 .unused,
23498 .unused,
23499 .unused,
23500 .unused,
23501 },
23502 .dst_temps = .{.mem},
23503 .clobbers = .{ .eflags = true },
23504 .each = .{ .once = &.{
23505 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
23506 .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
23507 .{ ._, .v_pd, .cvtps2, .tmp2y, .tmp1x, ._, ._ },
23508 .{ ._, .v_f128, .extract, .tmp1x, .tmp1y, .ui(1), ._ },
23509 .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_size), .tmp2y, ._, ._ },
23510 .{ ._, .v_pd, .cvtps2, .tmp2y, .tmp1x, ._, ._ },
23511 .{ ._, .v_pd, .mova, .memsiad(.dst0y, .@"4", .tmp0, .add_size, 32), .tmp2y, ._, ._ },
23512 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
23513 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23514 } },
23515 }, .{
23516 .required_features = .{ .avx, null, null, null },
23517 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23518 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
23519 .patterns = &.{
23520 .{ .src = .{ .to_mem, .none } },
23521 },
23522 .call_frame = .{ .alignment = .@"16" },
23523 .extra_temps = .{
23524 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23525 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23526 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
23527 .unused,
23528 .unused,
23529 .unused,
23530 .unused,
23531 .unused,
23532 .unused,
23533 },
23534 .dst_temps = .{.mem},
23535 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23536 .each = .{ .once = &.{
23537 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23538 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
23539 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
23540 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23541 .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23542 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23543 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23544 } },
23545 }, .{
23546 .required_features = .{ .sse2, null, null, null },
23547 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23548 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
23549 .patterns = &.{
23550 .{ .src = .{ .to_mem, .none } },
23551 },
23552 .call_frame = .{ .alignment = .@"16" },
23553 .extra_temps = .{
23554 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23555 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23556 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
23557 .unused,
23558 .unused,
23559 .unused,
23560 .unused,
23561 .unused,
23562 .unused,
23563 },
23564 .dst_temps = .{.mem},
23565 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23566 .each = .{ .once = &.{
23567 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23568 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
23569 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
23570 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23571 .{ ._, ._sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23572 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23573 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23574 } },
23575 }, .{
23576 .required_features = .{ .sse, null, null, null },
23577 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23578 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
23579 .patterns = &.{
23580 .{ .src = .{ .to_mem, .none } },
23581 },
23582 .call_frame = .{ .alignment = .@"16" },
23583 .extra_temps = .{
23584 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23585 .{ .type = .f16, .kind = .{ .reg = .ax } },
23586 .{ .type = .f32, .kind = .mem },
23587 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23588 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } },
23589 .unused,
23590 .unused,
23591 .unused,
23592 .unused,
23593 },
23594 .dst_temps = .{.mem},
23595 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23596 .each = .{ .once = &.{
23597 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23598 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
23599 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
23600 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
23601 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
23602 .{ ._, ._ps, .movl, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
23603 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23604 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23605 } },
22451 }, .{23606 }, .{
22452 .required_features = .{ .f16c, .x87, null, null },23607 .required_features = .{ .f16c, .x87, null, null },
22453 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },23608 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
...@@ -22456,7 +23611,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22456,7 +23611,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22456 .{ .src = .{ .to_sse, .none } },23611 .{ .src = .{ .to_sse, .none } },
22457 },23612 },
22458 .extra_temps = .{23613 .extra_temps = .{
22459 .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },23614 .{ .type = .f32, .kind = .{ .rc = .sse } },
22460 .{ .type = .f32, .kind = .mem },23615 .{ .type = .f32, .kind = .mem },
22461 .{ .type = .f80, .kind = .{ .reg = .st7 } },23616 .{ .type = .f80, .kind = .{ .reg = .st7 } },
22462 .unused,23617 .unused,
...@@ -22497,6 +23652,100 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22497,6 +23652,100 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22497 .each = .{ .once = &.{23652 .each = .{ .once = &.{
22498 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },23653 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22499 } },23654 } },
23655 }, .{
23656 .required_features = .{ .avx, null, null, null },
23657 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23658 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
23659 .patterns = &.{
23660 .{ .src = .{ .to_mem, .none } },
23661 },
23662 .call_frame = .{ .alignment = .@"16" },
23663 .extra_temps = .{
23664 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23665 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23666 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
23667 .unused,
23668 .unused,
23669 .unused,
23670 .unused,
23671 .unused,
23672 .unused,
23673 },
23674 .dst_temps = .{.mem},
23675 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23676 .each = .{ .once = &.{
23677 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23678 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
23679 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
23680 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23681 .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
23682 .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
23683 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23684 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23685 } },
23686 }, .{
23687 .required_features = .{ .sse2, null, null, null },
23688 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23689 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
23690 .patterns = &.{
23691 .{ .src = .{ .to_mem, .none } },
23692 },
23693 .call_frame = .{ .alignment = .@"16" },
23694 .extra_temps = .{
23695 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23696 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23697 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
23698 .unused,
23699 .unused,
23700 .unused,
23701 .unused,
23702 .unused,
23703 .unused,
23704 },
23705 .dst_temps = .{.mem},
23706 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23707 .each = .{ .once = &.{
23708 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23709 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
23710 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
23711 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23712 .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
23713 .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
23714 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23715 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23716 } },
23717 }, .{
23718 .required_features = .{ .sse, null, null, null },
23719 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23720 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
23721 .patterns = &.{
23722 .{ .src = .{ .to_mem, .none } },
23723 },
23724 .call_frame = .{ .alignment = .@"16" },
23725 .extra_temps = .{
23726 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23727 .{ .type = .f16, .kind = .{ .reg = .ax } },
23728 .{ .type = .f32, .kind = .mem },
23729 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23730 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } },
23731 .unused,
23732 .unused,
23733 .unused,
23734 .unused,
23735 },
23736 .dst_temps = .{.mem},
23737 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23738 .each = .{ .once = &.{
23739 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23740 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
23741 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
23742 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
23743 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
23744 .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ },
23745 .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
23746 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23747 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23748 } },
22500 }, .{23749 }, .{
22501 .required_features = .{ .sse, null, null, null },23750 .required_features = .{ .sse, null, null, null },
22502 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },23751 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
...@@ -22523,60 +23772,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22523,60 +23772,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22523 } },23772 } },
22524 }, .{23773 }, .{
22525 .required_features = .{ .avx, null, null, null },23774 .required_features = .{ .avx, null, null, null },
22526 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },23775 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
22527 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},23776 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
22528 .patterns = &.{23777 .patterns = &.{
22529 .{ .src = .{ .mem, .none } },23778 .{ .src = .{ .to_mem, .none } },
22530 },23779 },
22531 .dst_temps = .{.{ .rc = .sse }},23780 .call_frame = .{ .alignment = .@"16" },
23781 .extra_temps = .{
23782 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23783 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23784 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
23785 .unused,
23786 .unused,
23787 .unused,
23788 .unused,
23789 .unused,
23790 .unused,
23791 },
23792 .dst_temps = .{.mem},
23793 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22532 .each = .{ .once = &.{23794 .each = .{ .once = &.{
22533 .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },23795 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
22534 .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .src0d, ._ },23796 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
23797 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
23798 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23799 .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23800 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23801 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22535 } },23802 } },
22536 }, .{23803 }, .{
22537 .required_features = .{ .avx, null, null, null },23804 .required_features = .{ .sse2, null, null, null },
22538 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },23805 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
22539 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},23806 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
22540 .patterns = &.{23807 .patterns = &.{
22541 .{ .src = .{ .to_sse, .none } },23808 .{ .src = .{ .to_mem, .none } },
22542 },23809 },
22543 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23810 .call_frame = .{ .alignment = .@"16" },
23811 .extra_temps = .{
23812 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23813 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23814 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
23815 .unused,
23816 .unused,
23817 .unused,
23818 .unused,
23819 .unused,
23820 .unused,
23821 },
23822 .dst_temps = .{.mem},
23823 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
22544 .each = .{ .once = &.{23824 .each = .{ .once = &.{
22545 .{ ._, .v_sd, .cvtss2, .dst0x, .src0x, .src0d, ._ },23825 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23826 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
23827 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
23828 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
23829 .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
23830 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23831 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
22546 } },23832 } },
22547 }, .{23833 }, .{
22548 .required_features = .{ .sse2, null, null, null },23834 .required_features = .{ .sse, null, null, null },
23835 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23836 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
23837 .patterns = &.{
23838 .{ .src = .{ .to_mem, .none } },
23839 },
23840 .call_frame = .{ .alignment = .@"16" },
23841 .extra_temps = .{
23842 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23843 .{ .type = .f16, .kind = .{ .reg = .ax } },
23844 .{ .type = .f32, .kind = .mem },
23845 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
23846 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } },
23847 .unused,
23848 .unused,
23849 .unused,
23850 .unused,
23851 },
23852 .dst_temps = .{.mem},
23853 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
23854 .each = .{ .once = &.{
23855 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
23856 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ },
23857 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
23858 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
23859 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
23860 .{ ._, ._ps, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ },
23861 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
23862 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23863 } },
23864 }, .{
23865 .required_features = .{ .avx, null, null, null },
22549 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },23866 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
22550 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},23867 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
22551 .patterns = &.{23868 .patterns = &.{
22552 .{ .src = .{ .mut_sse, .none } },23869 .{ .src = .{ .mem, .none } },
22553 },23870 },
22554 .dst_temps = .{.{ .ref = .src0 }},23871 .dst_temps = .{.{ .rc = .sse }},
22555 .each = .{ .once = &.{23872 .each = .{ .once = &.{
22556 .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },23873 .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
23874 .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .src0d, ._ },
22557 } },23875 } },
22558 }, .{23876 }, .{
22559 .required_features = .{ .sse2, null, null, null },23877 .required_features = .{ .avx, null, null, null },
22560 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },23878 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
22561 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},23879 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
22562 .patterns = &.{23880 .patterns = &.{
22563 .{ .src = .{ .mem, .none } },23881 .{ .src = .{ .to_sse, .none } },
22564 .{ .src = .{ .sse, .none } },
22565 },23882 },
22566 .dst_temps = .{.{ .rc = .sse }},23883 .dst_temps = .{.{ .rc = .sse }},
22567 .each = .{ .once = &.{23884 .each = .{ .once = &.{
22568 .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },23885 .{ ._, .v_sd, .cvtss2, .dst0x, .src0x, .src0d, ._ },
22569 .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },
22570 } },23886 } },
22571 }, .{23887 }, .{
22572 .required_features = .{ .sse2, null, null, null },23888 .required_features = .{ .sse2, null, null, null },
22573 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },23889 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
22574 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},23890 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
22575 .patterns = &.{23891 .patterns = &.{
22576 .{ .src = .{ .to_mut_sse, .none } },23892 .{ .src = .{ .mem, .none } },
23893 .{ .src = .{ .to_sse, .none } },
22577 },23894 },
22578 .dst_temps = .{.{ .ref = .src0 }},23895 .dst_temps = .{.{ .rc = .sse }},
22579 .each = .{ .once = &.{23896 .each = .{ .once = &.{
23897 .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
22580 .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },23898 .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },
22581 } },23899 } },
22582 }, .{23900 }, .{
...@@ -22610,7 +23928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22610,7 +23928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22610 .{ .src = .{ .mem, .none } },23928 .{ .src = .{ .mem, .none } },
22611 .{ .src = .{ .to_sse, .none } },23929 .{ .src = .{ .to_sse, .none } },
22612 },23930 },
22613 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23931 .dst_temps = .{.{ .rc = .sse }},
22614 .each = .{ .once = &.{23932 .each = .{ .once = &.{
22615 .{ ._, .v_pd, .cvtps2, .dst0x, .src0q, ._, ._ },23933 .{ ._, .v_pd, .cvtps2, .dst0x, .src0q, ._, ._ },
22616 } },23934 } },
...@@ -22622,7 +23940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22622,7 +23940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22622 .{ .src = .{ .mem, .none } },23940 .{ .src = .{ .mem, .none } },
22623 .{ .src = .{ .to_sse, .none } },23941 .{ .src = .{ .to_sse, .none } },
22624 },23942 },
22625 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23943 .dst_temps = .{.{ .rc = .sse }},
22626 .each = .{ .once = &.{23944 .each = .{ .once = &.{
22627 .{ ._, ._pd, .cvtps2, .dst0x, .src0q, ._, ._ },23945 .{ ._, ._pd, .cvtps2, .dst0x, .src0q, ._, ._ },
22628 } },23946 } },
...@@ -22634,10 +23952,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22634,10 +23952,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22634 .{ .src = .{ .mem, .none } },23952 .{ .src = .{ .mem, .none } },
22635 .{ .src = .{ .to_sse, .none } },23953 .{ .src = .{ .to_sse, .none } },
22636 },23954 },
22637 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},23955 .dst_temps = .{.{ .rc = .sse }},
22638 .each = .{ .once = &.{23956 .each = .{ .once = &.{
22639 .{ ._, .v_pd, .cvtps2, .dst0y, .src0x, ._, ._ },23957 .{ ._, .v_pd, .cvtps2, .dst0y, .src0x, ._, ._ },
22640 } },23958 } },
23959 }, .{
23960 .required_features = .{ .avx, null, null, null },
23961 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
23962 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }},
23963 .patterns = &.{
23964 .{ .src = .{ .to_mem, .none } },
23965 },
23966 .extra_temps = .{
23967 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23968 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
23969 .unused,
23970 .unused,
23971 .unused,
23972 .unused,
23973 .unused,
23974 .unused,
23975 .unused,
23976 },
23977 .dst_temps = .{.mem},
23978 .clobbers = .{ .eflags = true },
23979 .each = .{ .once = &.{
23980 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
23981 .{ .@"0:", .v_pd, .cvtps2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
23982 .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ },
23983 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
23984 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
23985 } },
23986 }, .{
23987 .required_features = .{ .sse2, null, null, null },
23988 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .dword } }, .any },
23989 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }},
23990 .patterns = &.{
23991 .{ .src = .{ .to_mem, .none } },
23992 },
23993 .extra_temps = .{
23994 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
23995 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
23996 .unused,
23997 .unused,
23998 .unused,
23999 .unused,
24000 .unused,
24001 .unused,
24002 .unused,
24003 },
24004 .dst_temps = .{.mem},
24005 .clobbers = .{ .eflags = true },
24006 .each = .{ .once = &.{
24007 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
24008 .{ .@"0:", ._pd, .cvtps2, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
24009 .{ ._, ._pd, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ },
24010 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
24011 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24012 } },
24013 }, .{
24014 .required_features = .{ .x87, null, null, null },
24015 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
24016 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }},
24017 .patterns = &.{
24018 .{ .src = .{ .to_mem, .none } },
24019 },
24020 .extra_temps = .{
24021 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24022 .{ .type = .f80, .kind = .{ .reg = .st7 } },
24023 .unused,
24024 .unused,
24025 .unused,
24026 .unused,
24027 .unused,
24028 .unused,
24029 .unused,
24030 },
24031 .dst_temps = .{.mem},
24032 .clobbers = .{ .eflags = true },
24033 .each = .{ .once = &.{
24034 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24035 .{ .@"0:", .f_, .ld, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
24036 .{ ._, .f_p, .st, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
24037 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
24038 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24039 } },
22641 }, .{24040 }, .{
22642 .required_features = .{ .x87, null, null, null },24041 .required_features = .{ .x87, null, null, null },
22643 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },24042 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
...@@ -22661,6 +24060,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22661,6 +24060,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22661 .{ ._, .f_, .ld, .src0d, ._, ._, ._ },24060 .{ ._, .f_, .ld, .src0d, ._, ._, ._ },
22662 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },24061 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
22663 } },24062 } },
24063 }, .{
24064 .required_features = .{ .x87, null, null, null },
24065 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
24066 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
24067 .patterns = &.{
24068 .{ .src = .{ .to_mem, .none } },
24069 },
24070 .extra_temps = .{
24071 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24072 .{ .type = .f80, .kind = .{ .reg = .st7 } },
24073 .unused,
24074 .unused,
24075 .unused,
24076 .unused,
24077 .unused,
24078 .unused,
24079 .unused,
24080 },
24081 .dst_temps = .{.mem},
24082 .each = .{ .once = &.{
24083 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24084 .{ .@"0:", .f_, .ld, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
24085 .{ ._, .f_p, .st, .memsia(.dst0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
24086 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
24087 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24088 } },
22664 }, .{24089 }, .{
22665 .required_features = .{ .sse, null, null, null },24090 .required_features = .{ .sse, null, null, null },
22666 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },24091 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
...@@ -22685,6 +24110,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22685,6 +24110,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22685 .each = .{ .once = &.{24110 .each = .{ .once = &.{
22686 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },24111 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22687 } },24112 } },
24113 }, .{
24114 .required_features = .{ .avx, null, null, null },
24115 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
24116 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24117 .patterns = &.{
24118 .{ .src = .{ .to_mem, .none } },
24119 },
24120 .call_frame = .{ .alignment = .@"16" },
24121 .extra_temps = .{
24122 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24123 .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
24124 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
24125 .unused,
24126 .unused,
24127 .unused,
24128 .unused,
24129 .unused,
24130 .unused,
24131 },
24132 .dst_temps = .{.mem},
24133 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24134 .each = .{ .once = &.{
24135 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24136 .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
24137 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
24138 .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24139 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
24140 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24141 } },
24142 }, .{
24143 .required_features = .{ .sse2, null, null, null },
24144 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
24145 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24146 .patterns = &.{
24147 .{ .src = .{ .to_mem, .none } },
24148 },
24149 .call_frame = .{ .alignment = .@"16" },
24150 .extra_temps = .{
24151 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24152 .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
24153 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
24154 .unused,
24155 .unused,
24156 .unused,
24157 .unused,
24158 .unused,
24159 .unused,
24160 },
24161 .dst_temps = .{.mem},
24162 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24163 .each = .{ .once = &.{
24164 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24165 .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
24166 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
24167 .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24168 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
24169 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24170 } },
24171 }, .{
24172 .required_features = .{ .sse, null, null, null },
24173 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any },
24174 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24175 .patterns = &.{
24176 .{ .src = .{ .to_mem, .none } },
24177 },
24178 .call_frame = .{ .alignment = .@"16" },
24179 .extra_temps = .{
24180 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24181 .{ .type = .f32, .kind = .{ .reg = .xmm0 } },
24182 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } },
24183 .unused,
24184 .unused,
24185 .unused,
24186 .unused,
24187 .unused,
24188 .unused,
24189 },
24190 .dst_temps = .{.mem},
24191 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24192 .each = .{ .once = &.{
24193 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24194 .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
24195 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
24196 .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24197 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
24198 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24199 } },
22688 }, .{24200 }, .{
22689 .required_features = .{ .x87, null, null, null },24201 .required_features = .{ .x87, null, null, null },
22690 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },24202 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
...@@ -22708,6 +24220,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22708,6 +24220,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22708 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },24220 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
22709 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },24221 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
22710 } },24222 } },
24223 }, .{
24224 .required_features = .{ .x87, null, null, null },
24225 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
24226 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }},
24227 .patterns = &.{
24228 .{ .src = .{ .to_mem, .none } },
24229 },
24230 .extra_temps = .{
24231 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24232 .{ .type = .f80, .kind = .{ .reg = .st7 } },
24233 .unused,
24234 .unused,
24235 .unused,
24236 .unused,
24237 .unused,
24238 .unused,
24239 .unused,
24240 },
24241 .dst_temps = .{.mem},
24242 .each = .{ .once = &.{
24243 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24244 .{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
24245 .{ ._, .f_p, .st, .memsia(.dst0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
24246 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
24247 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24248 } },
22711 }, .{24249 }, .{
22712 .required_features = .{ .sse, null, null, null },24250 .required_features = .{ .sse, null, null, null },
22713 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },24251 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
...@@ -22733,7 +24271,95 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22733,7 +24271,95 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22733 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },24271 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
22734 } },24272 } },
22735 }, .{24273 }, .{
22736 .required_features = .{ .@"64bit", .avx, null, null },24274 .required_features = .{ .avx, null, null, null },
24275 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
24276 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24277 .patterns = &.{
24278 .{ .src = .{ .to_mem, .none } },
24279 },
24280 .call_frame = .{ .alignment = .@"16" },
24281 .extra_temps = .{
24282 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24283 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
24284 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
24285 .unused,
24286 .unused,
24287 .unused,
24288 .unused,
24289 .unused,
24290 .unused,
24291 },
24292 .dst_temps = .{.mem},
24293 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24294 .each = .{ .once = &.{
24295 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24296 .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
24297 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
24298 .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24299 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
24300 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24301 } },
24302 }, .{
24303 .required_features = .{ .sse2, null, null, null },
24304 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
24305 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24306 .patterns = &.{
24307 .{ .src = .{ .to_mem, .none } },
24308 },
24309 .call_frame = .{ .alignment = .@"16" },
24310 .extra_temps = .{
24311 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24312 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
24313 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
24314 .unused,
24315 .unused,
24316 .unused,
24317 .unused,
24318 .unused,
24319 .unused,
24320 },
24321 .dst_temps = .{.mem},
24322 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24323 .each = .{ .once = &.{
24324 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24325 .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
24326 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
24327 .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24328 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
24329 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24330 } },
24331 }, .{
24332 .required_features = .{ .sse, null, null, null },
24333 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
24334 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24335 .patterns = &.{
24336 .{ .src = .{ .to_mem, .none } },
24337 },
24338 .call_frame = .{ .alignment = .@"16" },
24339 .extra_temps = .{
24340 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24341 .{ .type = .f64, .kind = .{ .reg = .xmm0 } },
24342 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } },
24343 .unused,
24344 .unused,
24345 .unused,
24346 .unused,
24347 .unused,
24348 .unused,
24349 },
24350 .dst_temps = .{.mem},
24351 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24352 .each = .{ .once = &.{
24353 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24354 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
24355 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
24356 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
24357 .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24358 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
24359 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24360 } },
24361 }, .{
24362 .required_features = .{ .avx, null, null, null },
22737 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },24363 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22738 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},24364 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
22739 .patterns = &.{24365 .patterns = &.{
...@@ -22759,7 +24385,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22759,7 +24385,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22759 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },24385 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
22760 } },24386 } },
22761 }, .{24387 }, .{
22762 .required_features = .{ .@"64bit", .sse2, null, null },24388 .required_features = .{ .sse2, null, null, null },
22763 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },24389 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22764 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},24390 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
22765 .patterns = &.{24391 .patterns = &.{
...@@ -22785,7 +24411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22785,7 +24411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22785 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },24411 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
22786 } },24412 } },
22787 }, .{24413 }, .{
22788 .required_features = .{ .@"64bit", .sse, null, null },24414 .required_features = .{ .sse, null, null, null },
22789 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },24415 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
22790 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},24416 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
22791 .patterns = &.{24417 .patterns = &.{
...@@ -22810,6 +24436,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {...@@ -22810,6 +24436,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
22810 .{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ },24436 .{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ },
22811 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },24437 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
22812 } },24438 } },
24439 }, .{
24440 .required_features = .{ .avx, null, null, null },
24441 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
24442 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24443 .patterns = &.{
24444 .{ .src = .{ .to_mem, .none } },
24445 },
24446 .call_frame = .{ .size = 16, .alignment = .@"16" },
24447 .extra_temps = .{
24448 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24449 .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
24450 .{ .type = .f80, .kind = .{ .frame = .call_frame } },
24451 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
24452 .unused,
24453 .unused,
24454 .unused,
24455 .unused,
24456 .unused,
24457 },
24458 .dst_temps = .{.mem},
24459 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24460 .each = .{ .once = &.{
24461 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24462 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
24463 .{ ._, .v_dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
24464 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
24465 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24466 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
24467 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24468 } },
24469 }, .{
24470 .required_features = .{ .sse2, null, null, null },
24471 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
24472 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24473 .patterns = &.{
24474 .{ .src = .{ .to_mem, .none } },
24475 },
24476 .call_frame = .{ .size = 16, .alignment = .@"16" },
24477 .extra_temps = .{
24478 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24479 .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
24480 .{ .type = .f80, .kind = .{ .frame = .call_frame } },
24481 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
24482 .unused,
24483 .unused,
24484 .unused,
24485 .unused,
24486 .unused,
24487 },
24488 .dst_temps = .{.mem},
24489 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24490 .each = .{ .once = &.{
24491 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24492 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
24493 .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ },
24494 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
24495 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24496 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
24497 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24498 } },
24499 }, .{
24500 .required_features = .{ .sse, null, null, null },
24501 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
24502 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
24503 .patterns = &.{
24504 .{ .src = .{ .to_mem, .none } },
24505 },
24506 .call_frame = .{ .size = 16, .alignment = .@"16" },
24507 .extra_temps = .{
24508 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
24509 .{ .type = .f80, .kind = .{ .reg = .xmm0 } },
24510 .{ .type = .f80, .kind = .{ .frame = .call_frame } },
24511 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } },
24512 .unused,
24513 .unused,
24514 .unused,
24515 .unused,
24516 .unused,
24517 },
24518 .dst_temps = .{.mem},
24519 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
24520 .each = .{ .once = &.{
24521 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
24522 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
24523 .{ ._, ._ps, .mova, .mem(.tmp2x), .tmp1x, ._, ._ },
24524 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
24525 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ },
24526 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
24527 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
24528 } },
22813 } }) catch |err| switch (err) {24529 } }) catch |err| switch (err) {
22814 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{24530 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
22815 @tagName(air_tag),24531 @tagName(air_tag),
...@@ -30715,6 +32431,7 @@ fn genBinOp(...@@ -30715,6 +32431,7 @@ fn genBinOp(
30715 try self.copyToTmpRegister(rhs_ty, rhs_mcv)).to128(),32431 try self.copyToTmpRegister(rhs_ty, rhs_mcv)).to128(),
30716 );32432 );
30717 try self.asmRegisterRegister(.{ .v_ps, .cvtph2 }, dst_reg, dst_reg);32433 try self.asmRegisterRegister(.{ .v_ps, .cvtph2 }, dst_reg, dst_reg);
32434 try self.asmRegisterRegister(.{ .v_, .movshdup }, tmp_reg, dst_reg);
30718 break :src .{ .register = tmp_reg };32435 break :src .{ .register = tmp_reg };
30719 } else rhs_mcv;32436 } else rhs_mcv;
3072032437
...@@ -43508,7 +45225,7 @@ const Select = struct {...@@ -43508,7 +45225,7 @@ const Select = struct {
43508 top: u3,45225 top: u3,
4350945226
43510 fn emitLabel(s: *Select, label_index: Label) void {45227 fn emitLabel(s: *Select, label_index: Label) void {
43511 if (label_index == ._) return;45228 assert(@intFromEnum(label_index) < @intFromEnum(Label._));
43512 const label = &s.labels[@intFromEnum(label_index)];45229 const label = &s.labels[@intFromEnum(label_index)];
43513 for (&label.forward) |*reloc| {45230 for (&label.forward) |*reloc| {
43514 if (reloc.*) |r| s.cg.performReloc(r);45231 if (reloc.*) |r| s.cg.performReloc(r);
...@@ -43518,29 +45235,35 @@ const Select = struct {...@@ -43518,29 +45235,35 @@ const Select = struct {
43518 }45235 }
4351945236
43520 fn emit(s: *Select, inst: Instruction) !void {45237 fn emit(s: *Select, inst: Instruction) !void {
43521 s.emitLabel(inst[0]);
43522 const mir_tag: Mir.Inst.FixedTag = .{ inst[1], inst[2] };45238 const mir_tag: Mir.Inst.FixedTag = .{ inst[1], inst[2] };
43523 var mir_ops: [4]CodeGen.Operand = undefined;45239 pseudo: {
43524 inline for (&mir_ops, 3..) |*mir_op, inst_index| mir_op.* = try inst[inst_index].lower(s);45240 switch (inst[0]) {
43525 s.cg.asmOps(mir_tag, mir_ops) catch |err| switch (err) {45241 .@"0:", .@"1:", .@"2:" => |label| s.emitLabel(label),
43526 error.InvalidInstruction => {45242 ._ => {},
43527 const fixes = @tagName(mir_tag[0]);45243 .pseudo => break :pseudo,
43528 const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;45244 }
43529 return s.cg.fail(45245 var mir_ops: [4]CodeGen.Operand = undefined;
43530 "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'",45246 inline for (&mir_ops, 3..) |*mir_op, inst_index| mir_op.* = try inst[inst_index].lower(s);
43531 .{45247 s.cg.asmOps(mir_tag, mir_ops) catch |err| switch (err) {
43532 fixes[0..fixes_blank],45248 error.InvalidInstruction => {
43533 @tagName(mir_tag[1]),45249 const fixes = @tagName(mir_tag[0]);
43534 fixes[fixes_blank + 1 ..],45250 const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;
43535 @tagName(mir_ops[0]),45251 return s.cg.fail(
43536 @tagName(mir_ops[1]),45252 "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'",
43537 @tagName(mir_ops[2]),45253 .{
43538 @tagName(mir_ops[3]),45254 fixes[0..fixes_blank],
43539 },45255 @tagName(mir_tag[1]),
43540 );45256 fixes[fixes_blank + 1 ..],
43541 },45257 @tagName(mir_ops[0]),
43542 else => |e| return e,45258 @tagName(mir_ops[1]),
43543 };45259 @tagName(mir_ops[2]),
45260 @tagName(mir_ops[3]),
45261 },
45262 );
45263 },
45264 else => |e| return e,
45265 };
45266 }
43544 switch (mir_tag[0]) {45267 switch (mir_tag[0]) {
43545 .f_ => switch (mir_tag[1]) {45268 .f_ => switch (mir_tag[1]) {
43546 .@"2xm1",45269 .@"2xm1",
...@@ -43594,32 +45317,6 @@ const Select = struct {...@@ -43594,32 +45317,6 @@ const Select = struct {
43594 .yl2x => s.top +%= 1,45317 .yl2x => s.top +%= 1,
43595 else => unreachable,45318 else => unreachable,
43596 },45319 },
43597 .fb_ => switch (mir_tag[1]) {
43598 .ld => s.top -%= 1,
43599 else => unreachable,
43600 },
43601 .fb_p => switch (mir_tag[1]) {
43602 .st => s.top +%= 1,
43603 else => unreachable,
43604 },
43605 .fi_ => switch (mir_tag[1]) {
43606 .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {},
43607 .ld => s.top -%= 1,
43608 else => unreachable,
43609 },
43610 .fi_p => switch (mir_tag[1]) {
43611 .com, .st => s.top +%= 1,
43612 else => unreachable,
43613 },
43614 .fn_ => switch (mir_tag[1]) {
43615 .clex => {},
43616 .init, .save => s.top = 0,
43617 else => unreachable,
43618 },
43619 .fn_cw, .fn_env, .fn_sw => switch (mir_tag[1]) {
43620 .st => {},
43621 else => unreachable,
43622 },
43623 .f_cstp => switch (mir_tag[1]) {45320 .f_cstp => switch (mir_tag[1]) {
43624 .de => s.top -%= 1,45321 .de => s.top -%= 1,
43625 .in => s.top +%= 1,45322 .in => s.top +%= 1,
...@@ -43646,6 +45343,32 @@ const Select = struct {...@@ -43646,6 +45343,32 @@ const Select = struct {
43646 .com, .ucom => s.top +%= 2,45343 .com, .ucom => s.top +%= 2,
43647 else => unreachable,45344 else => unreachable,
43648 },45345 },
45346 .fb_ => switch (mir_tag[1]) {
45347 .ld => s.top -%= 1,
45348 else => unreachable,
45349 },
45350 .fb_p => switch (mir_tag[1]) {
45351 .st => s.top +%= 1,
45352 else => unreachable,
45353 },
45354 .fi_ => switch (mir_tag[1]) {
45355 .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {},
45356 .ld => s.top -%= 1,
45357 else => unreachable,
45358 },
45359 .fi_p => switch (mir_tag[1]) {
45360 .com, .st => s.top +%= 1,
45361 else => unreachable,
45362 },
45363 .fn_ => switch (mir_tag[1]) {
45364 .clex => {},
45365 .init, .save => s.top = 0,
45366 else => unreachable,
45367 },
45368 .fn_cw, .fn_env, .fn_sw => switch (mir_tag[1]) {
45369 .st => {},
45370 else => unreachable,
45371 },
43649 .fx_ => switch (mir_tag[1]) {45372 .fx_ => switch (mir_tag[1]) {
43650 .rstor => unreachable,45373 .rstor => unreachable,
43651 .save => {},45374 .save => {},
...@@ -44199,7 +45922,7 @@ const Select = struct {...@@ -44199,7 +45922,7 @@ const Select = struct {
44199 Select.Operand,45922 Select.Operand,
44200 Select.Operand,45923 Select.Operand,
44201 };45924 };
44202 const Label = enum { @"0:", @"1:", @"2:", @"_" };45925 const Label = enum { @"0:", @"1:", @"2:", @"_", pseudo };
44203 const Operand = struct {45926 const Operand = struct {
44204 tag: Tag,45927 tag: Tag,
44205 base: Ref.Sized = .none,45928 base: Ref.Sized = .none,
...@@ -44228,7 +45951,7 @@ const Select = struct {...@@ -44228,7 +45951,7 @@ const Select = struct {
44228 ptr_bit_size,45951 ptr_bit_size,
44229 size,45952 size,
44230 size_sub_elem_size,45953 size_sub_elem_size,
44231 src0_unaligned_size,45954 unaligned_size,
44232 bit_size,45955 bit_size,
44233 src0_bit_size,45956 src0_bit_size,
44234 len,45957 len,
...@@ -44252,8 +45975,8 @@ const Select = struct {...@@ -44252,8 +45975,8 @@ const Select = struct {
44252 const sub_size_div_4: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"4" };45975 const sub_size_div_4: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"4" };
44253 const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" };45976 const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" };
44254 const add_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_size, .op = .mul, .rhs = .@"1" };45977 const add_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_size, .op = .mul, .rhs = .@"1" };
44255 const add_src0_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" };45978 const add_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" };
44256 const sub_src0_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" };45979 const sub_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" };
44257 const add_2_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"2" };45980 const add_2_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"2" };
44258 const add_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };45981 const add_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };
44259 const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };45982 const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };
...@@ -44744,7 +46467,7 @@ const Select = struct {...@@ -44744,7 +46467,7 @@ const Select = struct {
44744 const ty = op.base.ref.deref(s).typeOf(s.cg);46467 const ty = op.base.ref.deref(s).typeOf(s.cg);
44745 break :lhs @intCast(ty.abiSize(s.cg.pt.zcu) - ty.elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu));46468 break :lhs @intCast(ty.abiSize(s.cg.pt.zcu) - ty.elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu));
44746 },46469 },
44747 .src0_unaligned_size => @intCast(s.cg.unalignedSize(Select.Operand.Ref.src0.deref(s).typeOf(s.cg))),46470 .unaligned_size => @intCast(s.cg.unalignedSize(op.base.ref.deref(s).typeOf(s.cg))),
44748 .bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),46471 .bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),
44749 .src0_bit_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),46472 .src0_bit_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),
44750 .len => @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu)),46473 .len => @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu)),
src/codegen/c/Type.zig+15
...@@ -1707,6 +1707,21 @@ pub const Pool = struct {...@@ -1707,6 +1707,21 @@ pub const Pool = struct {
1707 };1707 };
1708 return pool.fromFields(allocator, .@"struct", &fields, kind);1708 return pool.fromFields(allocator, .@"struct", &fields, kind);
1709 },1709 },
1710 .vector_2_f32_type => {
1711 const vector_ctype = try pool.getVector(allocator, .{
1712 .elem_ctype = .f32,
1713 .len = 2,
1714 });
1715 if (!kind.isParameter()) return vector_ctype;
1716 var fields = [_]Info.Field{
1717 .{
1718 .name = .{ .index = .array },
1719 .ctype = vector_ctype,
1720 .alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)),
1721 },
1722 };
1723 return pool.fromFields(allocator, .@"struct", &fields, kind);
1724 },
1710 .vector_4_f32_type => {1725 .vector_4_f32_type => {
1711 const vector_ctype = try pool.getVector(allocator, .{1726 const vector_ctype = try pool.getVector(allocator, .{
1712 .elem_ctype = .f32,1727 .elem_ctype = .f32,
test/behavior/x86_64/math.zig+1
...@@ -10810,6 +10810,7 @@ inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type) Resul...@@ -10810,6 +10810,7 @@ inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type) Resul
10810test floatCast {10810test floatCast {
10811 const test_float_cast = cast(floatCast, .{ .strict = true });10811 const test_float_cast = cast(floatCast, .{ .strict = true });
10812 try test_float_cast.testFloats();10812 try test_float_cast.testFloats();
10813 try test_float_cast.testFloatVectors();
10813}10814}
1081410815
10815inline fn equal(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs == rhs) {10816inline fn equal(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs == rhs) {
test/cases/compile_errors/anytype_param_requires_comptime.zig+1-1
...@@ -15,6 +15,6 @@ pub export fn entry() void {...@@ -15,6 +15,6 @@ pub export fn entry() void {
15// error15// error
16//16//
17// :7:25: error: unable to resolve comptime value17// :7:25: error: unable to resolve comptime value
18// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_463.C' must be comptime-known18// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_464.C' must be comptime-known
19// :4:16: note: struct requires comptime because of this field19// :4:16: note: struct requires comptime because of this field
20// :4:16: note: types are not available at runtime20// :4:16: note: types are not available at runtime
test/cases/compile_errors/bogus_method_call_on_slice.zig+1-1
...@@ -16,5 +16,5 @@ pub export fn entry2() void {...@@ -16,5 +16,5 @@ pub export fn entry2() void {
16//16//
17// :3:6: error: no field or member function named 'copy' in '[]const u8'17// :3:6: error: no field or member function named 'copy' in '[]const u8'
18// :9:8: error: no field or member function named 'bar' in '@TypeOf(.{})'18// :9:8: error: no field or member function named 'bar' in '@TypeOf(.{})'
19// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_467'19// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_468'
20// :12:6: note: struct declared here20// :12:6: note: struct declared here
test/cases/compile_errors/coerce_anon_struct.zig+1-1
...@@ -6,6 +6,6 @@ export fn foo() void {...@@ -6,6 +6,6 @@ export fn foo() void {
66
7// error7// error
8//8//
9// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_456'9// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_457'
10// :3:16: note: struct declared here10// :3:16: note: struct declared here
11// :1:11: note: struct declared here11// :1:11: note: struct declared here