authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-24 16:50:37-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-05-28 15:10:22-04:00
log7d727ed7dfc7f3a2880ff1d7b88569dea9531e73
treef1b8c6dcbcfc985745c6c5f1861bdc314a3d6ead
parentd1785cf61c2b7db5553532cb62cb058d99e2c7b0

x86_64: implement strict float `@reduce(.Mul)`


2 files changed, 715 insertions(+), 65 deletions(-)

src/arch/x86_64/CodeGen.zig+714-65
......@@ -2389,7 +2389,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
23892389}
23902390
23912391fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2392 @setEvalBranchQuota(23_900);
2392 @setEvalBranchQuota(24_000);
23932393 const pt = cg.pt;
23942394 const zcu = pt.zcu;
23952395 const ip = &zcu.intern_pool;
......@@ -101686,10 +101686,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
101686101686 .each = .{ .once = &.{
101687101687 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
101688101688 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
101689 .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
101689 .{ ._, ._, .movzx, .dst0d, .memd(.tmp1b, 1), ._, ._ },
101690101690 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
101691101691 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101692 .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
101692 .{ ._, ._, .mov, .memd(.tmp1b, 1), .dst0b, ._, ._ },
101693101693 .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
101694101694 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101695101695 .{ ._, ._, .movsx, .dst0d, .tmp2b, ._, ._ },
......@@ -101718,10 +101718,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
101718101718 .each = .{ .once = &.{
101719101719 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
101720101720 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
101721 .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
101721 .{ ._, ._, .movzx, .dst0d, .memd(.tmp1b, 1), ._, ._ },
101722101722 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
101723101723 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101724 .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
101724 .{ ._, ._, .mov, .memd(.tmp1b, 1), .dst0b, ._, ._ },
101725101725 .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
101726101726 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101727101727 .{ ._, ._, .movzx, .dst0d, .tmp2b, ._, ._ },
......@@ -101750,10 +101750,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
101750101750 .each = .{ .once = &.{
101751101751 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
101752101752 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
101753 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
101753 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
101754101754 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
101755101755 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101756 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
101756 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
101757101757 .{ ._, .fi_p, .st, .dst0w, ._, ._, ._ },
101758101758 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101759101759 } },
......@@ -101781,10 +101781,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
101781101781 .each = .{ .once = &.{
101782101782 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
101783101783 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
101784 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
101784 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
101785101785 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
101786101786 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101787 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
101787 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
101788101788 .{ ._, .fi_p, .st, .dst0d, ._, ._, ._ },
101789101789 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101790101790 } },
......@@ -101836,10 +101836,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
101836101836 .each = .{ .once = &.{
101837101837 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
101838101838 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
101839 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
101839 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
101840101840 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
101841101841 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101842 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
101842 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
101843101843 .{ ._, .fi_p, .st, .dst0q, ._, ._, ._ },
101844101844 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
101845101845 } },
......@@ -101933,10 +101933,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
101933101933 .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
101934101934 .{ ._, .f_, .ld, .tmp0t, ._, ._, ._ },
101935101935 .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
101936 .{ ._, ._, .movzx, .dst0d, .tmp2w, ._, ._ },
101936 .{ ._, ._, .movzx, .dst0d, .memd(.tmp2b, 1), ._, ._ },
101937101937 .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
101938101938 .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
101939 .{ ._, ._, .mov, .tmp2w, .dst0w, ._, ._ },
101939 .{ ._, ._, .mov, .memd(.tmp2b, 1), .dst0b, ._, ._ },
101940101940 .{ ._, ._, .lea, .dst0q, .mem(.tmp3), ._, ._ },
101941101941 .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
101942101942 .{ ._, .f_, .sub, .lea(.dst0d), ._, ._, ._ },
......@@ -102284,10 +102284,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
102284102284 .each = .{ .once = &.{
102285102285 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
102286102286 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
102287 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
102287 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
102288102288 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
102289102289 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
102290 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
102290 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
102291102291 .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
102292102292 .{ ._, .fi_p, .st, .tmp4w, ._, ._, ._ },
102293102293 .{ ._, ._, .movzx, .tmp2d, .tmp4b, ._, ._ },
......@@ -102321,10 +102321,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
102321102321 .each = .{ .once = &.{
102322102322 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
102323102323 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
102324 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
102324 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
102325102325 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
102326102326 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
102327 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
102327 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
102328102328 .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
102329102329 .{ ._, .fi_p, .st, .tmp4w, ._, ._, ._ },
102330102330 .{ ._, ._, .movzx, .tmp2d, .tmp4b, ._, ._ },
......@@ -102772,10 +102772,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
102772102772 .clobbers = .{ .eflags = true },
102773102773 .each = .{ .once = &.{
102774102774 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
102775 .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
102775 .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
102776102776 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
102777102777 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
102778 .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
102778 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
102779102779 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
102780102780 .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
102781102781 .{ ._, .fi_p, .st, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
......@@ -102808,10 +102808,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
102808102808 .each = .{ .once = &.{
102809102809 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
102810102810 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
102811 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
102811 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
102812102812 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
102813102813 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
102814 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
102814 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
102815102815 .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
102816102816 .{ ._, .fi_p, .st, .tmp4d, ._, ._, ._ },
102817102817 .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
......@@ -103032,10 +103032,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103032103032 .clobbers = .{ .eflags = true },
103033103033 .each = .{ .once = &.{
103034103034 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
103035 .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
103035 .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
103036103036 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
103037103037 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
103038 .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
103038 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
103039103039 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
103040103040 .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
103041103041 .{ ._, .fi_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
......@@ -103068,10 +103068,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103068103068 .each = .{ .once = &.{
103069103069 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
103070103070 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
103071 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
103071 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
103072103072 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
103073103073 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
103074 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
103074 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
103075103075 .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
103076103076 .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
103077103077 .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
......@@ -103350,10 +103350,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
103350103350 .clobbers = .{ .eflags = true },
103351103351 .each = .{ .once = &.{
103352103352 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
103353 .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
103353 .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
103354103354 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
103355103355 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
103356 .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
103356 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
103357103357 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
103358103358 .{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
103359103359 .{ ._, .fi_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
......@@ -104001,10 +104001,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104001104001 .each = .{ .once = &.{
104002104002 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
104003104003 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104004 .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
104004 .{ ._, ._, .movzx, .dst0d, .memd(.tmp1b, 1), ._, ._ },
104005104005 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104006104006 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104007 .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
104007 .{ ._, ._, .mov, .memd(.tmp1b, 1), .dst0b, ._, ._ },
104008104008 .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
104009104009 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104010104010 .{ ._, ._, .movsx, .dst0d, .tmp2b, ._, ._ },
......@@ -104061,10 +104061,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104061104061 .each = .{ .once = &.{
104062104062 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
104063104063 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104064 .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
104064 .{ ._, ._, .movzx, .dst0d, .memd(.tmp1b, 1), ._, ._ },
104065104065 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104066104066 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104067 .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
104067 .{ ._, ._, .mov, .memd(.tmp1b, 1), .dst0b, ._, ._ },
104068104068 .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
104069104069 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104070104070 .{ ._, ._, .movzx, .dst0d, .tmp2b, ._, ._ },
......@@ -104161,10 +104161,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104161104161 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
104162104162 .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104163104163 .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
104164 .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
104164 .{ ._, ._, .movzx, .tmp3d, .memd(.tmp2b, 1), ._, ._ },
104165104165 .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
104166104166 .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
104167 .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
104167 .{ ._, ._, .mov, .memd(.tmp2b, 1), .tmp3b, ._, ._ },
104168104168 .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
104169104169 .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
104170104170 .{ ._, ._, .movsx, .tmp3d, .tmp5b, ._, ._ },
......@@ -104200,10 +104200,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104200104200 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
104201104201 .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104202104202 .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
104203 .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
104203 .{ ._, ._, .movzx, .tmp3d, .memd(.tmp2b, 1), ._, ._ },
104204104204 .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
104205104205 .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
104206 .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
104206 .{ ._, ._, .mov, .memd(.tmp2b, 1), .tmp3b, ._, ._ },
104207104207 .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
104208104208 .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
104209104209 .{ ._, ._, .movsx, .tmp3d, .tmp5b, ._, ._ },
......@@ -104305,10 +104305,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104305104305 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
104306104306 .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104307104307 .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
104308 .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
104308 .{ ._, ._, .movzx, .tmp3d, .memd(.tmp2b, 1), ._, ._ },
104309104309 .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
104310104310 .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
104311 .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
104311 .{ ._, ._, .mov, .memd(.tmp2b, 1), .tmp3b, ._, ._ },
104312104312 .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
104313104313 .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
104314104314 .{ ._, ._, .movzx, .tmp3d, .tmp5b, ._, ._ },
......@@ -104344,10 +104344,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104344104344 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
104345104345 .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104346104346 .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
104347 .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
104347 .{ ._, ._, .movzx, .tmp3d, .memd(.tmp2b, 1), ._, ._ },
104348104348 .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
104349104349 .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
104350 .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
104350 .{ ._, ._, .mov, .memd(.tmp2b, 1), .tmp3b, ._, ._ },
104351104351 .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
104352104352 .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
104353104353 .{ ._, ._, .movzx, .tmp3d, .tmp5b, ._, ._ },
......@@ -104408,10 +104408,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104408104408 .each = .{ .once = &.{
104409104409 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
104410104410 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104411 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
104411 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
104412104412 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104413104413 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104414 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
104414 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
104415104415 .{ ._, .fi_p, .st, .dst0w, ._, ._, ._ },
104416104416 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104417104417 } },
......@@ -104468,10 +104468,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104468104468 .clobbers = .{ .eflags = true },
104469104469 .each = .{ .once = &.{
104470104470 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104471 .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
104471 .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
104472104472 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104473104473 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104474 .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
104474 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
104475104475 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104476104476 .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
104477104477 .{ ._, .fi_p, .st, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
......@@ -104535,10 +104535,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104535104535 .each = .{ .once = &.{
104536104536 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104537104537 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104538 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
104538 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
104539104539 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104540104540 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104541 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
104541 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
104542104542 .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
104543104543 .{ ._, .fi_p, .st, .tmp4d, ._, ._, ._ },
104544104544 .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
......@@ -104598,10 +104598,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104598104598 .each = .{ .once = &.{
104599104599 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
104600104600 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104601 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
104601 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
104602104602 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104603104603 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104604 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
104604 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
104605104605 .{ ._, .fi_p, .st, .dst0d, ._, ._, ._ },
104606104606 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104607104607 } },
......@@ -104658,10 +104658,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104658104658 .clobbers = .{ .eflags = true },
104659104659 .each = .{ .once = &.{
104660104660 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104661 .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
104661 .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
104662104662 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104663104663 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104664 .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
104664 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
104665104665 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104666104666 .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
104667104667 .{ ._, .fi_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
......@@ -104725,10 +104725,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104725104725 .each = .{ .once = &.{
104726104726 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104727104727 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104728 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
104728 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
104729104729 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104730104730 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104731 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
104731 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
104732104732 .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
104733104733 .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
104734104734 .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
......@@ -104788,10 +104788,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104788104788 .each = .{ .once = &.{
104789104789 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
104790104790 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104791 .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
104791 .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
104792104792 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104793104793 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104794 .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
104794 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
104795104795 .{ ._, .fi_p, .st, .dst0q, ._, ._, ._ },
104796104796 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104797104797 } },
......@@ -104858,10 +104858,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104858104858 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
104859104859 .{ ._, .f_, .ld, .tmp0t, ._, ._, ._ },
104860104860 .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
104861 .{ ._, ._, .movzx, .dst0d, .tmp2w, ._, ._ },
104861 .{ ._, ._, .movzx, .dst0d, .memd(.tmp2b, 1), ._, ._ },
104862104862 .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
104863104863 .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
104864 .{ ._, ._, .mov, .tmp2w, .dst0w, ._, ._ },
104864 .{ ._, ._, .mov, .memd(.tmp2b, 1), .dst0b, ._, ._ },
104865104865 .{ ._, ._, .lea, .dst0q, .mem(.tmp3), ._, ._ },
104866104866 .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
104867104867 .{ ._, .f_, .sub, .lea(.dst0d), ._, ._, ._ },
......@@ -104926,10 +104926,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
104926104926 .clobbers = .{ .eflags = true },
104927104927 .each = .{ .once = &.{
104928104928 .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
104929 .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
104929 .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
104930104930 .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
104931104931 .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
104932 .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
104932 .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
104933104933 .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
104934104934 .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
104935104935 .{ ._, .fi_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
......@@ -117442,8 +117442,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
117442117442 switch (reduce.operation) {
117443117443 .And, .Or, .Xor => {},
117444117444 .Min, .Max => break :fallback try cg.airReduce(inst),
117445 .Add => {},
117446 .Mul => if (cg.floatBits(res_ty)) |_| break :fallback try cg.airReduce(inst),
117445 .Add, .Mul => {},
117447117446 }
117448117447 var ops = try cg.tempsFromOperands(inst, .{reduce.operand});
117449117448 var res: [1]Temp = undefined;
......@@ -126937,7 +126936,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
126937126936 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
126938126937 .each = .{ .once = &.{
126939126938 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
126940 .{ ._, .v_ps, .add, .tmp0x, .src0x, .tmp0x, ._ },
126939 .{ ._, .v_ss, .add, .tmp0x, .src0x, .tmp0x, ._ },
126941126940 .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01_01_01_01) },
126942126941 .{ ._, .v_ss, .add, .dst0x, .tmp0x, .dst0x, ._ },
126943126942 } },
......@@ -127176,7 +127175,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
127176127175 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
127177127176 .each = .{ .once = &.{
127178127177 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
127179 .{ ._, .v_pd, .add, .tmp0x, .src0x, .tmp0x, ._ },
127178 .{ ._, .v_sd, .add, .tmp0x, .src0x, .tmp0x, ._ },
127180127179 .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
127181127180 .{ ._, .v_sd, .add, .dst0x, .tmp0x, .dst0x, ._ },
127182127181 } },
......@@ -130297,6 +130296,656 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
130297130296 .{ ._, ._, .sub, .tmp0d, .sa(.dst0, .add_size), ._, ._ },
130298130297 .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
130299130298 } },
130299 }, .{
130300 .required_features = .{ .f16c, null, null, null },
130301 .dst_constraints = .{ .{ .float = .word }, .any },
130302 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },
130303 .patterns = &.{
130304 .{ .src = .{ .mem, .none, .none } },
130305 .{ .src = .{ .to_sse, .none, .none } },
130306 },
130307 .extra_temps = .{
130308 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
130309 .unused,
130310 .unused,
130311 .unused,
130312 .unused,
130313 .unused,
130314 .unused,
130315 .unused,
130316 .unused,
130317 .unused,
130318 .unused,
130319 },
130320 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
130321 .each = .{ .once = &.{
130322 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
130323 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01_01_01_01) },
130324 .{ ._, .v_ss, .mul, .dst0x, .dst0x, .tmp0x, ._ },
130325 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
130326 } },
130327 }, .{
130328 .required_features = .{ .f16c, null, null, null },
130329 .dst_constraints = .{ .{ .float = .word }, .any },
130330 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
130331 .patterns = &.{
130332 .{ .src = .{ .mem, .none, .none } },
130333 .{ .src = .{ .to_sse, .none, .none } },
130334 },
130335 .extra_temps = .{
130336 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
130337 .unused,
130338 .unused,
130339 .unused,
130340 .unused,
130341 .unused,
130342 .unused,
130343 .unused,
130344 .unused,
130345 .unused,
130346 .unused,
130347 },
130348 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
130349 .each = .{ .once = &.{
130350 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
130351 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10_11_10) },
130352 .{ ._, .v_ss, .mul, .dst0x, .dst0x, .tmp0x, ._ },
130353 .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01_01_01_01) },
130354 .{ ._, .v_ss, .mul, .dst0x, .dst0x, .tmp0x, ._ },
130355 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
130356 } },
130357 }, .{
130358 .required_features = .{ .f16c, null, null, null },
130359 .dst_constraints = .{ .{ .float = .word }, .any },
130360 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
130361 .patterns = &.{
130362 .{ .src = .{ .to_mem, .none, .none } },
130363 },
130364 .extra_temps = .{
130365 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130366 .{ .type = .f16, .kind = .{ .rc = .sse } },
130367 .unused,
130368 .unused,
130369 .unused,
130370 .unused,
130371 .unused,
130372 .unused,
130373 .unused,
130374 .unused,
130375 .unused,
130376 },
130377 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
130378 .clobbers = .{ .eflags = true },
130379 .each = .{ .once = &.{
130380 .{ ._, .vp_, .xor, .dst0x, .dst0x, .dst0x, ._ },
130381 .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_unaligned_size), ._, ._ },
130382 .{ ._, .vp_w, .insr, .dst0x, .dst0x, .mem(.src0w), .ui(0) },
130383 .{ .@"0:", .vp_w, .insr, .dst0x, .dst0x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(1) },
130384 .{ ._, .v_ps, .cvtph2, .dst0x, .dst0q, ._, ._ },
130385 .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01_01_01_01) },
130386 .{ ._, .v_ss, .mul, .dst0x, .dst0x, .tmp1x, ._ },
130387 .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
130388 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
130389 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130390 } },
130391 }, .{
130392 .required_features = .{ .avx, null, null, null },
130393 .dst_constraints = .{ .{ .float = .word }, .any },
130394 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
130395 .patterns = &.{
130396 .{ .src = .{ .to_mem, .none, .none } },
130397 },
130398 .call_frame = .{ .alignment = .@"16" },
130399 .extra_temps = .{
130400 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130401 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
130402 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
130403 .unused,
130404 .unused,
130405 .unused,
130406 .unused,
130407 .unused,
130408 .unused,
130409 .unused,
130410 .unused,
130411 },
130412 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
130413 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
130414 .each = .{ .once = &.{
130415 .{ ._, .vp_, .xor, .dst0x, .dst0x, .dst0x, ._ },
130416 .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_unaligned_size), ._, ._ },
130417 .{ ._, .vp_w, .insr, .dst0x, .dst0x, .mem(.src0w), .ui(0) },
130418 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
130419 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
130420 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
130421 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
130422 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130423 } },
130424 }, .{
130425 .required_features = .{ .sse2, null, null, null },
130426 .dst_constraints = .{ .{ .float = .word }, .any },
130427 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
130428 .patterns = &.{
130429 .{ .src = .{ .to_mem, .none, .none } },
130430 },
130431 .call_frame = .{ .alignment = .@"16" },
130432 .extra_temps = .{
130433 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130434 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
130435 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
130436 .unused,
130437 .unused,
130438 .unused,
130439 .unused,
130440 .unused,
130441 .unused,
130442 .unused,
130443 .unused,
130444 },
130445 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
130446 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
130447 .each = .{ .once = &.{
130448 .{ ._, .p_, .xor, .dst0x, .dst0x, ._, ._ },
130449 .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_unaligned_size), ._, ._ },
130450 .{ ._, .p_w, .insr, .dst0x, .mem(.src0w), .ui(0), ._ },
130451 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
130452 .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
130453 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
130454 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
130455 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130456 } },
130457 }, .{
130458 .required_features = .{ .sse, null, null, null },
130459 .dst_constraints = .{ .{ .float = .word }, .any },
130460 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
130461 .patterns = &.{
130462 .{ .src = .{ .to_mem, .none, .none } },
130463 },
130464 .call_frame = .{ .alignment = .@"16" },
130465 .extra_temps = .{
130466 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130467 .{ .type = .f16, .kind = .{ .reg = .ax } },
130468 .{ .type = .f32, .kind = .mem },
130469 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
130470 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
130471 .unused,
130472 .unused,
130473 .unused,
130474 .unused,
130475 .unused,
130476 .unused,
130477 },
130478 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
130479 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
130480 .each = .{ .once = &.{
130481 .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
130482 .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_unaligned_size), ._, ._ },
130483 .{ ._, ._, .movzx, .tmp1d, .mem(.src0w), ._, ._ },
130484 .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
130485 .{ ._, ._ss, .mov, .dst0x, .mem(.tmp2d), ._, ._ },
130486 .{ .@"0:", ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
130487 .{ ._, ._ss, .mov, .tmp3x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
130488 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
130489 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
130490 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130491 } },
130492 }, .{
130493 .required_features = .{ .avx, null, null, null },
130494 .dst_constraints = .{ .{ .float = .dword }, .any },
130495 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
130496 .patterns = &.{
130497 .{ .src = .{ .to_sse, .none, .none } },
130498 },
130499 .extra_temps = .{
130500 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
130501 .unused,
130502 .unused,
130503 .unused,
130504 .unused,
130505 .unused,
130506 .unused,
130507 .unused,
130508 .unused,
130509 .unused,
130510 .unused,
130511 },
130512 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
130513 .each = .{ .once = &.{
130514 .{ ._, .v_ps, .shuf, .tmp0x, .src0x, .src0x, .ui(0b01_01_01_01) },
130515 .{ ._, .v_ss, .mul, .dst0x, .src0x, .tmp0x, ._ },
130516 } },
130517 }, .{
130518 .required_features = .{ .sse, null, null, null },
130519 .dst_constraints = .{ .{ .float = .dword }, .any },
130520 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
130521 .patterns = &.{
130522 .{ .src = .{ .to_mut_sse, .none, .none } },
130523 },
130524 .extra_temps = .{
130525 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
130526 .unused,
130527 .unused,
130528 .unused,
130529 .unused,
130530 .unused,
130531 .unused,
130532 .unused,
130533 .unused,
130534 .unused,
130535 .unused,
130536 },
130537 .dst_temps = .{ .{ .ref = .src0 }, .unused },
130538 .each = .{ .once = &.{
130539 .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
130540 .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01_01_01_01), ._ },
130541 .{ ._, ._ss, .mul, .dst0x, .tmp0x, ._, ._ },
130542 } },
130543 }, .{
130544 .required_features = .{ .avx, null, null, null },
130545 .dst_constraints = .{ .{ .float = .dword }, .any },
130546 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
130547 .patterns = &.{
130548 .{ .src = .{ .to_sse, .none, .none } },
130549 },
130550 .extra_temps = .{
130551 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
130552 .unused,
130553 .unused,
130554 .unused,
130555 .unused,
130556 .unused,
130557 .unused,
130558 .unused,
130559 .unused,
130560 .unused,
130561 .unused,
130562 },
130563 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
130564 .each = .{ .once = &.{
130565 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
130566 .{ ._, .v_ss, .mul, .tmp0x, .src0x, .tmp0x, ._ },
130567 .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01_01_01_01) },
130568 .{ ._, .v_ss, .mul, .dst0x, .tmp0x, .dst0x, ._ },
130569 } },
130570 }, .{
130571 .required_features = .{ .sse, null, null, null },
130572 .dst_constraints = .{ .{ .float = .dword }, .any },
130573 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
130574 .patterns = &.{
130575 .{ .src = .{ .to_mut_sse, .none, .none } },
130576 },
130577 .extra_temps = .{
130578 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
130579 .unused,
130580 .unused,
130581 .unused,
130582 .unused,
130583 .unused,
130584 .unused,
130585 .unused,
130586 .unused,
130587 .unused,
130588 .unused,
130589 },
130590 .dst_temps = .{ .{ .ref = .src0 }, .unused },
130591 .each = .{ .once = &.{
130592 .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
130593 .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
130594 .{ ._, ._ss, .mul, .tmp0x, .src0x, ._, ._ },
130595 .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b01_01_01_01), ._ },
130596 .{ ._, ._ss, .mul, .dst0x, .tmp0x, ._, ._ },
130597 } },
130598 }, .{
130599 .required_features = .{ .avx, null, null, null },
130600 .dst_constraints = .{ .{ .float = .dword }, .any },
130601 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
130602 .patterns = &.{
130603 .{ .src = .{ .to_mem, .none, .none } },
130604 },
130605 .extra_temps = .{
130606 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130607 .unused,
130608 .unused,
130609 .unused,
130610 .unused,
130611 .unused,
130612 .unused,
130613 .unused,
130614 .unused,
130615 .unused,
130616 .unused,
130617 },
130618 .dst_temps = .{ .{ .rc = .sse }, .unused },
130619 .clobbers = .{ .eflags = true },
130620 .each = .{ .once = &.{
130621 .{ ._, ._, .mov, .tmp0p, .sia(4, .src0, .sub_unaligned_size), ._, ._ },
130622 .{ ._, .v_ss, .mov, .dst0x, .mem(.src0d), ._, ._ },
130623 .{ .@"0:", .v_ss, .mul, .dst0x, .dst0x, .memia(.src0d, .tmp0, .add_unaligned_size), ._ },
130624 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
130625 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130626 } },
130627 }, .{
130628 .required_features = .{ .sse, null, null, null },
130629 .dst_constraints = .{ .{ .float = .dword }, .any },
130630 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
130631 .patterns = &.{
130632 .{ .src = .{ .to_mem, .none, .none } },
130633 },
130634 .extra_temps = .{
130635 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130636 .unused,
130637 .unused,
130638 .unused,
130639 .unused,
130640 .unused,
130641 .unused,
130642 .unused,
130643 .unused,
130644 .unused,
130645 .unused,
130646 },
130647 .dst_temps = .{ .{ .rc = .sse }, .unused },
130648 .clobbers = .{ .eflags = true },
130649 .each = .{ .once = &.{
130650 .{ ._, ._, .mov, .tmp0p, .sia(4, .src0, .sub_unaligned_size), ._, ._ },
130651 .{ ._, ._ss, .mov, .dst0x, .mem(.src0d), ._, ._ },
130652 .{ .@"0:", ._ss, .mul, .dst0x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
130653 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
130654 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130655 } },
130656 }, .{
130657 .required_features = .{ .avx, null, null, null },
130658 .dst_constraints = .{ .{ .float = .qword }, .any },
130659 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
130660 .patterns = &.{
130661 .{ .src = .{ .to_sse, .none, .none } },
130662 },
130663 .extra_temps = .{
130664 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
130665 .unused,
130666 .unused,
130667 .unused,
130668 .unused,
130669 .unused,
130670 .unused,
130671 .unused,
130672 .unused,
130673 .unused,
130674 .unused,
130675 },
130676 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
130677 .each = .{ .once = &.{
130678 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
130679 .{ ._, .v_sd, .mul, .dst0x, .src0x, .tmp0x, ._ },
130680 } },
130681 }, .{
130682 .required_features = .{ .sse2, null, null, null },
130683 .dst_constraints = .{ .{ .float = .qword }, .any },
130684 .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
130685 .patterns = &.{
130686 .{ .src = .{ .to_mut_sse, .none, .none } },
130687 },
130688 .extra_temps = .{
130689 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
130690 .unused,
130691 .unused,
130692 .unused,
130693 .unused,
130694 .unused,
130695 .unused,
130696 .unused,
130697 .unused,
130698 .unused,
130699 .unused,
130700 },
130701 .dst_temps = .{ .{ .ref = .src0 }, .unused },
130702 .each = .{ .once = &.{
130703 .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
130704 .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
130705 .{ ._, ._sd, .mul, .dst0x, .tmp0x, ._, ._ },
130706 } },
130707 }, .{
130708 .required_features = .{ .avx, null, null, null },
130709 .dst_constraints = .{ .{ .float = .qword }, .any },
130710 .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
130711 .patterns = &.{
130712 .{ .src = .{ .to_sse, .none, .none } },
130713 },
130714 .extra_temps = .{
130715 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
130716 .unused,
130717 .unused,
130718 .unused,
130719 .unused,
130720 .unused,
130721 .unused,
130722 .unused,
130723 .unused,
130724 .unused,
130725 .unused,
130726 },
130727 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
130728 .each = .{ .once = &.{
130729 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
130730 .{ ._, .v_sd, .mul, .tmp0x, .src0x, .tmp0x, ._ },
130731 .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
130732 .{ ._, .v_sd, .mul, .dst0x, .tmp0x, .dst0x, ._ },
130733 } },
130734 }, .{
130735 .required_features = .{ .avx, null, null, null },
130736 .dst_constraints = .{ .{ .float = .qword }, .any },
130737 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
130738 .patterns = &.{
130739 .{ .src = .{ .to_mem, .none, .none } },
130740 },
130741 .extra_temps = .{
130742 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130743 .unused,
130744 .unused,
130745 .unused,
130746 .unused,
130747 .unused,
130748 .unused,
130749 .unused,
130750 .unused,
130751 .unused,
130752 .unused,
130753 },
130754 .dst_temps = .{ .{ .rc = .sse }, .unused },
130755 .clobbers = .{ .eflags = true },
130756 .each = .{ .once = &.{
130757 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_unaligned_size), ._, ._ },
130758 .{ ._, .v_sd, .mov, .dst0x, .mem(.src0q), ._, ._ },
130759 .{ .@"0:", .v_sd, .mul, .dst0x, .dst0x, .memia(.src0q, .tmp0, .add_unaligned_size), ._ },
130760 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
130761 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130762 } },
130763 }, .{
130764 .required_features = .{ .sse2, null, null, null },
130765 .dst_constraints = .{ .{ .float = .qword }, .any },
130766 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
130767 .patterns = &.{
130768 .{ .src = .{ .to_mem, .none, .none } },
130769 },
130770 .extra_temps = .{
130771 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130772 .unused,
130773 .unused,
130774 .unused,
130775 .unused,
130776 .unused,
130777 .unused,
130778 .unused,
130779 .unused,
130780 .unused,
130781 .unused,
130782 },
130783 .dst_temps = .{ .{ .rc = .sse }, .unused },
130784 .clobbers = .{ .eflags = true },
130785 .each = .{ .once = &.{
130786 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_unaligned_size), ._, ._ },
130787 .{ ._, ._sd, .mov, .dst0x, .mem(.src0q), ._, ._ },
130788 .{ .@"0:", ._sd, .mul, .dst0x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
130789 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
130790 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130791 } },
130792 }, .{
130793 .required_features = .{ .x87, null, null, null },
130794 .dst_constraints = .{ .{ .float = .qword }, .any },
130795 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
130796 .patterns = &.{
130797 .{ .src = .{ .to_mem, .none, .none } },
130798 },
130799 .extra_temps = .{
130800 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130801 .{ .type = .f64, .kind = .{ .reg = .st7 } },
130802 .unused,
130803 .unused,
130804 .unused,
130805 .unused,
130806 .unused,
130807 .unused,
130808 .unused,
130809 .unused,
130810 .unused,
130811 },
130812 .dst_temps = .{ .mem, .unused },
130813 .clobbers = .{ .eflags = true },
130814 .each = .{ .once = &.{
130815 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_unaligned_size), ._, ._ },
130816 .{ ._, .f_, .ld, .mem(.src0q), ._, ._, ._ },
130817 .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
130818 .{ .pseudo, .f_cstp, .in, ._, ._, ._, ._ },
130819 .{ .@"0:", .f_, .ld, .dst0q, ._, ._, ._ },
130820 .{ .@"1:", .f_, .mul, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
130821 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
130822 .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
130823 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130824 } },
130825 }, .{
130826 .required_features = .{ .x87, null, null, null },
130827 .dst_constraints = .{ .{ .float = .tbyte }, .any },
130828 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .tbyte } }, .any, .any },
130829 .patterns = &.{
130830 .{ .src = .{ .to_mem, .none, .none } },
130831 },
130832 .extra_temps = .{
130833 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130834 .{ .type = .f80, .kind = .{ .reg = .st6 } },
130835 .{ .type = .f80, .kind = .{ .reg = .st7 } },
130836 .unused,
130837 .unused,
130838 .unused,
130839 .unused,
130840 .unused,
130841 .unused,
130842 .unused,
130843 .unused,
130844 },
130845 .dst_temps = .{ .mem, .unused },
130846 .clobbers = .{ .eflags = true },
130847 .each = .{ .once = &.{
130848 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
130849 .{ ._, .f_, .ld, .mem(.src0t), ._, ._, ._ },
130850 .{ .@"0:", .f_, .ld, .memia(.src0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
130851 .{ ._, .f_p, .mul, ._, ._, ._, ._ },
130852 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
130853 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130854 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
130855 } },
130856 }, .{
130857 .required_features = .{ .avx, null, null, null },
130858 .dst_constraints = .{ .{ .float = .xword }, .any },
130859 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
130860 .patterns = &.{
130861 .{ .src = .{ .to_mem, .none, .none } },
130862 },
130863 .call_frame = .{ .alignment = .@"16" },
130864 .extra_temps = .{
130865 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130866 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
130867 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
130868 .unused,
130869 .unused,
130870 .unused,
130871 .unused,
130872 .unused,
130873 .unused,
130874 .unused,
130875 .unused,
130876 },
130877 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
130878 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
130879 .each = .{ .once = &.{
130880 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
130881 .{ ._, .v_dqa, .mov, .dst0x, .mem(.src0x), ._, ._ },
130882 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
130883 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
130884 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
130885 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130886 } },
130887 }, .{
130888 .required_features = .{ .sse2, null, null, null },
130889 .dst_constraints = .{ .{ .float = .xword }, .any },
130890 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
130891 .patterns = &.{
130892 .{ .src = .{ .to_mem, .none, .none } },
130893 },
130894 .call_frame = .{ .alignment = .@"16" },
130895 .extra_temps = .{
130896 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130897 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
130898 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
130899 .unused,
130900 .unused,
130901 .unused,
130902 .unused,
130903 .unused,
130904 .unused,
130905 .unused,
130906 .unused,
130907 },
130908 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
130909 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
130910 .each = .{ .once = &.{
130911 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
130912 .{ ._, ._dqa, .mov, .dst0x, .mem(.src0x), ._, ._ },
130913 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
130914 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
130915 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
130916 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130917 } },
130918 }, .{
130919 .required_features = .{ .sse, null, null, null },
130920 .dst_constraints = .{ .{ .float = .xword }, .any },
130921 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
130922 .patterns = &.{
130923 .{ .src = .{ .to_mem, .none, .none } },
130924 },
130925 .call_frame = .{ .alignment = .@"16" },
130926 .extra_temps = .{
130927 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
130928 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
130929 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
130930 .unused,
130931 .unused,
130932 .unused,
130933 .unused,
130934 .unused,
130935 .unused,
130936 .unused,
130937 .unused,
130938 },
130939 .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
130940 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
130941 .each = .{ .once = &.{
130942 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
130943 .{ ._, ._ps, .mova, .dst0x, .mem(.src0x), ._, ._ },
130944 .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
130945 .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
130946 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
130947 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
130948 } },
130300130949 } },
130301130950 }) catch |err| switch (err) {
130302130951 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
......@@ -131253,7 +131902,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
131253131902 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
131254131903 .each = .{ .once = &.{
131255131904 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
131256 .{ ._, .v_ps, .add, .tmp0x, .src0x, .tmp0x, ._ },
131905 .{ ._, .v_ss, .add, .tmp0x, .src0x, .tmp0x, ._ },
131257131906 .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01_01_01_01) },
131258131907 .{ ._, .v_ss, .add, .dst0x, .tmp0x, .dst0x, ._ },
131259131908 } },
......@@ -132014,7 +132663,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
132014132663 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
132015132664 .each = .{ .once = &.{
132016132665 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
132017 .{ ._, .v_pd, .add, .tmp0x, .src0x, .tmp0x, ._ },
132666 .{ ._, .v_sd, .add, .tmp0x, .src0x, .tmp0x, ._ },
132018132667 .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
132019132668 .{ ._, .v_sd, .add, .dst0x, .tmp0x, .dst0x, ._ },
132020132669 } },
......@@ -133215,7 +133864,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
133215133864 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
133216133865 .each = .{ .once = &.{
133217133866 .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
133218 .{ ._, .v_ps, .mul, .tmp0x, .src0x, .tmp0x, ._ },
133867 .{ ._, .v_ss, .mul, .tmp0x, .src0x, .tmp0x, ._ },
133219133868 .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01_01_01_01) },
133220133869 .{ ._, .v_ss, .mul, .dst0x, .tmp0x, .dst0x, ._ },
133221133870 } },
......@@ -133701,7 +134350,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
133701134350 .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
133702134351 .each = .{ .once = &.{
133703134352 .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
133704 .{ ._, .v_pd, .mul, .tmp0x, .src0x, .tmp0x, ._ },
134353 .{ ._, .v_sd, .mul, .tmp0x, .src0x, .tmp0x, ._ },
133705134354 .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
133706134355 .{ ._, .v_sd, .mul, .dst0x, .tmp0x, .dst0x, ._ },
133707134356 } },
test/behavior/x86_64/unary.zig+1
......@@ -5109,6 +5109,7 @@ inline fn reduceMul(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child
51095109test reduceMul {
51105110 const test_reduce_mul = unary(reduceMul, .{});
51115111 try test_reduce_mul.testIntVectors();
5112 try test_reduce_mul.testFloatVectors();
51125113}
51135114
51145115inline fn reduceAddOptimized(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {