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 {
21282128 ref_start_index = static_len,
21292129 _,
21302130
2131 pub const static_len = 92;
2131 pub const static_len = 93;
21322132
21332133 pub fn toRef(i: Index) Inst.Ref {
21342134 return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
......@@ -2229,6 +2229,7 @@ pub const Inst = struct {
22292229 vector_4_u64_type,
22302230 vector_4_f16_type,
22312231 vector_8_f16_type,
2232 vector_2_f32_type,
22322233 vector_4_f32_type,
22332234 vector_8_f32_type,
22342235 vector_2_f64_type,
src/Air.zig+1
......@@ -1001,6 +1001,7 @@ pub const Inst = struct {
10011001 vector_4_u64_type = @intFromEnum(InternPool.Index.vector_4_u64_type),
10021002 vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type),
10031003 vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type),
1004 vector_2_f32_type = @intFromEnum(InternPool.Index.vector_2_f32_type),
10041005 vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type),
10051006 vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type),
10061007 vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type),
src/InternPool.zig+5
......@@ -4593,6 +4593,7 @@ pub const Index = enum(u32) {
45934593 vector_4_u64_type,
45944594 vector_4_f16_type,
45954595 vector_8_f16_type,
4596 vector_2_f32_type,
45964597 vector_4_f32_type,
45974598 vector_8_f32_type,
45984599 vector_2_f64_type,
......@@ -5124,6 +5125,8 @@ pub const static_keys = [_]Key{
51245125 .{ .vector_type = .{ .len = 4, .child = .f16_type } },
51255126 // @Vector(8, f16)
51265127 .{ .vector_type = .{ .len = 8, .child = .f16_type } },
5128 // @Vector(2, f32)
5129 .{ .vector_type = .{ .len = 2, .child = .f32_type } },
51275130 // @Vector(4, f32)
51285131 .{ .vector_type = .{ .len = 4, .child = .f32_type } },
51295132 // @Vector(8, f32)
......@@ -11778,6 +11781,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
1177811781 .vector_4_u64_type,
1177911782 .vector_4_f16_type,
1178011783 .vector_8_f16_type,
11784 .vector_2_f32_type,
1178111785 .vector_4_f32_type,
1178211786 .vector_8_f32_type,
1178311787 .vector_2_f64_type,
......@@ -12117,6 +12121,7 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
1211712121 .vector_4_u64_type,
1211812122 .vector_4_f16_type,
1211912123 .vector_8_f16_type,
12124 .vector_2_f32_type,
1212012125 .vector_4_f32_type,
1212112126 .vector_8_f32_type,
1212212127 .vector_2_f64_type,
src/Sema.zig+1
......@@ -36733,6 +36733,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
3673336733 .vector_4_u64_type,
3673436734 .vector_4_f16_type,
3673536735 .vector_8_f16_type,
36736 .vector_2_f32_type,
3673636737 .vector_4_f32_type,
3673736738 .vector_8_f32_type,
3673836739 .vector_2_f64_type,
src/Type.zig+1
......@@ -4209,6 +4209,7 @@ pub const vector_2_u64: Type = .{ .ip_index = .vector_2_u64_type };
42094209pub const vector_4_u64: Type = .{ .ip_index = .vector_4_u64_type };
42104210pub const vector_4_f16: Type = .{ .ip_index = .vector_4_f16_type };
42114211pub const vector_8_f16: Type = .{ .ip_index = .vector_8_f16_type };
4212pub const vector_2_f32: Type = .{ .ip_index = .vector_2_f32_type };
42124213pub const vector_4_f32: Type = .{ .ip_index = .vector_4_f32_type };
42134214pub const vector_8_f32: Type = .{ .ip_index = .vector_8_f32_type };
42144215pub 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 {
24142414}
24152415
24162416fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2417 @setEvalBranchQuota(3_900);
2417 @setEvalBranchQuota(4_100);
24182418 const pt = cg.pt;
24192419 const zcu = pt.zcu;
24202420 const ip = &zcu.intern_pool;
......@@ -5567,13 +5567,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
55675567 .dst_temps = .{.mem},
55685568 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
55695569 .each = .{ .once = &.{
5570 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5570 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
55715571 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
55725572 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
55735573 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
55745574 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
55755575 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
5576 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5576 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
55775577 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
55785578 } },
55795579 }, .{
......@@ -5600,14 +5600,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56005600 .dst_temps = .{.mem},
56015601 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
56025602 .each = .{ .once = &.{
5603 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5603 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
56045604 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
56055605 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
56065606 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
56075607 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
56085608 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
56095609 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
5610 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5610 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
56115611 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
56125612 } },
56135613 }, .{
......@@ -5634,7 +5634,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56345634 .dst_temps = .{.mem},
56355635 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
56365636 .each = .{ .once = &.{
5637 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5637 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
56385638 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
56395639 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
56405640 .{ ._, .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 {
56425642 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
56435643 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
56445644 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
5645 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5645 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
56465646 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
56475647 } },
56485648 }, .{
......@@ -5657,7 +5657,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56575657 .call_frame = .{ .alignment = .@"16" },
56585658 .extra_temps = .{
56595659 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5660 .{ .type = .f16, .kind = .{ .reg = .eax } },
5660 .{ .type = .f16, .kind = .{ .reg = .ax } },
56615661 .{ .type = .f32, .kind = .mem },
56625662 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
56635663 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
......@@ -5669,7 +5669,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56695669 .dst_temps = .{.mem},
56705670 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
56715671 .each = .{ .once = &.{
5672 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5672 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
56735673 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
56745674 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
56755675 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
......@@ -5680,7 +5680,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56805680 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
56815681 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
56825682 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
5683 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
5683 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
56845684 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
56855685 } },
56865686 }, .{
......@@ -5878,14 +5878,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58785878 .dst_temps = .{.mem},
58795879 .clobbers = .{ .eflags = true },
58805880 .each = .{ .once = &.{
5881 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5881 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
58825882 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
58835883 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
58845884 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
58855885 .{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
58865886 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
58875887 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
5888 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
5888 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
58895889 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
58905890 } },
58915891 }, .{
......@@ -5911,7 +5911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59115911 .dst_temps = .{.mem},
59125912 .clobbers = .{ .eflags = true },
59135913 .each = .{ .once = &.{
5914 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5914 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
59155915 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
59165916 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
59175917 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
......@@ -5919,7 +5919,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59195919 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
59205920 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
59215921 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
5922 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
5922 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
59235923 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
59245924 } },
59255925 }, .{
......@@ -5945,7 +5945,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59455945 .dst_temps = .{.mem},
59465946 .clobbers = .{ .eflags = true },
59475947 .each = .{ .once = &.{
5948 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
5948 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
59495949 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
59505950 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
59515951 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
......@@ -5955,7 +5955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59555955 .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
59565956 .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },
59575957 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5958 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
5958 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
59595959 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
59605960 } },
59615961 }, .{
......@@ -6179,14 +6179,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61796179 .dst_temps = .{.mem},
61806180 .clobbers = .{ .eflags = true },
61816181 .each = .{ .once = &.{
6182 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6182 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
61836183 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
61846184 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
61856185 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
61866186 .{ ._, .v_pd, .max, .tmp1y, .tmp2y, .tmp1y, ._ },
61876187 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
61886188 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6189 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
6189 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
61906190 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
61916191 } },
61926192 }, .{
......@@ -6212,7 +6212,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62126212 .dst_temps = .{.mem},
62136213 .clobbers = .{ .eflags = true },
62146214 .each = .{ .once = &.{
6215 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6215 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
62166216 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
62176217 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
62186218 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
......@@ -6220,7 +6220,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62206220 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
62216221 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
62226222 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
6223 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
6223 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
62246224 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62256225 } },
62266226 }, .{
......@@ -6246,7 +6246,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62466246 .dst_temps = .{.mem},
62476247 .clobbers = .{ .eflags = true },
62486248 .each = .{ .once = &.{
6249 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6249 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
62506250 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
62516251 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
62526252 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
......@@ -6256,7 +6256,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62566256 .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
62576257 .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },
62586258 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6259 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
6259 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
62606260 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62616261 } },
62626262 }, .{
......@@ -6283,14 +6283,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
62836283 .dst_temps = .{.mem},
62846284 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
62856285 .each = .{ .once = &.{
6286 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6286 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
62876287 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
62886288 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
62896289 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
62906290 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
62916291 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
62926292 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
6293 .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },
6293 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
62946294 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62956295 } },
62966296 }, .{
......@@ -6580,12 +6580,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
65806580 .dst_temps = .{.mem},
65816581 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
65826582 .each = .{ .once = &.{
6583 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6583 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
65846584 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
65856585 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
65866586 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
65876587 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6588 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
6588 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
65896589 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
65906590 } },
65916591 }, .{
......@@ -6612,12 +6612,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
66126612 .dst_temps = .{.mem},
66136613 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
66146614 .each = .{ .once = &.{
6615 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6615 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
66166616 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
66176617 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
66186618 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
66196619 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6620 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
6620 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
66216621 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
66226622 } },
66236623 }, .{
......@@ -6644,12 +6644,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
66446644 .dst_temps = .{.mem},
66456645 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
66466646 .each = .{ .once = &.{
6647 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
6647 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
66486648 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
66496649 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
66506650 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
66516651 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6652 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
6652 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
66536653 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
66546654 } },
66556655 } }) catch |err| switch (err) {
......@@ -9411,13 +9411,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
94119411 .dst_temps = .{.mem},
94129412 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
94139413 .each = .{ .once = &.{
9414 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9414 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
94159415 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
94169416 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) },
94179417 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) },
94189418 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
94199419 .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
9420 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
9420 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
94219421 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
94229422 } },
94239423 }, .{
......@@ -9444,14 +9444,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
94449444 .dst_temps = .{.mem},
94459445 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
94469446 .each = .{ .once = &.{
9447 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9447 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
94489448 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
94499449 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
94509450 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ },
94519451 .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ },
94529452 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
94539453 .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ },
9454 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
9454 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
94559455 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
94569456 } },
94579457 }, .{
......@@ -9478,7 +9478,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
94789478 .dst_temps = .{.mem},
94799479 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
94809480 .each = .{ .once = &.{
9481 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9481 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
94829482 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
94839483 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
94849484 .{ ._, .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 {
94869486 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
94879487 .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ },
94889488 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ },
9489 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
9489 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
94909490 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
94919491 } },
94929492 }, .{
......@@ -9501,7 +9501,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
95019501 .call_frame = .{ .alignment = .@"16" },
95029502 .extra_temps = .{
95039503 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9504 .{ .type = .f16, .kind = .{ .reg = .eax } },
9504 .{ .type = .f16, .kind = .{ .reg = .ax } },
95059505 .{ .type = .f32, .kind = .mem },
95069506 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
95079507 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
......@@ -9513,7 +9513,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
95139513 .dst_temps = .{.mem},
95149514 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
95159515 .each = .{ .once = &.{
9516 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9516 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
95179517 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
95189518 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
95199519 .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ },
......@@ -9524,7 +9524,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
95249524 .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ },
95259525 .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ },
95269526 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
9527 .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ },
9527 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
95289528 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
95299529 } },
95309530 }, .{
......@@ -9722,14 +9722,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
97229722 .dst_temps = .{.mem},
97239723 .clobbers = .{ .eflags = true },
97249724 .each = .{ .once = &.{
9725 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9725 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
97269726 .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
97279727 .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
97289728 .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
97299729 .{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
97309730 .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
97319731 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
9732 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
9732 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
97339733 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
97349734 } },
97359735 }, .{
......@@ -9755,7 +9755,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
97559755 .dst_temps = .{.mem},
97569756 .clobbers = .{ .eflags = true },
97579757 .each = .{ .once = &.{
9758 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9758 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
97599759 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
97609760 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
97619761 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
......@@ -9763,7 +9763,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
97639763 .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
97649764 .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
97659765 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
9766 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
9766 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
97679767 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
97689768 } },
97699769 }, .{
......@@ -9789,7 +9789,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
97899789 .dst_temps = .{.mem},
97909790 .clobbers = .{ .eflags = true },
97919791 .each = .{ .once = &.{
9792 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
9792 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
97939793 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
97949794 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
97959795 .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
......@@ -9799,7 +9799,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
97999799 .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ },
98009800 .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ },
98019801 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
9802 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
9802 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
98039803 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
98049804 } },
98059805 }, .{
......@@ -10023,14 +10023,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1002310023 .dst_temps = .{.mem},
1002410024 .clobbers = .{ .eflags = true },
1002510025 .each = .{ .once = &.{
10026 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10026 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1002710027 .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
1002810028 .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
1002910029 .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) },
1003010030 .{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ },
1003110031 .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
1003210032 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
10033 .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ },
10033 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
1003410034 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1003510035 } },
1003610036 }, .{
......@@ -10056,7 +10056,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1005610056 .dst_temps = .{.mem},
1005710057 .clobbers = .{ .eflags = true },
1005810058 .each = .{ .once = &.{
10059 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10059 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1006010060 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1006110061 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
1006210062 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
......@@ -10064,7 +10064,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1006410064 .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ },
1006510065 .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ },
1006610066 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
10067 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
10067 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
1006810068 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1006910069 } },
1007010070 }, .{
......@@ -10090,7 +10090,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1009010090 .dst_temps = .{.mem},
1009110091 .clobbers = .{ .eflags = true },
1009210092 .each = .{ .once = &.{
10093 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10093 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1009410094 .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1009510095 .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
1009610096 .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
......@@ -10100,7 +10100,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1010010100 .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ },
1010110101 .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ },
1010210102 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10103 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
10103 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
1010410104 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1010510105 } },
1010610106 }, .{
......@@ -10127,14 +10127,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1012710127 .dst_temps = .{.mem},
1012810128 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1012910129 .each = .{ .once = &.{
10130 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10130 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1013110131 .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ },
1013210132 .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ },
1013310133 .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ },
1013410134 .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ },
1013510135 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1013610136 .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
10137 .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ },
10137 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
1013810138 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1013910139 } },
1014010140 }, .{
......@@ -10412,12 +10412,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1041210412 .dst_temps = .{.mem},
1041310413 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1041410414 .each = .{ .once = &.{
10415 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10415 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1041610416 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1041710417 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
1041810418 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1041910419 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10420 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
10420 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
1042110421 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1042210422 } },
1042310423 }, .{
......@@ -10444,12 +10444,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1044410444 .dst_temps = .{.mem},
1044510445 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1044610446 .each = .{ .once = &.{
10447 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10447 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1044810448 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1044910449 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
1045010450 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1045110451 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10452 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
10452 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
1045310453 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1045410454 } },
1045510455 }, .{
......@@ -10476,12 +10476,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1047610476 .dst_temps = .{.mem},
1047710477 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1047810478 .each = .{ .once = &.{
10479 .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ },
10479 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
1048010480 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
1048110481 .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
1048210482 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
1048310483 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
10484 .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ },
10484 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
1048510485 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
1048610486 } },
1048710487 } }) catch |err| switch (err) {
......@@ -11990,13 +11990,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1199011990 },
1199111991 .dst_temps = .{.mem},
1199211992 .each = .{ .once = &.{
11993 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },
11993 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
1199411994 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
11995 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ },
11996 .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },
11997 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ },
11998 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
11999 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11995 .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ },
11996 .{ ._, ._, .xor, .tmp2q, .leai(.qword, .tmp1, .tmp0), ._, ._ },
11997 .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ },
11998 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ },
11999 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
12000 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
1200012001 } },
1200112002 }, .{
1200212003 .patterns = &.{
......@@ -12015,13 +12016,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1201512016 },
1201612017 .dst_temps = .{.mem},
1201712018 .each = .{ .once = &.{
12018 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },
12019 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
1201912020 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
12020 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ },
12021 .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },
12022 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ },
12023 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
12024 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12021 .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ },
12022 .{ ._, ._, .xor, .tmp2d, .leai(.dword, .tmp1, .tmp0), ._, ._ },
12023 .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ },
12024 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 4), ._, ._ },
12025 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
12026 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
1202512027 } },
1202612028 } }) catch |err| switch (err) {
1202712029 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
......@@ -20246,7 +20248,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2024620248 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ },
2024720249 .{ ._, ._, .sub, .tmp1d, .si(8), ._, ._ },
2024820250 .{ ._, ._a, .j, .@"1b", ._, ._, ._ },
20249 .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ },
20251 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ },
2025020252 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
2025120253 } },
2025220254 }, .{
......@@ -21899,7 +21901,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2189921901 .patterns = &.{
2190021902 .{ .src = .{ .to_sse, .none } },
2190121903 },
21902 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
21904 .dst_temps = .{.{ .rc = .sse }},
2190321905 .each = .{ .once = &.{
2190421906 .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ },
2190521907 } },
......@@ -21910,7 +21912,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2191021912 .patterns = &.{
2191121913 .{ .src = .{ .to_sse, .none } },
2191221914 },
21913 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
21915 .dst_temps = .{.{ .rc = .sse }},
2191421916 .each = .{ .once = &.{
2191521917 .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ },
2191621918 } },
......@@ -21921,7 +21923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2192121923 .patterns = &.{
2192221924 .{ .src = .{ .to_sse, .none } },
2192321925 },
21924 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
21926 .dst_temps = .{.{ .rc = .sse }},
2192521927 .each = .{ .once = &.{
2192621928 .{ ._, .v_, .cvtps2ph, .dst0x, .src0y, .rm(.{}), ._ },
2192721929 } },
......@@ -21949,6 +21951,152 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2194921951 .each = .{ .once = &.{
2195021952 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2195121953 } },
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 } },
2195222100 }, .{
2195322101 .required_features = .{ .sse, null, null, null },
2195422102 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
......@@ -21975,60 +22123,158 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2197522123 } },
2197622124 }, .{
2197722125 .required_features = .{ .avx, null, null, null },
21978 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
21979 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
22126 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
22127 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
2198022128 .patterns = &.{
21981 .{ .src = .{ .mem, .none } },
22129 .{ .src = .{ .to_mem, .none } },
2198222130 },
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 },
2198422145 .each = .{ .once = &.{
21985 .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
21986 .{ ._, .v_ss, .cvtsd2, .dst0x, .dst0x, .src0q, ._ },
22146 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
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", ._, ._, ._ },
2198722152 } },
2198822153 }, .{
21989 .required_features = .{ .avx, null, null, null },
21990 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
21991 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
22154 .required_features = .{ .sse4_1, null, null, null },
22155 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any },
22156 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }},
2199222157 .patterns = &.{
21993 .{ .src = .{ .to_sse, .none } },
22158 .{ .src = .{ .to_mem, .none } },
2199422159 },
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 },
2199622174 .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", ._, ._, ._ },
2199822181 } },
2199922182 }, .{
2200022183 .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 },
2200122246 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
2200222247 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
2200322248 .patterns = &.{
22004 .{ .src = .{ .mut_sse, .none } },
22249 .{ .src = .{ .mem, .none } },
2200522250 },
22006 .dst_temps = .{.{ .ref = .src0 }},
22251 .dst_temps = .{.{ .rc = .sse }},
2200722252 .each = .{ .once = &.{
22008 .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },
22253 .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ },
22254 .{ ._, .v_ss, .cvtsd2, .dst0x, .dst0x, .src0q, ._ },
2200922255 } },
2201022256 }, .{
22011 .required_features = .{ .sse2, null, null, null },
22257 .required_features = .{ .avx, null, null, null },
2201222258 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
2201322259 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
2201422260 .patterns = &.{
22015 .{ .src = .{ .mem, .none } },
22016 .{ .src = .{ .sse, .none } },
22261 .{ .src = .{ .to_sse, .none } },
2201722262 },
2201822263 .dst_temps = .{.{ .rc = .sse }},
2201922264 .each = .{ .once = &.{
22020 .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
22021 .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },
22265 .{ ._, .v_ss, .cvtsd2, .dst0x, .src0x, .src0q, ._ },
2202222266 } },
2202322267 }, .{
2202422268 .required_features = .{ .sse2, null, null, null },
2202522269 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
2202622270 .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }},
2202722271 .patterns = &.{
22028 .{ .src = .{ .to_mut_sse, .none } },
22272 .{ .src = .{ .mem, .none } },
22273 .{ .src = .{ .to_sse, .none } },
2202922274 },
22030 .dst_temps = .{.{ .ref = .src0 }},
22275 .dst_temps = .{.{ .rc = .sse }},
2203122276 .each = .{ .once = &.{
22277 .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
2203222278 .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ },
2203322279 } },
2203422280 }, .{
......@@ -22062,9 +22308,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2206222308 .{ .src = .{ .mem, .none } },
2206322309 .{ .src = .{ .to_sse, .none } },
2206422310 },
22065 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
22311 .dst_temps = .{.{ .rc = .sse }},
2206622312 .each = .{ .once = &.{
22067 .{ ._, .v_ps, .cvtpd2, .dst0x, .src0q, ._, ._ },
22313 .{ ._, .v_ps, .cvtpd2, .dst0x, .src0x, ._, ._ },
2206822314 } },
2206922315 }, .{
2207022316 .required_features = .{ .sse2, null, null, null },
......@@ -22074,9 +22320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2207422320 .{ .src = .{ .mem, .none } },
2207522321 .{ .src = .{ .to_sse, .none } },
2207622322 },
22077 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
22323 .dst_temps = .{.{ .rc = .sse }},
2207822324 .each = .{ .once = &.{
22079 .{ ._, ._ps, .cvtpd2, .dst0x, .src0q, ._, ._ },
22325 .{ ._, ._ps, .cvtpd2, .dst0x, .src0x, ._, ._ },
2208022326 } },
2208122327 }, .{
2208222328 .required_features = .{ .avx, null, null, null },
......@@ -22086,12 +22332,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2208622332 .{ .src = .{ .mem, .none } },
2208722333 .{ .src = .{ .to_sse, .none } },
2208822334 },
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 },
2209022359 .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", ._, ._, ._ },
2209222365 } },
2209322366 }, .{
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 },
2209522422 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
2209622423 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
2209722424 .patterns = &.{
......@@ -22117,7 +22444,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2211722444 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
2211822445 } },
2211922446 }, .{
22120 .required_features = .{ .@"64bit", .sse2, null, null },
22447 .required_features = .{ .sse2, null, null, null },
2212122448 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
2212222449 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
2212322450 .patterns = &.{
......@@ -22143,7 +22470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2214322470 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
2214422471 } },
2214522472 }, .{
22146 .required_features = .{ .@"64bit", .sse, null, null },
22473 .required_features = .{ .sse, null, null, null },
2214722474 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
2214822475 .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }},
2214922476 .patterns = &.{
......@@ -22168,6 +22495,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2216822495 .{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ },
2216922496 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
2217022497 } },
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 } },
2217122621 }, .{
2217222622 .required_features = .{ .x87, null, null, null },
2217322623 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
......@@ -22192,6 +22642,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2219222642 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
2219322643 .{ ._, .f_p, .st, .dst0d, ._, ._, ._ },
2219422644 } },
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 } },
2219522672 }, .{
2219622673 .required_features = .{ .x87, null, null, null },
2219722674 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
......@@ -22216,6 +22693,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2221622693 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
2221722694 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
2221822695 } },
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 } },
2221922723 }, .{
2222022724 .required_features = .{ .sse, null, null, null },
2222122725 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
......@@ -22240,6 +22744,125 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2224022744 .each = .{ .once = &.{
2224122745 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2224222746 } },
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 } },
2224322866 }, .{
2224422867 .required_features = .{ .sse, null, null, null },
2224522868 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
......@@ -22264,6 +22887,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2226422887 .each = .{ .once = &.{
2226522888 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2226622889 } },
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 } },
2226722977 }, .{
2226822978 .required_features = .{ .sse, null, null, null },
2226922979 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
......@@ -22288,6 +22998,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2228822998 .each = .{ .once = &.{
2228922999 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2229023000 } },
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 } },
2229123088 }, .{
2229223089 .required_features = .{ .sse, null, null, null },
2229323090 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
......@@ -22312,6 +23109,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2231223109 .each = .{ .once = &.{
2231323110 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2231423111 } },
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 } },
2231523202 } }) catch |err| switch (err) {
2231623203 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
2231723204 @tagName(air_tag),
......@@ -22334,7 +23221,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2233423221 .patterns = &.{
2233523222 .{ .src = .{ .to_sse, .none } },
2233623223 },
22337 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23224 .dst_temps = .{.{ .rc = .sse }},
2233823225 .each = .{ .once = &.{
2233923226 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
2234023227 } },
......@@ -22346,7 +23233,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2234623233 .{ .src = .{ .mem, .none } },
2234723234 .{ .src = .{ .to_sse, .none } },
2234823235 },
22349 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23236 .dst_temps = .{.{ .rc = .sse }},
2235023237 .each = .{ .once = &.{
2235123238 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
2235223239 } },
......@@ -22358,7 +23245,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2235823245 .{ .src = .{ .mem, .none } },
2235923246 .{ .src = .{ .to_sse, .none } },
2236023247 },
22361 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23248 .dst_temps = .{.{ .rc = .sse }},
2236223249 .each = .{ .once = &.{
2236323250 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
2236423251 } },
......@@ -22386,6 +23273,124 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2238623273 .each = .{ .once = &.{
2238723274 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2238823275 } },
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 } },
2238923394 }, .{
2239023395 .required_features = .{ .f16c, null, null, null },
2239123396 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
......@@ -22393,7 +23398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2239323398 .patterns = &.{
2239423399 .{ .src = .{ .to_sse, .none } },
2239523400 },
22396 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23401 .dst_temps = .{.{ .rc = .sse }},
2239723402 .each = .{ .once = &.{
2239823403 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
2239923404 .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .dst0d, ._ },
......@@ -22406,7 +23411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2240623411 .{ .src = .{ .mem, .none } },
2240723412 .{ .src = .{ .to_sse, .none } },
2240823413 },
22409 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23414 .dst_temps = .{.{ .rc = .sse }},
2241023415 .each = .{ .once = &.{
2241123416 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
2241223417 .{ ._, .v_pd, .cvtps2, .dst0x, .dst0q, ._, ._ },
......@@ -22419,11 +23424,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2241923424 .{ .src = .{ .mem, .none } },
2242023425 .{ .src = .{ .to_sse, .none } },
2242123426 },
22422 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23427 .dst_temps = .{.{ .rc = .sse }},
2242323428 .each = .{ .once = &.{
2242423429 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
2242523430 .{ ._, .v_pd, .cvtps2, .dst0y, .dst0x, ._, ._ },
2242623431 } },
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 } },
2242723460 }, .{
2242823461 .required_features = .{ .sse, null, null, null },
2242923462 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
......@@ -22448,6 +23481,128 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2244823481 .each = .{ .once = &.{
2244923482 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2245023483 } },
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 } },
2245123606 }, .{
2245223607 .required_features = .{ .f16c, .x87, null, null },
2245323608 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
......@@ -22456,7 +23611,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2245623611 .{ .src = .{ .to_sse, .none } },
2245723612 },
2245823613 .extra_temps = .{
22459 .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
23614 .{ .type = .f32, .kind = .{ .rc = .sse } },
2246023615 .{ .type = .f32, .kind = .mem },
2246123616 .{ .type = .f80, .kind = .{ .reg = .st7 } },
2246223617 .unused,
......@@ -22497,6 +23652,100 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2249723652 .each = .{ .once = &.{
2249823653 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2249923654 } },
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 } },
2250023749 }, .{
2250123750 .required_features = .{ .sse, null, null, null },
2250223751 .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any },
......@@ -22523,60 +23772,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2252323772 } },
2252423773 }, .{
2252523774 .required_features = .{ .avx, null, null, null },
22526 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
22527 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
23775 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23776 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
2252823777 .patterns = &.{
22529 .{ .src = .{ .mem, .none } },
23778 .{ .src = .{ .to_mem, .none } },
2253023779 },
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 },
2253223794 .each = .{ .once = &.{
22533 .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
22534 .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .src0d, ._ },
23795 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ },
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", ._, ._, ._ },
2253523802 } },
2253623803 }, .{
22537 .required_features = .{ .avx, null, null, null },
22538 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
22539 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
23804 .required_features = .{ .sse2, null, null, null },
23805 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any },
23806 .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }},
2254023807 .patterns = &.{
22541 .{ .src = .{ .to_sse, .none } },
23808 .{ .src = .{ .to_mem, .none } },
2254223809 },
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 },
2254423824 .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", ._, ._, ._ },
2254623832 } },
2254723833 }, .{
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 },
2254923866 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
2255023867 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
2255123868 .patterns = &.{
22552 .{ .src = .{ .mut_sse, .none } },
23869 .{ .src = .{ .mem, .none } },
2255323870 },
22554 .dst_temps = .{.{ .ref = .src0 }},
23871 .dst_temps = .{.{ .rc = .sse }},
2255523872 .each = .{ .once = &.{
22556 .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },
23873 .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ },
23874 .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .src0d, ._ },
2255723875 } },
2255823876 }, .{
22559 .required_features = .{ .sse2, null, null, null },
23877 .required_features = .{ .avx, null, null, null },
2256023878 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
2256123879 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
2256223880 .patterns = &.{
22563 .{ .src = .{ .mem, .none } },
22564 .{ .src = .{ .sse, .none } },
23881 .{ .src = .{ .to_sse, .none } },
2256523882 },
2256623883 .dst_temps = .{.{ .rc = .sse }},
2256723884 .each = .{ .once = &.{
22568 .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
22569 .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },
23885 .{ ._, .v_sd, .cvtss2, .dst0x, .src0x, .src0d, ._ },
2257023886 } },
2257123887 }, .{
2257223888 .required_features = .{ .sse2, null, null, null },
2257323889 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
2257423890 .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }},
2257523891 .patterns = &.{
22576 .{ .src = .{ .to_mut_sse, .none } },
23892 .{ .src = .{ .mem, .none } },
23893 .{ .src = .{ .to_sse, .none } },
2257723894 },
22578 .dst_temps = .{.{ .ref = .src0 }},
23895 .dst_temps = .{.{ .rc = .sse }},
2257923896 .each = .{ .once = &.{
23897 .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ },
2258023898 .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ },
2258123899 } },
2258223900 }, .{
......@@ -22610,7 +23928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2261023928 .{ .src = .{ .mem, .none } },
2261123929 .{ .src = .{ .to_sse, .none } },
2261223930 },
22613 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23931 .dst_temps = .{.{ .rc = .sse }},
2261423932 .each = .{ .once = &.{
2261523933 .{ ._, .v_pd, .cvtps2, .dst0x, .src0q, ._, ._ },
2261623934 } },
......@@ -22622,7 +23940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2262223940 .{ .src = .{ .mem, .none } },
2262323941 .{ .src = .{ .to_sse, .none } },
2262423942 },
22625 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23943 .dst_temps = .{.{ .rc = .sse }},
2262623944 .each = .{ .once = &.{
2262723945 .{ ._, ._pd, .cvtps2, .dst0x, .src0q, ._, ._ },
2262823946 } },
......@@ -22634,10 +23952,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2263423952 .{ .src = .{ .mem, .none } },
2263523953 .{ .src = .{ .to_sse, .none } },
2263623954 },
22637 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
23955 .dst_temps = .{.{ .rc = .sse }},
2263823956 .each = .{ .once = &.{
2263923957 .{ ._, .v_pd, .cvtps2, .dst0y, .src0x, ._, ._ },
2264023958 } },
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 } },
2264124040 }, .{
2264224041 .required_features = .{ .x87, null, null, null },
2264324042 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
......@@ -22661,6 +24060,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2266124060 .{ ._, .f_, .ld, .src0d, ._, ._, ._ },
2266224061 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
2266324062 } },
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 } },
2266424089 }, .{
2266524090 .required_features = .{ .sse, null, null, null },
2266624091 .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any },
......@@ -22685,6 +24110,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2268524110 .each = .{ .once = &.{
2268624111 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2268724112 } },
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 } },
2268824200 }, .{
2268924201 .required_features = .{ .x87, null, null, null },
2269024202 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
......@@ -22708,6 +24220,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2270824220 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
2270924221 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
2271024222 } },
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 } },
2271124249 }, .{
2271224250 .required_features = .{ .sse, null, null, null },
2271324251 .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any },
......@@ -22733,7 +24271,95 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2273324271 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
2273424272 } },
2273524273 }, .{
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 },
2273724363 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
2273824364 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
2273924365 .patterns = &.{
......@@ -22759,7 +24385,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2275924385 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
2276024386 } },
2276124387 }, .{
22762 .required_features = .{ .@"64bit", .sse2, null, null },
24388 .required_features = .{ .sse2, null, null, null },
2276324389 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
2276424390 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
2276524391 .patterns = &.{
......@@ -22785,7 +24411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2278524411 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
2278624412 } },
2278724413 }, .{
22788 .required_features = .{ .@"64bit", .sse, null, null },
24414 .required_features = .{ .sse, null, null, null },
2278924415 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
2279024416 .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }},
2279124417 .patterns = &.{
......@@ -22810,6 +24436,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2281024436 .{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ },
2281124437 .{ ._, ._, .call, .tmp1d, ._, ._, ._ },
2281224438 } },
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 } },
2281324529 } }) catch |err| switch (err) {
2281424530 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
2281524531 @tagName(air_tag),
......@@ -30715,6 +32431,7 @@ fn genBinOp(
3071532431 try self.copyToTmpRegister(rhs_ty, rhs_mcv)).to128(),
3071632432 );
3071732433 try self.asmRegisterRegister(.{ .v_ps, .cvtph2 }, dst_reg, dst_reg);
32434 try self.asmRegisterRegister(.{ .v_, .movshdup }, tmp_reg, dst_reg);
3071832435 break :src .{ .register = tmp_reg };
3071932436 } else rhs_mcv;
3072032437
......@@ -43508,7 +45225,7 @@ const Select = struct {
4350845225 top: u3,
4350945226
4351045227 fn emitLabel(s: *Select, label_index: Label) void {
43511 if (label_index == ._) return;
45228 assert(@intFromEnum(label_index) < @intFromEnum(Label._));
4351245229 const label = &s.labels[@intFromEnum(label_index)];
4351345230 for (&label.forward) |*reloc| {
4351445231 if (reloc.*) |r| s.cg.performReloc(r);
......@@ -43518,29 +45235,35 @@ const Select = struct {
4351845235 }
4351945236
4352045237 fn emit(s: *Select, inst: Instruction) !void {
43521 s.emitLabel(inst[0]);
4352245238 const mir_tag: Mir.Inst.FixedTag = .{ inst[1], inst[2] };
43523 var mir_ops: [4]CodeGen.Operand = undefined;
43524 inline for (&mir_ops, 3..) |*mir_op, inst_index| mir_op.* = try inst[inst_index].lower(s);
43525 s.cg.asmOps(mir_tag, mir_ops) catch |err| switch (err) {
43526 error.InvalidInstruction => {
43527 const fixes = @tagName(mir_tag[0]);
43528 const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;
43529 return s.cg.fail(
43530 "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'",
43531 .{
43532 fixes[0..fixes_blank],
43533 @tagName(mir_tag[1]),
43534 fixes[fixes_blank + 1 ..],
43535 @tagName(mir_ops[0]),
43536 @tagName(mir_ops[1]),
43537 @tagName(mir_ops[2]),
43538 @tagName(mir_ops[3]),
43539 },
43540 );
43541 },
43542 else => |e| return e,
43543 };
45239 pseudo: {
45240 switch (inst[0]) {
45241 .@"0:", .@"1:", .@"2:" => |label| s.emitLabel(label),
45242 ._ => {},
45243 .pseudo => break :pseudo,
45244 }
45245 var mir_ops: [4]CodeGen.Operand = undefined;
45246 inline for (&mir_ops, 3..) |*mir_op, inst_index| mir_op.* = try inst[inst_index].lower(s);
45247 s.cg.asmOps(mir_tag, mir_ops) catch |err| switch (err) {
45248 error.InvalidInstruction => {
45249 const fixes = @tagName(mir_tag[0]);
45250 const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;
45251 return s.cg.fail(
45252 "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'",
45253 .{
45254 fixes[0..fixes_blank],
45255 @tagName(mir_tag[1]),
45256 fixes[fixes_blank + 1 ..],
45257 @tagName(mir_ops[0]),
45258 @tagName(mir_ops[1]),
45259 @tagName(mir_ops[2]),
45260 @tagName(mir_ops[3]),
45261 },
45262 );
45263 },
45264 else => |e| return e,
45265 };
45266 }
4354445267 switch (mir_tag[0]) {
4354545268 .f_ => switch (mir_tag[1]) {
4354645269 .@"2xm1",
......@@ -43594,32 +45317,6 @@ const Select = struct {
4359445317 .yl2x => s.top +%= 1,
4359545318 else => unreachable,
4359645319 },
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 },
4362345320 .f_cstp => switch (mir_tag[1]) {
4362445321 .de => s.top -%= 1,
4362545322 .in => s.top +%= 1,
......@@ -43646,6 +45343,32 @@ const Select = struct {
4364645343 .com, .ucom => s.top +%= 2,
4364745344 else => unreachable,
4364845345 },
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 },
4364945372 .fx_ => switch (mir_tag[1]) {
4365045373 .rstor => unreachable,
4365145374 .save => {},
......@@ -44199,7 +45922,7 @@ const Select = struct {
4419945922 Select.Operand,
4420045923 Select.Operand,
4420145924 };
44202 const Label = enum { @"0:", @"1:", @"2:", @"_" };
45925 const Label = enum { @"0:", @"1:", @"2:", @"_", pseudo };
4420345926 const Operand = struct {
4420445927 tag: Tag,
4420545928 base: Ref.Sized = .none,
......@@ -44228,7 +45951,7 @@ const Select = struct {
4422845951 ptr_bit_size,
4422945952 size,
4423045953 size_sub_elem_size,
44231 src0_unaligned_size,
45954 unaligned_size,
4423245955 bit_size,
4423345956 src0_bit_size,
4423445957 len,
......@@ -44252,8 +45975,8 @@ const Select = struct {
4425245975 const sub_size_div_4: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"4" };
4425345976 const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" };
4425445977 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" };
44256 const sub_src0_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" };
45978 const add_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" };
45979 const sub_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" };
4425745980 const add_2_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"2" };
4425845981 const add_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };
4425945982 const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };
......@@ -44744,7 +46467,7 @@ const Select = struct {
4474446467 const ty = op.base.ref.deref(s).typeOf(s.cg);
4474546468 break :lhs @intCast(ty.abiSize(s.cg.pt.zcu) - ty.elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu));
4474646469 },
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))),
4474846471 .bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),
4474946472 .src0_bit_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),
4475046473 .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 {
17071707 };
17081708 return pool.fromFields(allocator, .@"struct", &fields, kind);
17091709 },
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 },
17101725 .vector_4_f32_type => {
17111726 const vector_ctype = try pool.getVector(allocator, .{
17121727 .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
1081010810test floatCast {
1081110811 const test_float_cast = cast(floatCast, .{ .strict = true });
1081210812 try test_float_cast.testFloats();
10813 try test_float_cast.testFloatVectors();
1081310814}
1081410815
1081510816inline 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 {
1515// error
1616//
1717// :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-known
18// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_464.C' must be comptime-known
1919// :4:16: note: struct requires comptime because of this field
2020// :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 {
1616//
1717// :3:6: error: no field or member function named 'copy' in '[]const u8'
1818// :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'
2020// :12:6: note: struct declared here
test/cases/compile_errors/coerce_anon_struct.zig+1-1
......@@ -6,6 +6,6 @@ export fn foo() void {
66
77// error
88//
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'
1010// :3:16: note: struct declared here
1111// :1:11: note: struct declared here