Commit 7d727ed7df

Jacob Young <jacobly0@users.noreply.github.com>
2025-05-24 22:50:37
x86_64: implement strict float `@reduce(.Mul)`
1 parent d1785cf
Changed files (2)
src
arch
test
behavior
x86_64
src/arch/x86_64/CodeGen.zig
@@ -2389,7 +2389,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
 }
 
 fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
-    @setEvalBranchQuota(23_900);
+    @setEvalBranchQuota(24_000);
     const pt = cg.pt;
     const zcu = pt.zcu;
     const ip = &zcu.intern_pool;
@@ -101686,10 +101686,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .dst0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .dst0b, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                         .{ ._, ._, .movsx, .dst0d, .tmp2b, ._, ._ },
@@ -101718,10 +101718,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .dst0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .dst0b, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                         .{ ._, ._, .movzx, .dst0d, .tmp2b, ._, ._ },
@@ -101750,10 +101750,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ ._, .fi_p, .st, .dst0w, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                     } },
@@ -101781,10 +101781,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ ._, .fi_p, .st, .dst0d, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                     } },
@@ -101836,10 +101836,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ ._, .fi_p, .st, .dst0q, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                     } },
@@ -101933,10 +101933,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .{ ._, .f_, .ld, .src0q, ._, ._, ._ },
                         .{ ._, .f_, .ld, .tmp0t, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .dst0d, .tmp2w, ._, ._ },
+                        .{ ._, ._, .movzx, .dst0d, .memd(.tmp2b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp2w, .dst0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp2b, 1), .dst0b, ._, ._ },
                         .{ ._, ._, .lea, .dst0q, .mem(.tmp3), ._, ._ },
                         .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
                         .{ ._, .f_, .sub, .lea(.dst0d), ._, ._, ._ },
@@ -102284,10 +102284,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp4w, ._, ._, ._ },
                         .{ ._, ._, .movzx, .tmp2d, .tmp4b, ._, ._ },
@@ -102321,10 +102321,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp4w, ._, ._, ._ },
                         .{ ._, ._, .movzx, .tmp2d, .tmp4b, ._, ._ },
@@ -102772,10 +102772,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .clobbers = .{ .eflags = true },
                     .each = .{ .once = &.{
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -102808,10 +102808,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp4d, ._, ._, ._ },
                         .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
@@ -103032,10 +103032,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .clobbers = .{ .eflags = true },
                     .each = .{ .once = &.{
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -103068,10 +103068,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
                         .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
@@ -103350,10 +103350,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .clobbers = .{ .eflags = true },
                     .each = .{ .once = &.{
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -104001,10 +104001,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .dst0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .dst0b, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                         .{ ._, ._, .movsx, .dst0d, .tmp2b, ._, ._ },
@@ -104061,10 +104061,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .dst0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .dst0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .dst0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .dst0b, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp2w, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                         .{ ._, ._, .movzx, .dst0d, .tmp2b, ._, ._ },
@@ -104161,10 +104161,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
                         .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp3d, .memd(.tmp2b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp2b, 1), .tmp3b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
                         .{ ._, ._, .movsx, .tmp3d, .tmp5b, ._, ._ },
@@ -104200,10 +104200,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
                         .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp3d, .memd(.tmp2b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp2b, 1), .tmp3b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
                         .{ ._, ._, .movsx, .tmp3d, .tmp5b, ._, ._ },
@@ -104305,10 +104305,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
                         .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp3d, .memd(.tmp2b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp2b, 1), .tmp3b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
                         .{ ._, ._, .movzx, .tmp3d, .tmp5b, ._, ._ },
@@ -104344,10 +104344,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
                         .{ ._, ._, .mov, .tmp1p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .movsx, .tmp3d, .tmp2w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp3d, .memd(.tmp2b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp2w, .tmp3w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp2b, 1), .tmp3b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .lea(.tmp0t), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp5w, ._, ._, ._ },
                         .{ ._, ._, .movzx, .tmp3d, .tmp5b, ._, ._ },
@@ -104408,10 +104408,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ ._, .fi_p, .st, .dst0w, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                     } },
@@ -104468,10 +104468,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .clobbers = .{ .eflags = true },
                     .each = .{ .once = &.{
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .memia(.dst0w, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -104535,10 +104535,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp4d, ._, ._, ._ },
                         .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
@@ -104598,10 +104598,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ ._, .fi_p, .st, .dst0d, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                     } },
@@ -104658,10 +104658,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .clobbers = .{ .eflags = true },
                     .each = .{ .once = &.{
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -104725,10 +104725,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
                         .{ ._, ._, .mov, .tmp2d, .tmp4d, ._, ._ },
@@ -104788,10 +104788,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .each = .{ .once = &.{
                         .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp2d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp2d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp2w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp2b, ._, ._ },
                         .{ ._, .fi_p, .st, .dst0q, ._, ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
                     } },
@@ -104858,10 +104858,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
                         .{ ._, .f_, .ld, .tmp0t, ._, ._, ._ },
                         .{ ._, .fn_cw, .st, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .dst0d, .tmp2w, ._, ._ },
+                        .{ ._, ._, .movzx, .dst0d, .memd(.tmp2b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp2b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp2w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp2w, .dst0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp2b, 1), .dst0b, ._, ._ },
                         .{ ._, ._, .lea, .dst0q, .mem(.tmp3), ._, ._ },
                         .{ ._, .fi_p, .st, .tmp4q, ._, ._, ._ },
                         .{ ._, .f_, .sub, .lea(.dst0d), ._, ._, ._ },
@@ -104926,10 +104926,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     .clobbers = .{ .eflags = true },
                     .each = .{ .once = &.{
                         .{ ._, .fn_cw, .st, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .movzx, .tmp0d, .tmp1w, ._, ._ },
+                        .{ ._, ._, .movzx, .tmp0d, .memd(.tmp1b, 1), ._, ._ },
                         .{ ._, ._, .@"or", .memd(.tmp1b, 1), .ui(0b000_0_11_00), ._, ._ },
                         .{ ._, .f_cw, .ld, .tmp1w, ._, ._, ._ },
-                        .{ ._, ._, .mov, .tmp1w, .tmp0w, ._, ._ },
+                        .{ ._, ._, .mov, .memd(.tmp1b, 1), .tmp0b, ._, ._ },
                         .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ },
                         .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ },
                         .{ ._, .fi_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
@@ -117442,8 +117442,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                 switch (reduce.operation) {
                     .And, .Or, .Xor => {},
                     .Min, .Max => break :fallback try cg.airReduce(inst),
-                    .Add => {},
-                    .Mul => if (cg.floatBits(res_ty)) |_| break :fallback try cg.airReduce(inst),
+                    .Add, .Mul => {},
                 }
                 var ops = try cg.tempsFromOperands(inst, .{reduce.operand});
                 var res: [1]Temp = undefined;
@@ -126937,7 +126936,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
                         .each = .{ .once = &.{
                             .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
-                            .{ ._, .v_ps, .add, .tmp0x, .src0x, .tmp0x, ._ },
+                            .{ ._, .v_ss, .add, .tmp0x, .src0x, .tmp0x, ._ },
                             .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01_01_01_01) },
                             .{ ._, .v_ss, .add, .dst0x, .tmp0x, .dst0x, ._ },
                         } },
@@ -127176,7 +127175,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
                         .each = .{ .once = &.{
                             .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
-                            .{ ._, .v_pd, .add, .tmp0x, .src0x, .tmp0x, ._ },
+                            .{ ._, .v_sd, .add, .tmp0x, .src0x, .tmp0x, ._ },
                             .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
                             .{ ._, .v_sd, .add, .dst0x, .tmp0x, .dst0x, ._ },
                         } },
@@ -130297,6 +130296,656 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                             .{ ._, ._, .sub, .tmp0d, .sa(.dst0, .add_size), ._, ._ },
                             .{ ._, ._nb, .j, .@"0b", ._, ._, ._ },
                         } },
+                    }, .{
+                        .required_features = .{ .f16c, null, null, null },
+                        .dst_constraints = .{ .{ .float = .word }, .any },
+                        .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .dword, .is = .word } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .mem, .none, .none } },
+                            .{ .src = .{ .to_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+                            .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01_01_01_01) },
+                            .{ ._, .v_ss, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+                            .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .f16c, null, null, null },
+                        .dst_constraints = .{ .{ .float = .word }, .any },
+                        .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .qword, .is = .word } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .mem, .none, .none } },
+                            .{ .src = .{ .to_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
+                            .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b11_10_11_10) },
+                            .{ ._, .v_ss, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+                            .{ ._, .v_ps, .shuf, .tmp0x, .dst0x, .dst0x, .ui(0b01_01_01_01) },
+                            .{ ._, .v_ss, .mul, .dst0x, .dst0x, .tmp0x, ._ },
+                            .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .f16c, null, null, null },
+                        .dst_constraints = .{ .{ .float = .word }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f16, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+                        .clobbers = .{ .eflags = true },
+                        .each = .{ .once = &.{
+                            .{ ._, .vp_, .xor, .dst0x, .dst0x, .dst0x, ._ },
+                            .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, .vp_w, .insr, .dst0x, .dst0x, .mem(.src0w), .ui(0) },
+                            .{ .@"0:", .vp_w, .insr, .dst0x, .dst0x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(1) },
+                            .{ ._, .v_ps, .cvtph2, .dst0x, .dst0q, ._, ._ },
+                            .{ ._, .v_ps, .shuf, .tmp1x, .dst0x, .dst0x, .ui(0b01_01_01_01) },
+                            .{ ._, .v_ss, .mul, .dst0x, .dst0x, .tmp1x, ._ },
+                            .{ ._, .v_, .cvtps2ph, .dst0q, .dst0x, .rm(.{}), ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .avx, null, null, null },
+                        .dst_constraints = .{ .{ .float = .word }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .call_frame = .{ .alignment = .@"16" },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+                            .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+                        .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+                        .each = .{ .once = &.{
+                            .{ ._, .vp_, .xor, .dst0x, .dst0x, .dst0x, ._ },
+                            .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, .vp_w, .insr, .dst0x, .dst0x, .mem(.src0w), .ui(0) },
+                            .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+                            .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) },
+                            .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse2, null, null, null },
+                        .dst_constraints = .{ .{ .float = .word }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .call_frame = .{ .alignment = .@"16" },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+                            .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+                        .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+                        .each = .{ .once = &.{
+                            .{ ._, .p_, .xor, .dst0x, .dst0x, ._, ._ },
+                            .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, .p_w, .insr, .dst0x, .mem(.src0w), .ui(0), ._ },
+                            .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+                            .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ },
+                            .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse, null, null, null },
+                        .dst_constraints = .{ .{ .float = .word }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .call_frame = .{ .alignment = .@"16" },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f16, .kind = .{ .reg = .ax } },
+                            .{ .type = .f32, .kind = .mem },
+                            .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
+                            .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__mulhf3" } } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+                        .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+                        .each = .{ .once = &.{
+                            .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ },
+                            .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, ._, .movzx, .tmp1d, .mem(.src0w), ._, ._ },
+                            .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ },
+                            .{ ._, ._ss, .mov, .dst0x, .mem(.tmp2d), ._, ._ },
+                            .{ .@"0:", ._ps, .xor, .tmp3x, .tmp3x, ._, ._ },
+                            .{ ._, ._ss, .mov, .tmp3x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+                            .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .avx, null, null, null },
+                        .dst_constraints = .{ .{ .float = .dword }, .any },
+                        .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, .v_ps, .shuf, .tmp0x, .src0x, .src0x, .ui(0b01_01_01_01) },
+                            .{ ._, .v_ss, .mul, .dst0x, .src0x, .tmp0x, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse, null, null, null },
+                        .dst_constraints = .{ .{ .float = .dword }, .any },
+                        .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .qword, .is = .dword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mut_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, ._ps, .mova, .tmp0x, .src0x, ._, ._ },
+                            .{ ._, ._ps, .shuf, .tmp0x, .tmp0x, .ui(0b01_01_01_01), ._ },
+                            .{ ._, ._ss, .mul, .dst0x, .tmp0x, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .avx, null, null, null },
+                        .dst_constraints = .{ .{ .float = .dword }, .any },
+                        .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
+                            .{ ._, .v_ss, .mul, .tmp0x, .src0x, .tmp0x, ._ },
+                            .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01_01_01_01) },
+                            .{ ._, .v_ss, .mul, .dst0x, .tmp0x, .dst0x, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse, null, null, null },
+                        .dst_constraints = .{ .{ .float = .dword }, .any },
+                        .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .xword, .is = .dword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mut_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
+                            .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
+                            .{ ._, ._ss, .mul, .tmp0x, .src0x, ._, ._ },
+                            .{ ._, ._ps, .shuf, .dst0x, .src0x, .ui(0b01_01_01_01), ._ },
+                            .{ ._, ._ss, .mul, .dst0x, .tmp0x, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .avx, null, null, null },
+                        .dst_constraints = .{ .{ .float = .dword }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .rc = .sse }, .unused },
+                        .clobbers = .{ .eflags = true },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(4, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, .v_ss, .mov, .dst0x, .mem(.src0d), ._, ._ },
+                            .{ .@"0:", .v_ss, .mul, .dst0x, .dst0x, .memia(.src0d, .tmp0, .add_unaligned_size), ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse, null, null, null },
+                        .dst_constraints = .{ .{ .float = .dword }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .rc = .sse }, .unused },
+                        .clobbers = .{ .eflags = true },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(4, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, ._ss, .mov, .dst0x, .mem(.src0d), ._, ._ },
+                            .{ .@"0:", ._ss, .mul, .dst0x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .avx, null, null, null },
+                        .dst_constraints = .{ .{ .float = .qword }, .any },
+                        .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
+                            .{ ._, .v_sd, .mul, .dst0x, .src0x, .tmp0x, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse2, null, null, null },
+                        .dst_constraints = .{ .{ .float = .qword }, .any },
+                        .src_constraints = .{ .{ .exact_scalar_float = .{ .of = .xword, .is = .qword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mut_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, ._ps, .xor, .tmp0x, .tmp0x, ._, ._ },
+                            .{ ._, ._ps, .movhl, .tmp0x, .src0x, ._, ._ },
+                            .{ ._, ._sd, .mul, .dst0x, .tmp0x, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .avx, null, null, null },
+                        .dst_constraints = .{ .{ .float = .qword }, .any },
+                        .src_constraints = .{ .{ .exclusive_scalar_float = .{ .of = .yword, .is = .qword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_sse, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                        .each = .{ .once = &.{
+                            .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
+                            .{ ._, .v_sd, .mul, .tmp0x, .src0x, .tmp0x, ._ },
+                            .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
+                            .{ ._, .v_sd, .mul, .dst0x, .tmp0x, .dst0x, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .avx, null, null, null },
+                        .dst_constraints = .{ .{ .float = .qword }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .rc = .sse }, .unused },
+                        .clobbers = .{ .eflags = true },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, .v_sd, .mov, .dst0x, .mem(.src0q), ._, ._ },
+                            .{ .@"0:", .v_sd, .mul, .dst0x, .dst0x, .memia(.src0q, .tmp0, .add_unaligned_size), ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse2, null, null, null },
+                        .dst_constraints = .{ .{ .float = .qword }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .rc = .sse }, .unused },
+                        .clobbers = .{ .eflags = true },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, ._sd, .mov, .dst0x, .mem(.src0q), ._, ._ },
+                            .{ .@"0:", ._sd, .mul, .dst0x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .x87, null, null, null },
+                        .dst_constraints = .{ .{ .float = .qword }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f64, .kind = .{ .reg = .st7 } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .mem, .unused },
+                        .clobbers = .{ .eflags = true },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, .f_, .ld, .mem(.src0q), ._, ._, ._ },
+                            .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
+                            .{ .pseudo, .f_cstp, .in, ._, ._, ._, ._ },
+                            .{ .@"0:", .f_, .ld, .dst0q, ._, ._, ._ },
+                            .{ .@"1:", .f_, .mul, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
+                            .{ ._, .f_p, .st, .dst0q, ._, ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .x87, null, null, null },
+                        .dst_constraints = .{ .{ .float = .tbyte }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .tbyte } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f80, .kind = .{ .reg = .st6 } },
+                            .{ .type = .f80, .kind = .{ .reg = .st7 } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .mem, .unused },
+                        .clobbers = .{ .eflags = true },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, .f_, .ld, .mem(.src0t), ._, ._, ._ },
+                            .{ .@"0:", .f_, .ld, .memia(.src0t, .tmp0, .add_unaligned_size), ._, ._, ._ },
+                            .{ ._, .f_p, .mul, ._, ._, ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                            .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .avx, null, null, null },
+                        .dst_constraints = .{ .{ .float = .xword }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .call_frame = .{ .alignment = .@"16" },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+                            .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+                        .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, .v_dqa, .mov, .dst0x, .mem(.src0x), ._, ._ },
+                            .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+                            .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse2, null, null, null },
+                        .dst_constraints = .{ .{ .float = .xword }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .call_frame = .{ .alignment = .@"16" },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+                            .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+                        .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, ._dqa, .mov, .dst0x, .mem(.src0x), ._, ._ },
+                            .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+                            .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
+                    }, .{
+                        .required_features = .{ .sse, null, null, null },
+                        .dst_constraints = .{ .{ .float = .xword }, .any },
+                        .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any, .any },
+                        .patterns = &.{
+                            .{ .src = .{ .to_mem, .none, .none } },
+                        },
+                        .call_frame = .{ .alignment = .@"16" },
+                        .extra_temps = .{
+                            .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                            .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
+                            .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__multf3" } } },
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                            .unused,
+                        },
+                        .dst_temps = .{ .{ .reg = .xmm0 }, .unused },
+                        .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
+                        .each = .{ .once = &.{
+                            .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_unaligned_size), ._, ._ },
+                            .{ ._, ._ps, .mova, .dst0x, .mem(.src0x), ._, ._ },
+                            .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ },
+                            .{ ._, ._, .call, .tmp2d, ._, ._, ._ },
+                            .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
+                            .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+                        } },
                     } },
                 }) catch |err| switch (err) {
                     error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
@@ -131253,7 +131902,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
                         .each = .{ .once = &.{
                             .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
-                            .{ ._, .v_ps, .add, .tmp0x, .src0x, .tmp0x, ._ },
+                            .{ ._, .v_ss, .add, .tmp0x, .src0x, .tmp0x, ._ },
                             .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01_01_01_01) },
                             .{ ._, .v_ss, .add, .dst0x, .tmp0x, .dst0x, ._ },
                         } },
