Commit 300cb4881f

Jacob Young <jacobly0@users.noreply.github.com>
2025-02-21 17:07:57
x86_64: rewrite scalar `@bitReverse`
1 parent fc7a0c4
Changed files (3)
src
arch
test
behavior
src/arch/x86_64/CodeGen.zig
@@ -2418,7 +2418,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
 }
 
 fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
-    @setEvalBranchQuota(12_900);
+    @setEvalBranchQuota(13_600);
     const pt = cg.pt;
     const zcu = pt.zcu;
     const ip = &zcu.intern_pool;
@@ -2475,7 +2475,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
 
             .bitcast          => try cg.airBitCast(inst),
 
-            .bit_reverse      => try cg.airBitReverse(inst),
             .splat            => try cg.airSplat(inst),
             .select           => try cg.airSelect(inst),
             .shuffle          => try cg.airShuffle(inst),
@@ -32018,6 +32017,3142 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                 };
                 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
             },
+            .bit_reverse => |air_tag| if (use_old) try cg.airBitReverse(inst) else fallback: {
+                const ty_op = air_datas[@intFromEnum(inst)].ty_op;
+                if (ty_op.ty.toType().isVector(zcu)) break :fallback try cg.airByteSwap(inst);
+                var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
+                var res: [1]Temp = undefined;
+                cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
+                    .src_constraints = .{ .{ .exact_int = 1 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .mut_mem, .none, .none } },
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{} },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 8 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp1x), .ui(0) },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 8 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp1x), .ui(0), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx2, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 8 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_b, .broadcast, .tmp1x, .src0x, ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp1x, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 8 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp1x, .src0x, .tmp2x, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp1x, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 8 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .shuf, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp1x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .sse2, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 8 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_, .unpcklbw, .src0x, .src0x, ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp1x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_w, .shufl, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .exact_int = 8 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0b, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0b, .ui(0b00110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0b, .ui(0b11001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0b, .ui(0b01010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0b, .ui(0b10101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp1x), .ui(0) },
+                        .{ ._, .vp_, .unpcklbw, .dst0x, .dst0x, .dst0x, ._ },
+                        .{ ._, .vp_w, .sra, .dst0x, .dst0x, .uia(16, .dst0, .sub_bit_size), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .src0x, .lea(.tmp1x), .ui(0), ._ },
+                        .{ ._, .p_, .unpcklbw, .src0x, .src0x, ._, ._ },
+                        .{ ._, .p_w, .sra, .src0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx2, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_b, .broadcast, .tmp1x, .src0x, ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp1x, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp1x, .src0x, .tmp2x, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp1x, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .shuf, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp1x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .sse2, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_, .unpcklbw, .src0x, .src0x, ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp1x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_w, .shufl, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .signed_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0b, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0b, .ui(0b00110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0b, .ui(0b11001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0b, .ui(0b01010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0b, .ui(0b10101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp1x), .ui(0) },
+                        .{ ._, .vp_, .unpcklbw, .dst0x, .dst0x, .dst0x, ._ },
+                        .{ ._, .vp_w, .srl, .dst0x, .dst0x, .uia(16, .dst0, .sub_bit_size), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .src0x, .lea(.tmp1x), .ui(0), ._ },
+                        .{ ._, .p_, .unpcklbw, .src0x, .src0x, ._, ._ },
+                        .{ ._, .p_w, .srl, .src0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx2, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_b, .broadcast, .tmp1x, .src0x, ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp1x, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp1x, .src0x, .tmp2x, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp1x, .tmp1x, .tmp2x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp1x, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .shuf, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp1x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .sse2, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_, .unpcklbw, .src0x, .src0x, ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp1x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_w, .shufl, .src0x, .src0x, .ui(0b00_00_00_00), ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp1x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .unsigned_int = .byte }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0b, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0b, .ui(0b00110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0b, .ui(0b11001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0b, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0b, .ui(0b01010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0b, .ui(0b10101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0b, .tmp0b, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0b, .uia(8, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 16 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 16 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 16 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp1x), .ui(0), ._ },
+                        .{ ._, .p_, .unpcklwd, .dst0x, .dst0x, ._, ._ },
+                        .{ ._, .p_dq, .srl, .dst0x, .ui(1), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 16 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word, .smear = 8 } } },
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp2x, .src0x, .lea(.dst0x), ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp3x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp2x, .tmp2x, .tmp3x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp2x, .tmp2x, .tmp3x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp2x, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 16 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word, .smear = 8 } } },
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_b, .shuf, .src0x, .lea(.dst0x), ._, ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp2x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp2x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .exact_int = 16 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._r, .ro, .src0w, .ui(8), ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0d, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0d, .ui(0b0000111100001111), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1111000011110000), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b0011001100110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1100110011001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b0101010101010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1010101010101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                        .{ ._, .vp_w, .sra, .dst0x, .dst0x, .uia(16, .dst0, .sub_bit_size), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                        .{ ._, .p_w, .sra, .dst0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp1x), .ui(0), ._ },
+                        .{ ._, .p_, .unpcklwd, .dst0x, .dst0x, ._, ._ },
+                        .{ ._, .p_dq, .srl, .dst0x, .ui(1), ._, ._ },
+                        .{ ._, .p_w, .sra, .dst0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word, .smear = 8 } } },
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp2x, .src0x, .lea(.dst0x), ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp3x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp2x, .tmp2x, .tmp3x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp2x, .tmp2x, .tmp3x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp2x, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0w, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word, .smear = 8 } } },
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_b, .shuf, .src0x, .lea(.dst0x), ._, ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp2x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp2x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0w, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .signed_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._r, .ro, .src0w, .ui(8), ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0d, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0d, .ui(0b0000111100001111), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1111000011110000), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b0011001100110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1100110011001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b0101010101010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1010101010101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0w, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                        .{ ._, .vp_w, .srl, .dst0x, .dst0x, .uia(16, .dst0, .sub_bit_size), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                        .{ ._, .p_w, .srl, .dst0x, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp1x), .ui(0), ._ },
+                        .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
+                        .{ ._, .p_w, .srl, .dst0x, .uia(24, .dst0, .sub_bit_size), ._, ._ },
+                        .{ ._, .p_w, .sll, .tmp2x, .sia(-8, .dst0, .add_bit_size), ._, ._ },
+                        .{ ._, .p_, .@"or", .dst0x, .tmp2x, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word, .smear = 8 } } },
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp2x, .src0x, .lea(.dst0x), ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp3x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp2x, .tmp2x, .tmp3x, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp2x, .tmp2x, .tmp3x, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp2x, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .word, .smear = 8 } } },
+                        .{ .type = .vector_16_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .p_b, .shuf, .src0x, .lea(.dst0x), ._, ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, ._dqa, .mov, .tmp2x, .lea(.dst0x), ._, ._ },
+                        .{ ._, .p_, .@"and", .src0x, .tmp2x, ._, ._ },
+                        .{ ._, .p_b, .cmpeq, .src0x, .tmp2x, ._, ._ },
+                        .{ ._, .p_b, .movmsk, .dst0d, .src0x, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0w, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .unsigned_int = .word }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._r, .ro, .src0w, .ui(8), ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0d, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0d, .ui(0b0000111100001111), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1111000011110000), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b0011001100110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1100110011001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b0101010101010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b1010101010101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .uia(16, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 32 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 32 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 32 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp1x), .ui(0), ._ },
+                        .{ ._, .p_, .unpcklwd, .dst0x, .dst0x, ._, ._ },
+                        .{ ._, .p_dq, .srl, .dst0x, .ui(1), ._, ._ },
+                        .{ ._, .p_w, .shufl, .dst0x, .dst0x, .ui(0b00_10_00_10), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx2, null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 32 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_32_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword, .smear = 8 } } },
+                        .{ .type = .vector_32_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_32_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_d, .broadcast, .tmp2y, .src0x, ._, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp2y, .tmp2y, .lea(.dst0y), ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp3y, .lea(.dst0y), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp2y, .tmp2y, .tmp3y, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp2y, .tmp2y, .tmp3y, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp2y, ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .exact_int = 32 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .bswap, .src0d, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0d, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0d, .ui(0b00001111000011110000111100001111), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b11110000111100001111000011110000), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b00110011001100110011001100110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b11001100110011001100110011001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b01010101010101010101010101010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b10101010101010101010101010101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                        .{ ._, .vp_d, .sra, .dst0x, .dst0x, .uia(32, .dst0, .sub_bit_size), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                        .{ ._, .p_d, .sra, .dst0x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp1x), .ui(0), ._ },
+                        .{ ._, .p_, .unpcklwd, .dst0x, .dst0x, ._, ._ },
+                        .{ ._, .p_dq, .srl, .dst0x, .ui(1), ._, ._ },
+                        .{ ._, .p_w, .shufl, .dst0x, .dst0x, .ui(0b00_10_00_10), ._ },
+                        .{ ._, .p_d, .sra, .dst0x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx2, null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_32_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword, .smear = 8 } } },
+                        .{ .type = .vector_32_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_32_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_d, .broadcast, .tmp2y, .src0x, ._, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp2y, .tmp2y, .lea(.dst0y), ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp3y, .lea(.dst0y), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp2y, .tmp2y, .tmp3y, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp2y, .tmp2y, .tmp3y, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp2y, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .signed_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .bswap, .src0d, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0d, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0d, .ui(0b00001111000011110000111100001111), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b11110000111100001111000011110000), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b00110011001100110011001100110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b11001100110011001100110011001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b01010101010101010101010101010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b10101010101010101010101010101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                        .{ ._, .vp_d, .srl, .dst0x, .dst0x, .uia(32, .dst0, .sub_bit_size), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                        .{ ._, .p_d, .srl, .dst0x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .gfni, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp1p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp1x), .ui(0), ._ },
+                        .{ ._, .p_, .unpcklwd, .dst0x, .dst0x, ._, ._ },
+                        .{ ._, .p_dq, .srl, .dst0x, .ui(1), ._, ._ },
+                        .{ ._, .p_w, .shufl, .dst0x, .dst0x, .ui(0b00_10_00_10), ._ },
+                        .{ ._, .p_d, .srl, .dst0x, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx2, null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_32_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .dword, .smear = 8 } } },
+                        .{ .type = .vector_32_u8, .kind = .reverse_bits },
+                        .{ .type = .vector_32_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .vp_d, .broadcast, .tmp2y, .src0x, ._, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp2y, .tmp2y, .lea(.dst0y), ._ },
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp3y, .lea(.dst0y), ._, ._ },
+                        .{ ._, .vp_, .@"and", .tmp2y, .tmp2y, .tmp3y, ._ },
+                        .{ ._, .vp_b, .cmpeq, .tmp2y, .tmp2y, .tmp3y, ._ },
+                        .{ ._, .vp_b, .movmsk, .dst0d, .tmp2y, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .src_constraints = .{ .{ .unsigned_int = .dword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .bswap, .src0d, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ },
+                        .{ ._, ._r, .sh, .src0d, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0d, .ui(0b00001111000011110000111100001111), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b11110000111100001111000011110000), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b00110011001100110011001100110011), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b11001100110011001100110011001100), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0d, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0d, .ui(0b01010101010101010101010101010101), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0d, .ui(0b10101010101010101010101010101010), ._, ._ },
+                        .{ ._, ._, .@"or", .dst0d, .tmp0d, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0d, .uia(32, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 64 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .qword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 64 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .qword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 64 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .src0x, .lea(.dst0x), .ui(0), ._ },
+                        .{ ._, ._q, .mov, .dst0q, .src0x, ._, ._ },
+                        .{ ._, ._, .bswap, .dst0q, ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .exact_int = 64 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .bswap, .src0q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .src0q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .avx, .gfni, null },
+                    .src_constraints = .{ .{ .signed_int = .qword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .tmp1x, .src0x, .lea(.dst0x), .ui(0) },
+                        .{ ._, .v_q, .mov, .dst0q, .tmp1x, ._, ._ },
+                        .{ ._, ._, .bswap, .dst0q, ._, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .gfni, null, null },
+                    .src_constraints = .{ .{ .signed_int = .qword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .src0x, .lea(.dst0x), .ui(0), ._ },
+                        .{ ._, ._q, .mov, .dst0q, .src0x, ._, ._ },
+                        .{ ._, ._, .bswap, .dst0q, ._, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .signed_int = .qword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .bswap, .src0q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .src0q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                        .{ ._, ._r, .sa, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .qword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                        .{ ._, .vp_q, .srl, .dst0x, .dst0x, .uia(64, .dst0, .sub_bit_size), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .qword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                        .{ ._, .p_q, .srl, .dst0x, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .gfni, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .rc = .general_purpose }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .dst0p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .src0x, .lea(.dst0x), .ui(0), ._ },
+                        .{ ._, ._q, .mov, .dst0q, .src0x, ._, ._ },
+                        .{ ._, ._, .bswap, .dst0q, ._, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .unsigned_int = .qword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_gpr, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .bswap, .src0q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .src0q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .src0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp1q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp0q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .dst0q, .tmp1q, ._, ._ },
+                        .{ ._, ._, .@"or", .dst0q, .tmp0q, ._, ._ },
+                        .{ ._, ._r, .sh, .dst0q, .uia(64, .dst0, .sub_bit_size), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 128 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .xword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0x, .dst0x, .lea(.tmp2x), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .ssse3, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 128 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .xword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .ref = .src0 }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .dst0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .dst0x, .lea(.tmp2x), ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .avx, .gfni, null },
+                    .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .xword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .tmp3x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp3x, .tmp3x, .lea(.tmp2x), ._ },
+                        .{ ._, .v_q, .mov, .tmp2q, .tmp3x, ._, ._ },
+                        .{ ._, .vp_q, .extr, .tmp4q, .tmp3x, .ui(1), ._ },
+                        .{ ._, ._rd, .sh, .tmp2q, .tmp4q, .uia(128, .dst0, .sub_bit_size), ._ },
+                        .{ ._, ._, .mov, .dst0q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sa, .tmp4q, .uia(128, .dst0, .sub_bit_size), ._, ._ },
+                        .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp4q, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .ssse3, .gfni, null },
+                    .src_constraints = .{ .{ .signed_int = .xword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .xword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .src0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .src0x, .lea(.tmp2x), ._, ._ },
+                        .{ ._, ._q, .mov, .tmp2q, .src0x, ._, ._ },
+                        .{ ._, .p_q, .extr, .tmp3q, .src0x, .ui(1), ._ },
+                        .{ ._, ._rd, .sh, .tmp2q, .tmp3q, .uia(128, .dst0, .sub_bit_size), ._ },
+                        .{ ._, ._, .mov, .dst0q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sa, .tmp3q, .uia(128, .dst0, .sub_bit_size), ._, ._ },
+                        .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp3q, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .avx, .gfni, null },
+                    .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .xword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .vector_16_u8, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .tmp3x, .src0x, .lea(.tmp2x), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .tmp3x, .tmp3x, .lea(.tmp2x), ._ },
+                        .{ ._, .v_q, .mov, .tmp2q, .tmp3x, ._, ._ },
+                        .{ ._, .vp_q, .extr, .tmp4q, .tmp3x, .ui(1), ._ },
+                        .{ ._, ._rd, .sh, .tmp2q, .tmp4q, .uia(128, .dst0, .sub_bit_size), ._ },
+                        .{ ._, ._, .mov, .dst0q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp4q, .uia(128, .dst0, .sub_bit_size), ._, ._ },
+                        .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp4q, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .ssse3, .gfni, null },
+                    .src_constraints = .{ .{ .unsigned_int = .xword }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mut_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .xword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, ._b, .gf2p8affineq, .src0x, .lea(.tmp2x), .ui(0), ._ },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .p_b, .shuf, .src0x, .lea(.tmp2x), ._, ._ },
+                        .{ ._, ._q, .mov, .tmp2q, .src0x, ._, ._ },
+                        .{ ._, .p_q, .extr, .tmp3q, .src0x, .ui(1), ._ },
+                        .{ ._, ._rd, .sh, .tmp2q, .tmp3q, .uia(128, .dst0, .sub_bit_size), ._ },
+                        .{ ._, ._, .mov, .dst0q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp3q, .uia(128, .dst0, .sub_bit_size), ._, ._ },
+                        .{ ._, ._, .mov, .memd(.dst0q, 8), .tmp3q, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx2, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 256 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_32_u8, .kind = .forward_bits },
+                        .{ .type = .vector_32_u8, .kind = .{ .pshufb_bswap_mem = .{ .repeat = 2, .size = .xword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0y, .src0y, .lea(.tmp2y), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0y, .dst0y, .lea(.tmp2y), ._ },
+                        .{ ._, .v_q, .perm, .dst0y, .dst0y, .ui(0b01_00_11_10), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_int = 256 }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_sse, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .vector_32_u8, .kind = .forward_bits },
+                        .{ .type = .vector_32_u8, .kind = .{ .pshufb_bswap_mem = .{ .repeat = 2, .size = .xword } } },
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .sse } }, .unused },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp0), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .dst0y, .src0y, .lea(.tmp2y), .ui(0) },
+                        .{ ._, ._, .lea, .tmp2p, .mem(.tmp1), ._, ._ },
+                        .{ ._, .vp_b, .shuf, .dst0y, .dst0y, .lea(.tmp2y), ._ },
+                        .{ ._, .v_pd, .perm, .dst0y, .dst0y, .ui(0b01_00_11_10), ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx2, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .vector_32_u8, .kind = .forward_bits },
+                        .{ .type = .vector_32_u8, .kind = .{ .pshufb_bswap_mem = .{ .repeat = 2, .size = .xword } } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp4y, .lea(.tmp0y), ._, ._ },
+                        .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp5y, .lea(.tmp0y), ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ .@"0:", .v_q, .perm, .tmp6y, .lea(.tmp1y), .ui(0b01_00_11_10), ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .tmp6y, .tmp6y, .tmp4y, .ui(0) },
+                        .{ ._, .vp_b, .shuf, .tmp6y, .tmp6y, .tmp5y, ._ },
+                        .{ ._, .v_dqu, .mov, .memi(.dst0y, .tmp0), .tmp6y, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 32), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .vector_32_u8, .kind = .forward_bits },
+                        .{ .type = .vector_32_u8, .kind = .{ .pshufb_bswap_mem = .{ .repeat = 2, .size = .xword } } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp4y, .lea(.tmp0y), ._, ._ },
+                        .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp5y, .lea(.tmp0y), ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .sia(-32, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ .@"0:", .v_pd, .perm, .tmp6y, .lea(.tmp1y), .ui(0b01_00_11_10), ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .tmp6y, .tmp6y, .tmp4y, .ui(0) },
+                        .{ ._, .vp_b, .shuf, .tmp6y, .tmp6y, .tmp5y, ._ },
+                        .{ ._, .v_dqu, .mov, .memi(.dst0y, .tmp0), .tmp6y, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 32), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .avx, .gfni, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .vector_16_u8, .kind = .forward_bits },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_bswap_mem = .{ .size = .xword } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .lea, .tmp0p, .mem(.tmp2), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp4x, .lea(.tmp0x), ._, ._ },
+                        .{ ._, ._, .lea, .tmp0p, .mem(.tmp3), ._, ._ },
+                        .{ ._, .v_dqa, .mov, .tmp5x, .lea(.tmp0x), ._, ._ },
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ .@"0:", .v_dqa, .mov, .tmp6x, .lea(.tmp1x), ._, ._ },
+                        .{ ._, .v_b, .gf2p8affineq, .tmp6x, .tmp6x, .tmp4x, .ui(0) },
+                        .{ ._, .vp_b, .shuf, .tmp6x, .tmp6x, .tmp5x, ._ },
+                        .{ ._, .v_dqa, .mov, .memi(.dst0x, .tmp0), .tmp6x, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 16), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .movbe, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp2q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .movbe, .memi(.dst0q, .tmp0), .tmp5q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp2q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .bswap, .tmp5q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp5q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .movbe, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2d, .mem(.src0d), ._, ._ },
+                        .{ ._, ._l, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp2q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp2q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp2q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .movbe, .memi(.dst0q, .tmp0), .tmp5q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2d, .mem(.src0d), ._, ._ },
+                        .{ ._, ._l, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp2q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp2q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp2q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .bswap, .tmp5q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp5q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .movbe, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp2q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .movbe, .memi(.dst0q, .tmp0), .tmp5q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp5q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .bswap, .tmp5q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp2q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp2q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp5q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp5q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp5q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .movbe, null, null },
+                    .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2d, .mem(.src0d), ._, ._ },
+                        .{ ._, ._l, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp2q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp5q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .movbe, .tmp6q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp5q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._rd, .sh, .tmp6q, .tmp2q, .uia(64, .src0, .sub_bit_size_rem_64), ._ },
+                        .{ ._, ._, .mov, .tmp2q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp6q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2d, .mem(.src0d), ._, ._ },
+                        .{ ._, ._l, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp2q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp5q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp6q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .bswap, .tmp6q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp5q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._rd, .sh, .tmp6q, .tmp2q, .uia(64, .src0, .sub_bit_size_rem_64), ._ },
+                        .{ ._, ._, .mov, .tmp2q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp6q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .movbe, null, null },
+                    .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+                        .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp2q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp5q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .movbe, .tmp6q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp5q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._rd, .sh, .tmp6q, .tmp2q, .uia(64, .src0, .sub_bit_size_rem_64), ._ },
+                        .{ ._, ._, .mov, .tmp2q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp6q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+                        .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp2q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp5q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp6q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .bswap, .tmp6q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp5q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._rd, .sh, .tmp6q, .tmp2q, .uia(64, .src0, .sub_bit_size_rem_64), ._ },
+                        .{ ._, ._, .mov, .tmp2q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp6q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .movbe, null, null },
+                    .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2d, .mem(.src0d), ._, ._ },
+                        .{ ._, ._l, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp5q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .movbe, .tmp6q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp5q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._rd, .sh, .tmp6q, .tmp2q, .uia(64, .src0, .sub_bit_size_rem_64), ._ },
+                        .{ ._, ._, .mov, .tmp2q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp6q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .mov, .tmp2d, .mem(.src0d), ._, ._ },
+                        .{ ._, ._l, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._r, .sa, .tmp2q, .ui(63), ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp5q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp6q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .bswap, .tmp6q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp5q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._rd, .sh, .tmp6q, .tmp2q, .uia(64, .src0, .sub_bit_size_rem_64), ._ },
+                        .{ ._, ._, .mov, .tmp2q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp6q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", .movbe, null, null },
+                    .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp5q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .movbe, .tmp6q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp5q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._rd, .sh, .tmp6q, .tmp2q, .uia(64, .src0, .sub_bit_size_rem_64), ._ },
+                        .{ ._, ._, .mov, .tmp2q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp6q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                }, .{
+                    .required_features = .{ .@"64bit", null, null, null },
+                    .src_constraints = .{ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, .any, .any },
+                    .patterns = &.{
+                        .{ .src = .{ .to_mem, .none, .none } },
+                    },
+                    .extra_temps = .{
+                        .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+                        .unused,
+                        .unused,
+                        .unused,
+                    },
+                    .dst_temps = .{ .mem, .unused },
+                    .clobbers = .{ .eflags = true },
+                    .each = .{ .once = &.{
+                        .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ },
+                        .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+                        .{ ._, ._, .mov, .tmp3q, .uia(0b00001111000011110000111100001111, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp4q, .uia(0b00110011001100110011001100110011, .none, .repeat), ._, ._ },
+                        .{ ._, ._, .mov, .tmp5q, .uia(0b01010101010101010101010101010101, .none, .repeat), ._, ._ },
+                        .{ .@"0:", ._, .mov, .tmp6q, .lea(.tmp1q), ._, ._ },
+                        .{ ._, ._, .bswap, .tmp6q, ._, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp3q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(4), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(4), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp3q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp4q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(2), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(2), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp4q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._, .@"and", .tmp7q, .tmp5q, ._, ._ },
+                        .{ ._, ._r, .sh, .tmp6q, .ui(1), ._, ._ },
+                        .{ ._, ._l, .sh, .tmp7q, .ui(1), ._, ._ },
+                        .{ ._, ._, .@"and", .tmp6q, .tmp5q, ._, ._ },
+                        .{ ._, ._, .@"or", .tmp6q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ },
+                        .{ ._, ._rd, .sh, .tmp6q, .tmp2q, .uia(64, .src0, .sub_bit_size_rem_64), ._ },
+                        .{ ._, ._, .mov, .tmp2q, .tmp7q, ._, ._ },
+                        .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp6q, ._, ._ },
+                        .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+                        .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+                        .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+                    } },
+                } }) catch |err| switch (err) {
+                    error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
+                        @tagName(air_tag),
+                        ty_op.ty.toType().fmt(pt),
+                        ops[0].tracking(cg),
+                    }),
+                    else => |e| return e,
+                };
+                try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
+            },
 
             .cmp_vector, .cmp_vector_optimized => |air_tag| if (use_old) try cg.airCmpVector(inst) else fallback: {
                 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
@@ -59301,7 +62436,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .unused,
                         .unused,
                         .unused,
@@ -59328,7 +62463,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .unused,
@@ -60950,7 +64085,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .unused,
                         .unused,
                         .unused,
@@ -60977,7 +64112,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .unused,
                         .unused,
                         .unused,
@@ -61003,7 +64138,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .unused,
@@ -61034,7 +64169,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .unused,
@@ -62506,7 +65641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .unused,
                         .unused,
                         .unused,
@@ -62533,7 +65668,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .unused,
                         .unused,
                         .unused,
@@ -62560,7 +65695,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .unused,
                         .unused,
                         .unused,
@@ -62586,7 +65721,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .unused,
@@ -62618,7 +65753,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
                     },
                     .extra_temps = .{
                         .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
-                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_cm_mem = .{ .from = .dword, .to = .byte } } },
+                        .{ .type = .vector_16_u8, .kind = .{ .pshufb_trunc_mem = .{ .from = .dword, .to = .byte } } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
                         .unused,
@@ -91576,9 +94711,12 @@ fn airAsm(self: *CodeGen, inst: Air.Inst.Index) !void {
 }
 
 const MoveStrategy = union(enum) {
-    move: Mir.Inst.FixedTag,
-    x87_load_store,
+    move_through_gpr,
+    load_store_through_frame,
+    load_store: Mir.Inst.FixedTag,
+    load_store_x87,
     insert_extract: InsertExtract,
+    insert_or_extract_through_gpr: InsertExtract,
     vex_insert_extract: InsertExtract,
 
     const InsertExtract = struct {
@@ -91586,194 +94724,215 @@ const MoveStrategy = union(enum) {
         extract: Mir.Inst.FixedTag,
     };
 
-    pub fn read(strat: MoveStrategy, self: *CodeGen, dst_reg: Register, src_mem: Memory) !void {
+    pub fn read(strat: MoveStrategy, cg: *CodeGen, dst_reg: Register, src_mem: Memory) !void {
         switch (strat) {
-            .move => |tag| try self.asmRegisterMemory(tag, switch (tag[1]) {
-                else => dst_reg,
-                .lea => if (dst_reg.bitSize() >= 32) dst_reg else dst_reg.to32(),
-            }, src_mem),
-            .x87_load_store => if (dst_reg != .st0 and self.register_manager.isKnownRegFree(.st7)) {
-                try self.asmMemory(.{ .f_, .ld }, src_mem);
+            .move_through_gpr => {
+                const tmp_reg = try cg.register_manager.allocReg(null, abi.RegisterClass.gp);
+                try cg.asmRegisterMemory(.{ ._, .movzx }, tmp_reg.to32(), src_mem);
+                try cg.asmRegisterRegister(.{ ._d, .mov }, dst_reg, tmp_reg.to32());
+            },
+            .load_store_through_frame => {
+                const tmp_frame_index = try cg.allocFrameIndex(.init(.{
+                    .size = 16,
+                    .alignment = .@"16",
+                }));
+                const tmp_reg = try cg.register_manager.allocReg(null, abi.RegisterClass.gp);
+                try cg.asmRegisterMemory(.{ ._, .movzx }, tmp_reg.to32(), src_mem);
+                try cg.asmMemoryRegister(.{ ._, .mov }, .{
+                    .base = .{ .frame = tmp_frame_index },
+                    .mod = .{ .rm = .{ .size = .dword } },
+                }, tmp_reg.to32());
+                try cg.asmRegisterMemory(.{ ._ps, .mova }, dst_reg, .{
+                    .base = .{ .frame = tmp_frame_index },
+                    .mod = .{ .rm = .{ .size = .xword } },
+                });
+            },
+            .load_store => |tag| {
+                if (tag[0] == ._ps and tag[1] == .movl) try cg.asmRegisterRegister(.{ .p_, .xor }, dst_reg, dst_reg);
+                try cg.asmRegisterMemory(tag, switch (tag[1]) {
+                    else => dst_reg,
+                    .lea => if (dst_reg.bitSize() >= 32) dst_reg else dst_reg.to32(),
+                }, src_mem);
+            },
+            .load_store_x87 => if (dst_reg != .st0 and cg.register_manager.isKnownRegFree(.st7)) {
+                try cg.asmMemory(.{ .f_, .ld }, src_mem);
                 switch (dst_reg) {
-                    .st1, .st2, .st3, .st4, .st5, .st6 => try self.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)),
-                    .st7 => try self.asmOpOnly(.{ .f_cstp, .in }),
+                    .st1, .st2, .st3, .st4, .st5, .st6 => try cg.asmRegister(.{ .f_p, .st }, @enumFromInt(@intFromEnum(dst_reg) + 1)),
+                    .st7 => try cg.asmOpOnly(.{ .f_cstp, .in }),
                     else => unreachable,
                 }
             } else {
-                try self.asmRegister(.{ .f_p, .st }, dst_reg);
-                try self.asmMemory(.{ .f_, .ld }, src_mem);
+                try cg.asmRegister(.{ .f_p, .st }, dst_reg);
+                try cg.asmMemory(.{ .f_, .ld }, src_mem);
                 switch (dst_reg) {
                     .st0 => {},
-                    .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, dst_reg),
+                    .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try cg.asmRegister(.{ .f_, .xch }, dst_reg),
                     else => unreachable,
                 }
             },
-            .insert_extract => |ie| if (ie.insert[0] != .p_w or self.hasFeature(.sse2))
-                try self.asmRegisterMemoryImmediate(ie.insert, dst_reg, src_mem, .u(0))
-            else {
-                const tmp_frame_index = try self.allocFrameIndex(.init(.{
+            .insert_extract, .insert_or_extract_through_gpr => |ie| {
+                try cg.asmRegisterRegister(.{ .p_, .xor }, dst_reg, dst_reg);
+                try cg.asmRegisterMemoryImmediate(ie.insert, dst_reg, src_mem, .u(0));
+            },
+            .vex_insert_extract => |ie| {
+                try cg.asmRegisterRegisterRegister(.{ .vp_, .xor }, dst_reg, dst_reg, dst_reg);
+                try cg.asmRegisterRegisterMemoryImmediate(ie.insert, dst_reg, dst_reg, src_mem, .u(0));
+            },
+        }
+    }
+    pub fn write(strat: MoveStrategy, cg: *CodeGen, dst_mem: Memory, src_reg: Register) !void {
+        switch (strat) {
+            .move_through_gpr => {
+                const tmp_reg = try cg.register_manager.allocReg(null, abi.RegisterClass.gp);
+                try cg.asmRegisterRegister(.{ ._d, .mov }, tmp_reg.to32(), src_reg.to128());
+                try cg.asmMemoryRegister(
+                    .{ ._, .mov },
+                    dst_mem,
+                    registerAlias(tmp_reg, @intCast(@divExact(dst_mem.mod.rm.size.bitSize(cg.target), 8))),
+                );
+            },
+            .load_store_through_frame => {
+                const tmp_frame_index = try cg.allocFrameIndex(.init(.{
                     .size = 16,
                     .alignment = .@"16",
                 }));
-                const tmp_reg = try self.register_manager.allocReg(null, abi.RegisterClass.gp);
-                try self.asmRegisterMemory(.{ ._, .movzx }, tmp_reg.to32(), src_mem);
-                try self.asmMemoryRegister(.{ ._, .mov }, .{
-                    .base = .{ .frame = tmp_frame_index },
-                    .mod = .{ .rm = .{ .size = .word } },
-                }, tmp_reg.to16());
-                try self.asmRegisterMemory(.{ ._ps, .mova }, dst_reg.to128(), .{
+                try cg.asmMemoryRegister(.{ ._ps, .mova }, .{
                     .base = .{ .frame = tmp_frame_index },
                     .mod = .{ .rm = .{ .size = .xword } },
+                }, src_reg.to128());
+                const tmp_reg = try cg.register_manager.allocReg(null, abi.RegisterClass.gp);
+                try cg.asmRegisterMemory(.{ ._, .movzx }, tmp_reg.to32(), .{
+                    .base = .{ .frame = tmp_frame_index },
+                    .mod = .{ .rm = .{ .size = .word } },
                 });
+                try cg.asmMemoryRegister(.{ ._, .mov }, dst_mem, tmp_reg.to16());
             },
-            .vex_insert_extract => |ie| try self.asmRegisterRegisterMemoryImmediate(
-                ie.insert,
-                dst_reg,
-                dst_reg,
-                src_mem,
-                .u(0),
-            ),
-        }
-    }
-    pub fn write(strat: MoveStrategy, self: *CodeGen, dst_mem: Memory, src_reg: Register) !void {
-        switch (strat) {
-            .move => |tag| try self.asmMemoryRegister(tag, dst_mem, src_reg),
-            .x87_load_store => if (self.register_manager.isKnownRegFree(.st7)) {
-                try self.asmRegister(.{ .f_, .ld }, src_reg);
-                try self.asmMemory(.{ .f_p, .st }, dst_mem);
+            .load_store => |tag| try cg.asmMemoryRegister(tag, dst_mem, src_reg),
+            .load_store_x87 => if (cg.register_manager.isKnownRegFree(.st7)) {
+                try cg.asmRegister(.{ .f_, .ld }, src_reg);
+                try cg.asmMemory(.{ .f_p, .st }, dst_mem);
             } else {
                 switch (src_reg) {
                     .st0 => {},
-                    .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, src_reg),
+                    .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try cg.asmRegister(.{ .f_, .xch }, src_reg),
                     else => unreachable,
                 }
-                try self.asmMemory(.{ .f_p, .st }, dst_mem);
-                try self.asmMemory(.{ .f_, .ld }, dst_mem);
+                try cg.asmMemory(.{ .f_p, .st }, dst_mem);
+                try cg.asmMemory(.{ .f_, .ld }, dst_mem);
                 switch (src_reg) {
                     .st0 => {},
-                    .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try self.asmRegister(.{ .f_, .xch }, src_reg),
+                    .st1, .st2, .st3, .st4, .st5, .st6, .st7 => try cg.asmRegister(.{ .f_, .xch }, src_reg),
                     else => unreachable,
                 }
             },
-            .insert_extract, .vex_insert_extract => |ie| if (ie.extract[0] != .p_w or self.hasFeature(.sse4_1))
-                try self.asmMemoryRegisterImmediate(ie.extract, dst_mem, src_reg, .u(0))
-            else if (self.hasFeature(.sse2)) {
-                const tmp_reg = try self.register_manager.allocReg(null, abi.RegisterClass.gp);
-                try self.asmRegisterRegisterImmediate(ie.extract, tmp_reg.to32(), src_reg.to128(), .u(0));
-                try self.asmMemoryRegister(.{ ._, .mov }, dst_mem, tmp_reg.to16());
-            } else {
-                const tmp_frame_index = try self.allocFrameIndex(.init(.{
-                    .size = 16,
-                    .alignment = .@"16",
-                }));
-                try self.asmMemoryRegister(.{ ._ps, .mova }, .{
-                    .base = .{ .frame = tmp_frame_index },
-                    .mod = .{ .rm = .{ .size = .xword } },
-                }, src_reg.to128());
-                const tmp_reg = try self.register_manager.allocReg(null, abi.RegisterClass.gp);
-                try self.asmRegisterMemory(.{ ._, .movzx }, tmp_reg.to32(), .{
-                    .base = .{ .frame = tmp_frame_index },
-                    .mod = .{ .rm = .{ .size = .word } },
-                });
-                try self.asmMemoryRegister(.{ ._, .mov }, dst_mem, tmp_reg.to16());
+            .insert_extract, .vex_insert_extract => |ie| try cg.asmMemoryRegisterImmediate(ie.extract, dst_mem, src_reg, .u(0)),
+            .insert_or_extract_through_gpr => |ie| {
+                const tmp_reg = try cg.register_manager.allocReg(null, abi.RegisterClass.gp);
+                try cg.asmRegisterRegisterImmediate(ie.extract, tmp_reg.to32(), src_reg.to128(), .u(0));
+                try cg.asmMemoryRegister(.{ ._, .mov }, dst_mem, tmp_reg.to16());
             },
         }
     }
 };
-fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool) !MoveStrategy {
-    const pt = self.pt;
+fn moveStrategy(cg: *CodeGen, ty: Type, class: Register.Class, aligned: bool) !MoveStrategy {
+    const pt = cg.pt;
     const zcu = pt.zcu;
     switch (class) {
-        .general_purpose, .segment => return .{ .move = .{ ._, .mov } },
-        .x87 => return .x87_load_store,
+        .general_purpose, .segment => return .{ .load_store = .{ ._, .mov } },
+        .x87 => return .load_store_x87,
         .mmx => {},
         .sse => switch (ty.zigTypeTag(zcu)) {
             else => {
-                const classes = std.mem.sliceTo(&abi.classifySystemV(ty, zcu, self.target.*, .other), .none);
+                const classes = std.mem.sliceTo(&abi.classifySystemV(ty, zcu, cg.target.*, .other), .none);
                 assert(std.mem.indexOfNone(abi.Class, classes, &.{
                     .integer, .sse, .sseup, .memory, .float, .float_combine,
                 }) == null);
                 const abi_size = ty.abiSize(zcu);
-                if (abi_size < 4 or
-                    std.mem.indexOfScalar(abi.Class, classes, .integer) != null) switch (abi_size) {
-                    1 => if (self.hasFeature(.avx)) return .{ .vex_insert_extract = .{
+                if (abi_size < 4 or std.mem.indexOfScalar(abi.Class, classes, .integer) != null) switch (abi_size) {
+                    1 => return if (cg.hasFeature(.avx)) .{ .vex_insert_extract = .{
                         .insert = .{ .vp_b, .insr },
                         .extract = .{ .vp_b, .extr },
-                    } } else if (self.hasFeature(.sse4_2)) return .{ .insert_extract = .{
+                    } } else if (cg.hasFeature(.sse4_1)) .{ .insert_extract = .{
                         .insert = .{ .p_b, .insr },
                         .extract = .{ .p_b, .extr },
-                    } },
-                    2 => return if (self.hasFeature(.avx)) .{ .vex_insert_extract = .{
+                    } } else if (cg.hasFeature(.sse2)) .move_through_gpr else .load_store_through_frame,
+                    2 => return if (cg.hasFeature(.avx)) .{ .vex_insert_extract = .{
                         .insert = .{ .vp_w, .insr },
                         .extract = .{ .vp_w, .extr },
-                    } } else .{ .insert_extract = .{
+                    } } else if (cg.hasFeature(.sse4_1)) .{ .insert_extract = .{
                         .insert = .{ .p_w, .insr },
                         .extract = .{ .p_w, .extr },
-                    } },
-                    3...4 => return .{ .move = .{ if (self.hasFeature(.avx))
+                    } } else if (cg.hasFeature(.sse2)) .{ .insert_or_extract_through_gpr = .{
+                        .insert = .{ .p_w, .insr },
+                        .extract = .{ .p_w, .extr },
+                    } } else .load_store_through_frame,
+                    3...4 => return .{ .load_store = .{ if (cg.hasFeature(.avx))
                         .v_d
-                    else if (self.hasFeature(.sse2))
+                    else if (cg.hasFeature(.sse2))
                         ._d
                     else
                         ._ss, .mov } },
-                    5...8 => return .{ .move = if (self.hasFeature(.avx))
+                    5...8 => return .{ .load_store = if (cg.hasFeature(.avx))
                         .{ .v_q, .mov }
-                    else if (self.hasFeature(.sse2))
+                    else if (cg.hasFeature(.sse2))
                         .{ ._q, .mov }
                     else
                         .{ ._ps, .movl } },
-                    9...16 => return .{ .move = if (self.hasFeature(.avx))
+                    9...16 => return .{ .load_store = if (cg.hasFeature(.avx))
                         .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                    else if (self.hasFeature(.sse2))
+                    else if (cg.hasFeature(.sse2))
                         .{ if (aligned) ._dqa else ._dqu, .mov }
                     else
                         .{ ._ps, if (aligned) .mova else .movu } },
-                    17...32 => if (self.hasFeature(.avx))
-                        return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                    17...32 => if (cg.hasFeature(.avx))
+                        return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                     else => {},
                 } else switch (abi_size) {
-                    4 => return .{ .move = if (self.hasFeature(.avx))
+                    4 => return .{ .load_store = if (cg.hasFeature(.avx))
                         .{ .v_ss, .mov }
                     else
                         .{ ._ss, .mov } },
-                    5...8 => return .{ .move = if (self.hasFeature(.avx))
+                    5...8 => return .{ .load_store = if (cg.hasFeature(.avx))
                         .{ .v_sd, .mov }
-                    else if (self.hasFeature(.sse2))
+                    else if (cg.hasFeature(.sse2))
                         .{ ._sd, .mov }
                     else
                         .{ ._ps, .movl } },
-                    9...16 => return .{ .move = if (self.hasFeature(.avx))
+                    9...16 => return .{ .load_store = if (cg.hasFeature(.avx))
                         .{ .v_pd, if (aligned) .mova else .movu }
-                    else if (self.hasFeature(.sse2))
+                    else if (cg.hasFeature(.sse2))
                         .{ ._pd, if (aligned) .mova else .movu }
                     else
                         .{ ._ps, if (aligned) .mova else .movu } },
-                    17...32 => if (self.hasFeature(.avx))
-                        return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } },
+                    17...32 => if (cg.hasFeature(.avx))
+                        return .{ .load_store = .{ .v_pd, if (aligned) .mova else .movu } },
                     else => {},
                 }
             },
-            .float => switch (ty.floatBits(self.target.*)) {
-                16 => return if (self.hasFeature(.avx)) .{ .vex_insert_extract = .{
+            .float => switch (ty.floatBits(cg.target.*)) {
+                16 => return if (cg.hasFeature(.avx)) .{ .vex_insert_extract = .{
                     .insert = .{ .vp_w, .insr },
                     .extract = .{ .vp_w, .extr },
-                } } else .{ .insert_extract = .{
+                } } else if (cg.hasFeature(.sse4_1)) .{ .insert_extract = .{
                     .insert = .{ .p_w, .insr },
                     .extract = .{ .p_w, .extr },
-                } },
-                32 => return .{ .move = if (self.hasFeature(.avx))
+                } } else if (cg.hasFeature(.sse2)) .{ .insert_or_extract_through_gpr = .{
+                    .insert = .{ .p_w, .insr },
+                    .extract = .{ .p_w, .extr },
+                } } else .load_store_through_frame,
+                32 => return .{ .load_store = if (cg.hasFeature(.avx))
                     .{ .v_ss, .mov }
                 else
                     .{ ._ss, .mov } },
-                64 => return .{ .move = if (self.hasFeature(.avx))
+                64 => return .{ .load_store = if (cg.hasFeature(.avx))
                     .{ .v_sd, .mov }
-                else if (self.hasFeature(.sse2))
+                else if (cg.hasFeature(.sse2))
                     .{ ._sd, .mov }
                 else
                     .{ ._ps, .movl } },
-                128 => return .{ .move = if (self.hasFeature(.avx))
+                128 => return .{ .load_store = if (cg.hasFeature(.avx))
                     .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                else if (self.hasFeature(.sse2))
+                else if (cg.hasFeature(.sse2))
                     .{ if (aligned) ._dqa else ._dqu, .mov }
                 else
                     .{ ._ps, if (aligned) .mova else .movu } },
@@ -91781,160 +94940,163 @@ fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool)
             },
             .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) {
                 .bool => switch (ty.vectorLen(zcu)) {
-                    1...8 => if (self.hasFeature(.avx)) return .{ .vex_insert_extract = .{
+                    1...8 => return if (cg.hasFeature(.avx)) .{ .vex_insert_extract = .{
                         .insert = .{ .vp_b, .insr },
                         .extract = .{ .vp_b, .extr },
-                    } } else if (self.hasFeature(.sse4_2)) return .{ .insert_extract = .{
+                    } } else if (cg.hasFeature(.sse4_1)) .{ .insert_extract = .{
                         .insert = .{ .p_b, .insr },
                         .extract = .{ .p_b, .extr },
-                    } },
-                    9...16 => return if (self.hasFeature(.avx)) .{ .vex_insert_extract = .{
+                    } } else if (cg.hasFeature(.sse2)) .move_through_gpr else .load_store_through_frame,
+                    9...16 => return if (cg.hasFeature(.avx)) .{ .vex_insert_extract = .{
                         .insert = .{ .vp_w, .insr },
                         .extract = .{ .vp_w, .extr },
-                    } } else .{ .insert_extract = .{
+                    } } else if (cg.hasFeature(.sse4_1)) .{ .insert_extract = .{
                         .insert = .{ .p_w, .insr },
                         .extract = .{ .p_w, .extr },
-                    } },
-                    17...32 => return .{ .move = .{ if (self.hasFeature(.avx))
+                    } } else if (cg.hasFeature(.sse2)) .{ .insert_or_extract_through_gpr = .{
+                        .insert = .{ .p_w, .insr },
+                        .extract = .{ .p_w, .extr },
+                    } } else .load_store_through_frame,
+                    17...32 => return .{ .load_store = .{ if (cg.hasFeature(.avx))
                         .v_d
-                    else if (self.hasFeature(.sse2))
+                    else if (cg.hasFeature(.sse2))
                         ._d
                     else
                         ._ss, .mov } },
-                    33...64 => return .{ .move = if (self.hasFeature(.avx))
+                    33...64 => return .{ .load_store = if (cg.hasFeature(.avx))
                         .{ .v_q, .mov }
-                    else if (self.hasFeature(.sse2))
+                    else if (cg.hasFeature(.sse2))
                         .{ ._q, .mov }
                     else
                         .{ ._ps, .movl } },
-                    65...128 => return .{ .move = if (self.hasFeature(.avx))
+                    65...128 => return .{ .load_store = if (cg.hasFeature(.avx))
                         .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                    else if (self.hasFeature(.sse2))
+                    else if (cg.hasFeature(.sse2))
                         .{ if (aligned) ._dqa else ._dqu, .mov }
                     else
                         .{ ._ps, if (aligned) .mova else .movu } },
-                    129...256 => if (self.hasFeature(.avx))
-                        return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                    129...256 => if (cg.hasFeature(.avx))
+                        return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                     else => {},
                 },
                 .int => switch (ty.childType(zcu).intInfo(zcu).bits) {
                     1...8 => switch (ty.vectorLen(zcu)) {
-                        1...16 => return .{ .move = if (self.hasFeature(.avx))
+                        1...16 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ if (aligned) ._dqa else ._dqu, .mov }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        17...32 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        17...32 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     },
                     9...16 => switch (ty.vectorLen(zcu)) {
-                        1...8 => return .{ .move = if (self.hasFeature(.avx))
+                        1...8 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ if (aligned) ._dqa else ._dqu, .mov }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        9...16 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        9...16 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     },
                     17...32 => switch (ty.vectorLen(zcu)) {
-                        1...4 => return .{ .move = if (self.hasFeature(.avx))
+                        1...4 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ if (aligned) ._dqa else ._dqu, .mov }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        5...8 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        5...8 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     },
                     33...64 => switch (ty.vectorLen(zcu)) {
-                        1...2 => return .{ .move = if (self.hasFeature(.avx))
+                        1...2 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ if (aligned) ._dqa else ._dqu, .mov }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        3...4 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        3...4 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     },
                     65...128 => switch (ty.vectorLen(zcu)) {
-                        1 => return .{ .move = if (self.hasFeature(.avx))
+                        1 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ if (aligned) ._dqa else ._dqu, .mov }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        2 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        2 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     },
                     129...256 => switch (ty.vectorLen(zcu)) {
-                        1 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        1 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     },
                     else => {},
                 },
                 .pointer, .optional => if (ty.childType(zcu).isPtrAtRuntime(zcu))
                     switch (ty.vectorLen(zcu)) {
-                        1...2 => return .{ .move = if (self.hasFeature(.avx))
+                        1...2 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ if (aligned) ._dqa else ._dqu, .mov }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        3...4 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        3...4 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     }
                 else
                     unreachable,
-                .float => switch (ty.childType(zcu).floatBits(self.target.*)) {
+                .float => switch (ty.childType(zcu).floatBits(cg.target.*)) {
                     16 => switch (ty.vectorLen(zcu)) {
-                        1...8 => return .{ .move = if (self.hasFeature(.avx))
+                        1...8 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ if (aligned) ._dqa else ._dqu, .mov }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        9...16 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        9...16 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     },
                     32 => switch (ty.vectorLen(zcu)) {
-                        1...4 => return .{ .move = if (self.hasFeature(.avx))
+                        1...4 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ .v_ps, if (aligned) .mova else .movu }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        5...8 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ .v_ps, if (aligned) .mova else .movu } },
+                        5...8 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ .v_ps, if (aligned) .mova else .movu } },
                         else => {},
                     },
                     64 => switch (ty.vectorLen(zcu)) {
-                        1...2 => return .{ .move = if (self.hasFeature(.avx))
+                        1...2 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ .v_pd, if (aligned) .mova else .movu }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ ._pd, if (aligned) .mova else .movu }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        3...4 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } },
+                        3...4 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ .v_pd, if (aligned) .mova else .movu } },
                         else => {},
                     },
                     80, 128 => switch (ty.vectorLen(zcu)) {
-                        1 => return .{ .move = if (self.hasFeature(.avx))
+                        1 => return .{ .load_store = if (cg.hasFeature(.avx))
                             .{ if (aligned) .v_dqa else .v_dqu, .mov }
-                        else if (self.hasFeature(.sse2))
+                        else if (cg.hasFeature(.sse2))
                             .{ if (aligned) ._dqa else ._dqu, .mov }
                         else
                             .{ ._ps, if (aligned) .mova else .movu } },
-                        2 => if (self.hasFeature(.avx))
-                            return .{ .move = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
+                        2 => if (cg.hasFeature(.avx))
+                            return .{ .load_store = .{ if (aligned) .v_dqa else .v_dqu, .mov } },
                         else => {},
                     },
                     else => {},
@@ -91944,7 +95106,7 @@ fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool)
         },
         .ip, .cr, .dr => {},
     }
-    return self.fail("TODO moveStrategy for {}", .{ty.fmt(pt)});
+    return cg.fail("TODO moveStrategy for {}", .{ty.fmt(pt)});
 }
 
 const CopyOptions = struct {
@@ -92332,7 +95494,7 @@ fn genSetReg(
                         .size = 16,
                         .alignment = .@"16",
                     }));
-                    try MoveStrategy.write(.x87_load_store, self, .{
+                    try MoveStrategy.write(.load_store_x87, self, .{
                         .base = .{ .frame = frame_index },
                         .mod = .{ .rm = .{ .size = .tbyte } },
                     }, src_reg);
@@ -92430,7 +95592,7 @@ fn genSetReg(
         => try @as(MoveStrategy, switch (src_mcv) {
             .register_offset => |reg_off| switch (reg_off.off) {
                 0 => return self.genSetReg(dst_reg, ty, .{ .register = reg_off.reg }, opts),
-                else => .{ .move = .{ ._, .lea } },
+                else => .{ .load_store = .{ ._, .lea } },
             },
             .indirect => try self.moveStrategy(ty, dst_reg.class(), false),
             .load_frame => |frame_addr| try self.moveStrategy(
@@ -92440,7 +95602,7 @@ fn genSetReg(
                     std.math.log2_int_ceil(u10, @divExact(dst_reg.bitSize(), 8)),
                 )),
             ),
-            .lea_frame => .{ .move = .{ ._, .lea } },
+            .lea_frame => .{ .load_store = .{ ._, .lea } },
             else => unreachable,
         }).read(self, dst_alias, switch (src_mcv) {
             .register_offset, .indirect => |reg_off| .{
@@ -100903,7 +104065,10 @@ const Select = struct {
             f64_0x1p52_0x1p84_mem,
             u32_0x1p52_hi_0x1p84_hi_0_0_mem,
             f32_0_0x1p64_mem,
-            pshufb_cm_mem: struct { from: Memory.Size, to: Memory.Size },
+            pshufb_trunc_mem: struct { from: Memory.Size, to: Memory.Size },
+            pshufb_bswap_mem: struct { repeat: u4 = 1, size: Memory.Size, smear: u4 = 1 },
+            forward_bits,
+            reverse_bits,
             frame: FrameIndex,
             lazy_symbol: struct { kind: link.File.LazySymbol.Kind, ref: Select.Operand.Ref = .none },
             symbol: *const struct { lib: ?[]const u8 = null, name: []const u8 },
@@ -101115,10 +104280,13 @@ const Select = struct {
                         (try pt.floatValue(.f32, @as(f32, 0x1p64))).toIntern(),
                     } },
                 } }))), true },
-                .pshufb_cm_mem => |const_spec| {
+                .pshufb_trunc_mem => |trunc_spec| {
+                    const zcu = pt.zcu;
+                    assert(spec.type.isVector(zcu));
+                    assert(spec.type.childType(zcu).toIntern() == .u8_type);
                     var bytes: [16]u8 = @splat(1 << 7);
-                    const from_bytes: u32 = @intCast(@divExact(const_spec.from.bitSize(cg.target), 8));
-                    const to_bytes: u32 = @intCast(@divExact(const_spec.to.bitSize(cg.target), 8));
+                    const from_bytes: u32 = @intCast(@divExact(trunc_spec.from.bitSize(cg.target), 8));
+                    const to_bytes: u32 = @intCast(@divExact(trunc_spec.to.bitSize(cg.target), 8));
                     var from_index: u32 = 0;
                     var to_index: u32 = 0;
                     while (from_index < bytes.len) {
@@ -101126,10 +104294,43 @@ const Select = struct {
                         from_index += from_bytes;
                         to_index += to_bytes;
                     }
+                    const elems = bytes[0..spec.type.vectorLen(zcu)];
+                    return .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+                        .ty = spec.type.toIntern(),
+                        .storage = .{ .bytes = try zcu.intern_pool.getOrPutString(zcu.gpa, pt.tid, elems, .maybe_embedded_nulls) },
+                    } }))), true };
+                },
+                .pshufb_bswap_mem => |bswap_spec| {
                     const zcu = pt.zcu;
+                    assert(spec.type.isVector(zcu));
+                    assert(spec.type.childType(zcu).toIntern() == .u8_type);
+                    var bytes: [32]u8 = @splat(1 << 7);
+                    const len: usize = @intCast(@divExact(bswap_spec.size.bitSize(cg.target), 8));
+                    var to_index: u32 = 0;
+                    for (0..bswap_spec.repeat) |_| for (0..len) |from_index| {
+                        @memset(bytes[to_index..][0..bswap_spec.smear], @intCast(len - 1 - from_index));
+                        to_index += bswap_spec.smear;
+                    };
+                    const elems = bytes[0..spec.type.vectorLen(zcu)];
+                    return .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
+                        .ty = spec.type.toIntern(),
+                        .storage = .{ .bytes = try zcu.intern_pool.getOrPutString(zcu.gpa, pt.tid, elems, .maybe_embedded_nulls) },
+                    } }))), true };
+                },
+                .forward_bits, .reverse_bits => {
+                    const zcu = pt.zcu;
+                    assert(spec.type.isVector(zcu));
+                    assert(spec.type.childType(zcu).toIntern() == .u8_type);
+                    var bytes: [32]u8 = undefined;
+                    const elems = bytes[0..spec.type.vectorLen(zcu)];
+                    for (elems, 0..) |*elem, index| elem.* = switch (spec.kind) {
+                        else => unreachable,
+                        .forward_bits => @as(u8, 1 << 0) << @truncate(index),
+                        .reverse_bits => @as(u8, 1 << 7) >> @truncate(index),
+                    };
                     return .{ try cg.tempMemFromValue(.fromInterned(try pt.intern(.{ .aggregate = .{
-                        .ty = (try pt.vectorType(.{ .len = bytes.len, .child = .u8_type })).toIntern(),
-                        .storage = .{ .bytes = try zcu.intern_pool.getOrPutString(zcu.gpa, pt.tid, &bytes, .maybe_embedded_nulls) },
+                        .ty = spec.type.toIntern(),
+                        .storage = .{ .bytes = try zcu.intern_pool.getOrPutString(zcu.gpa, pt.tid, elems, .maybe_embedded_nulls) },
                     } }))), true };
                 },
                 .frame => |frame_index| .{ try cg.tempInit(spec.type, .{ .load_frame = .{ .index = frame_index } }), true },
@@ -102013,9 +105214,10 @@ const Select = struct {
                 .div_8_down => lhs >> 3 & @as(SignedImm, -1) << rhs,
                 .rem_8_mul => lhs & (@as(SignedImm, 1) << @intCast(@as(u3, 3) + rhs)) - 1,
             };
+            const disp: SignedImm = @bitCast(@as(UnsignedImm, @as(u32, @bitCast(op.imm))));
             return switch (op.flags.adjust.sign) {
-                .neg => op.imm - op_res,
-                .pos => op.imm + op_res,
+                .neg => disp - op_res,
+                .pos => disp + op_res,
             };
         }
 
test/behavior/x86_64/build.zig
@@ -55,6 +55,11 @@ pub fn build(b: *std.Build) void {
             .cpu_arch = .x86_64,
             .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64 },
         },
+        .{
+            .cpu_arch = .x86_64,
+            .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64 },
+            .cpu_features_add = std.Target.x86.featureSet(&.{ .adx, .gfni }),
+        },
         .{
             .cpu_arch = .x86_64,
             .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64 },
@@ -79,6 +84,11 @@ pub fn build(b: *std.Build) void {
             .cpu_arch = .x86_64,
             .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64_v2 },
         },
+        .{
+            .cpu_arch = .x86_64,
+            .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64_v2 },
+            .cpu_features_add = std.Target.x86.featureSet(&.{ .adx, .gfni }),
+        },
         .{
             .cpu_arch = .x86_64,
             .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64_v2 },
@@ -96,7 +106,7 @@ pub fn build(b: *std.Build) void {
         .{
             .cpu_arch = .x86_64,
             .cpu_model = .{ .explicit = &std.Target.x86.cpu.x86_64_v3 },
-            .cpu_features_add = std.Target.x86.featureSet(&.{.adx}),
+            .cpu_features_add = std.Target.x86.featureSet(&.{ .adx, .gfni }),
         },
         .{
             .cpu_arch = .x86_64,
test/behavior/x86_64/math.zig
@@ -672,6 +672,33 @@ fn unary(comptime op: anytype, comptime opts: struct {
             try testArgs(u257, 1 << 255);
             try testArgs(u257, 1 << 256);
 
+            try testArgs(i383, -1 << 382);
+            try testArgs(i383, -1);
+            try testArgs(i383, 0);
+            try testArgs(u383, 0);
+            try testArgs(u383, 1 << 0);
+            try testArgs(u383, 1 << 1);
+            try testArgs(u383, 1 << 381);
+            try testArgs(u383, 1 << 382);
+
+            try testArgs(i384, -1 << 383);
+            try testArgs(i384, -1);
+            try testArgs(i384, 0);
+            try testArgs(u384, 0);
+            try testArgs(u384, 1 << 0);
+            try testArgs(u384, 1 << 1);
+            try testArgs(u384, 1 << 382);
+            try testArgs(u384, 1 << 383);
+
+            try testArgs(i385, -1 << 384);
+            try testArgs(i385, -1);
+            try testArgs(i385, 0);
+            try testArgs(u385, 0);
+            try testArgs(u385, 1 << 0);
+            try testArgs(u385, 1 << 1);
+            try testArgs(u385, 1 << 383);
+            try testArgs(u385, 1 << 384);
+
             try testArgs(i511, -1 << 510);
             try testArgs(i511, -1);
             try testArgs(i511, 0);
@@ -19297,6 +19324,14 @@ test byteSwap {
     try test_byte_swap.testInts();
 }
 
+inline fn bitReverse(comptime Type: type, rhs: Type) @TypeOf(@bitReverse(rhs)) {
+    return @bitReverse(rhs);
+}
+test bitReverse {
+    const test_bit_reverse = unary(bitReverse, .{});
+    try test_bit_reverse.testInts();
+}
+
 inline fn sqrt(comptime Type: type, rhs: Type) @TypeOf(@sqrt(rhs)) {
     return @sqrt(rhs);
 }