@@ -132014,7 +132663,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
                         .each = .{ .once = &.{
                             .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
-                            .{ ._, .v_pd, .add, .tmp0x, .src0x, .tmp0x, ._ },
+                            .{ ._, .v_sd, .add, .tmp0x, .src0x, .tmp0x, ._ },
                             .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
                             .{ ._, .v_sd, .add, .dst0x, .tmp0x, .dst0x, ._ },
                         } },
@@ -133215,7 +133864,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
                         .each = .{ .once = &.{
                             .{ ._, .v_ps, .movhl, .tmp0x, .src0x, .src0x, ._ },
-                            .{ ._, .v_ps, .mul, .tmp0x, .src0x, .tmp0x, ._ },
+                            .{ ._, .v_ss, .mul, .tmp0x, .src0x, .tmp0x, ._ },
                             .{ ._, .v_ps, .shuf, .dst0x, .src0x, .src0x, .ui(0b01_01_01_01) },
                             .{ ._, .v_ss, .mul, .dst0x, .tmp0x, .dst0x, ._ },
                         } },
@@ -133701,7 +134350,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                         .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
                         .each = .{ .once = &.{
                             .{ ._, .v_f128, .extract, .tmp0x, .src0y, .ui(1), ._ },
-                            .{ ._, .v_pd, .mul, .tmp0x, .src0x, .tmp0x, ._ },
+                            .{ ._, .v_sd, .mul, .tmp0x, .src0x, .tmp0x, ._ },
                             .{ ._, .v_ps, .movhl, .dst0x, .src0x, .src0x, ._ },
                             .{ ._, .v_sd, .mul, .dst0x, .tmp0x, .dst0x, ._ },
                         } },
test/behavior/x86_64/unary.zig
@@ -5109,6 +5109,7 @@ inline fn reduceMul(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child
 test reduceMul {
     const test_reduce_mul = unary(reduceMul, .{});
     try test_reduce_mul.testIntVectors();
+    try test_reduce_mul.testFloatVectors();
 }
 
 inline fn reduceAddOptimized(comptime Type: type, rhs: Type) @typeInfo(Type).vector.child {