authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-01-25 07:30:45-08:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2025-01-25 07:30:45-08:00
logd0d5ca2b6c8253c27e945ed8d973a90c28a3cbf5
treed89ef781d3e729f684fa4baf20452f037f66b772
parent8ba3812eeedec643dd045e0fecb8a6697f6253db
parentc7433212d1bf96adbfc6f3d706404436c0c98c20
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #22581 from jacobly0/x86_64-rewrite

x86_64: rewrite `@abs` on floats

21 files changed, 14909 insertions(+), 4705 deletions(-)

lib/std/zig/Zir.zig+23-1
......@@ -2128,7 +2128,7 @@ pub const Inst = struct {
21282128 ref_start_index = static_len,
21292129 _,
21302130
2131 pub const static_len = 70;
2131 pub const static_len = 92;
21322132
21332133 pub fn toRef(i: Index) Inst.Ref {
21342134 return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i));
......@@ -2211,6 +2211,28 @@ pub const Inst = struct {
22112211 single_const_pointer_to_comptime_int_type,
22122212 slice_const_u8_type,
22132213 slice_const_u8_sentinel_0_type,
2214 vector_16_i8_type,
2215 vector_32_i8_type,
2216 vector_16_u8_type,
2217 vector_32_u8_type,
2218 vector_8_i16_type,
2219 vector_16_i16_type,
2220 vector_8_u16_type,
2221 vector_16_u16_type,
2222 vector_4_i32_type,
2223 vector_8_i32_type,
2224 vector_4_u32_type,
2225 vector_8_u32_type,
2226 vector_2_i64_type,
2227 vector_4_i64_type,
2228 vector_2_u64_type,
2229 vector_4_u64_type,
2230 vector_4_f16_type,
2231 vector_8_f16_type,
2232 vector_4_f32_type,
2233 vector_8_f32_type,
2234 vector_2_f64_type,
2235 vector_4_f64_type,
22142236 optional_noreturn_type,
22152237 anyerror_void_error_union_type,
22162238 adhoc_inferred_error_set_type,
src/Air.zig+22
......@@ -984,6 +984,28 @@ pub const Inst = struct {
984984 single_const_pointer_to_comptime_int_type = @intFromEnum(InternPool.Index.single_const_pointer_to_comptime_int_type),
985985 slice_const_u8_type = @intFromEnum(InternPool.Index.slice_const_u8_type),
986986 slice_const_u8_sentinel_0_type = @intFromEnum(InternPool.Index.slice_const_u8_sentinel_0_type),
987 vector_16_i8_type = @intFromEnum(InternPool.Index.vector_16_i8_type),
988 vector_32_i8_type = @intFromEnum(InternPool.Index.vector_32_i8_type),
989 vector_16_u8_type = @intFromEnum(InternPool.Index.vector_16_u8_type),
990 vector_32_u8_type = @intFromEnum(InternPool.Index.vector_32_u8_type),
991 vector_8_i16_type = @intFromEnum(InternPool.Index.vector_8_i16_type),
992 vector_16_i16_type = @intFromEnum(InternPool.Index.vector_16_i16_type),
993 vector_8_u16_type = @intFromEnum(InternPool.Index.vector_8_u16_type),
994 vector_16_u16_type = @intFromEnum(InternPool.Index.vector_16_u16_type),
995 vector_4_i32_type = @intFromEnum(InternPool.Index.vector_4_i32_type),
996 vector_8_i32_type = @intFromEnum(InternPool.Index.vector_8_i32_type),
997 vector_4_u32_type = @intFromEnum(InternPool.Index.vector_4_u32_type),
998 vector_8_u32_type = @intFromEnum(InternPool.Index.vector_8_u32_type),
999 vector_2_i64_type = @intFromEnum(InternPool.Index.vector_2_i64_type),
1000 vector_4_i64_type = @intFromEnum(InternPool.Index.vector_4_i64_type),
1001 vector_2_u64_type = @intFromEnum(InternPool.Index.vector_2_u64_type),
1002 vector_4_u64_type = @intFromEnum(InternPool.Index.vector_4_u64_type),
1003 vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type),
1004 vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type),
1005 vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type),
1006 vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type),
1007 vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type),
1008 vector_4_f64_type = @intFromEnum(InternPool.Index.vector_4_f64_type),
9871009 optional_noreturn_type = @intFromEnum(InternPool.Index.optional_noreturn_type),
9881010 anyerror_void_error_union_type = @intFromEnum(InternPool.Index.anyerror_void_error_union_type),
9891011 adhoc_inferred_error_set_type = @intFromEnum(InternPool.Index.adhoc_inferred_error_set_type),
src/InternPool.zig+116
......@@ -4559,12 +4559,37 @@ pub const Index = enum(u32) {
45594559 null_type,
45604560 undefined_type,
45614561 enum_literal_type,
4562
45624563 manyptr_u8_type,
45634564 manyptr_const_u8_type,
45644565 manyptr_const_u8_sentinel_0_type,
45654566 single_const_pointer_to_comptime_int_type,
45664567 slice_const_u8_type,
45674568 slice_const_u8_sentinel_0_type,
4569
4570 vector_16_i8_type,
4571 vector_32_i8_type,
4572 vector_16_u8_type,
4573 vector_32_u8_type,
4574 vector_8_i16_type,
4575 vector_16_i16_type,
4576 vector_8_u16_type,
4577 vector_16_u16_type,
4578 vector_4_i32_type,
4579 vector_8_i32_type,
4580 vector_4_u32_type,
4581 vector_8_u32_type,
4582 vector_2_i64_type,
4583 vector_4_i64_type,
4584 vector_2_u64_type,
4585 vector_4_u64_type,
4586 vector_4_f16_type,
4587 vector_8_f16_type,
4588 vector_4_f32_type,
4589 vector_8_f32_type,
4590 vector_2_f64_type,
4591 vector_4_f64_type,
4592
45684593 optional_noreturn_type,
45694594 anyerror_void_error_union_type,
45704595 /// Used for the inferred error set of inline/comptime function calls.
......@@ -5055,6 +5080,51 @@ pub const static_keys = [_]Key{
50555080 },
50565081 } },
50575082
5083 // @Vector(16, i8)
5084 .{ .vector_type = .{ .len = 16, .child = .i8_type } },
5085 // @Vector(32, i8)
5086 .{ .vector_type = .{ .len = 32, .child = .i8_type } },
5087 // @Vector(16, u8)
5088 .{ .vector_type = .{ .len = 16, .child = .u8_type } },
5089 // @Vector(32, u8)
5090 .{ .vector_type = .{ .len = 32, .child = .u8_type } },
5091 // @Vector(8, i16)
5092 .{ .vector_type = .{ .len = 8, .child = .i16_type } },
5093 // @Vector(16, i16)
5094 .{ .vector_type = .{ .len = 16, .child = .i16_type } },
5095 // @Vector(8, u16)
5096 .{ .vector_type = .{ .len = 8, .child = .u16_type } },
5097 // @Vector(16, u16)
5098 .{ .vector_type = .{ .len = 16, .child = .u16_type } },
5099 // @Vector(4, i32)
5100 .{ .vector_type = .{ .len = 4, .child = .i32_type } },
5101 // @Vector(8, i32)
5102 .{ .vector_type = .{ .len = 8, .child = .i32_type } },
5103 // @Vector(4, u32)
5104 .{ .vector_type = .{ .len = 4, .child = .u32_type } },
5105 // @Vector(8, u32)
5106 .{ .vector_type = .{ .len = 8, .child = .u32_type } },
5107 // @Vector(2, i64)
5108 .{ .vector_type = .{ .len = 2, .child = .i64_type } },
5109 // @Vector(4, i64)
5110 .{ .vector_type = .{ .len = 4, .child = .i64_type } },
5111 // @Vector(2, u64)
5112 .{ .vector_type = .{ .len = 2, .child = .u64_type } },
5113 // @Vector(8, u64)
5114 .{ .vector_type = .{ .len = 4, .child = .u64_type } },
5115 // @Vector(4, f16)
5116 .{ .vector_type = .{ .len = 4, .child = .f16_type } },
5117 // @Vector(8, f16)
5118 .{ .vector_type = .{ .len = 8, .child = .f16_type } },
5119 // @Vector(4, f32)
5120 .{ .vector_type = .{ .len = 4, .child = .f32_type } },
5121 // @Vector(8, f32)
5122 .{ .vector_type = .{ .len = 8, .child = .f32_type } },
5123 // @Vector(2, f64)
5124 .{ .vector_type = .{ .len = 2, .child = .f64_type } },
5125 // @Vector(4, f64)
5126 .{ .vector_type = .{ .len = 4, .child = .f64_type } },
5127
50585128 // ?noreturn
50595129 .{ .opt_type = .noreturn_type },
50605130
......@@ -11681,6 +11751,28 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index {
1168111751 .single_const_pointer_to_comptime_int_type,
1168211752 .slice_const_u8_type,
1168311753 .slice_const_u8_sentinel_0_type,
11754 .vector_16_i8_type,
11755 .vector_32_i8_type,
11756 .vector_16_u8_type,
11757 .vector_32_u8_type,
11758 .vector_8_i16_type,
11759 .vector_16_i16_type,
11760 .vector_8_u16_type,
11761 .vector_16_u16_type,
11762 .vector_4_i32_type,
11763 .vector_8_i32_type,
11764 .vector_4_u32_type,
11765 .vector_8_u32_type,
11766 .vector_2_i64_type,
11767 .vector_4_i64_type,
11768 .vector_2_u64_type,
11769 .vector_4_u64_type,
11770 .vector_4_f16_type,
11771 .vector_8_f16_type,
11772 .vector_4_f32_type,
11773 .vector_8_f32_type,
11774 .vector_2_f64_type,
11775 .vector_4_f64_type,
1168411776 .optional_noreturn_type,
1168511777 .anyerror_void_error_union_type,
1168611778 .adhoc_inferred_error_set_type,
......@@ -11998,6 +12090,30 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId {
1199812090 .slice_const_u8_sentinel_0_type,
1199912091 => .pointer,
1200012092
12093 .vector_16_i8_type,
12094 .vector_32_i8_type,
12095 .vector_16_u8_type,
12096 .vector_32_u8_type,
12097 .vector_8_i16_type,
12098 .vector_16_i16_type,
12099 .vector_8_u16_type,
12100 .vector_16_u16_type,
12101 .vector_4_i32_type,
12102 .vector_8_i32_type,
12103 .vector_4_u32_type,
12104 .vector_8_u32_type,
12105 .vector_2_i64_type,
12106 .vector_4_i64_type,
12107 .vector_2_u64_type,
12108 .vector_4_u64_type,
12109 .vector_4_f16_type,
12110 .vector_8_f16_type,
12111 .vector_4_f32_type,
12112 .vector_8_f32_type,
12113 .vector_2_f64_type,
12114 .vector_4_f64_type,
12115 => .vector,
12116
1200112117 .optional_noreturn_type => .optional,
1200212118 .anyerror_void_error_union_type => .error_union,
1200312119 .empty_tuple_type => .@"struct",
src/Sema.zig+22
......@@ -36606,6 +36606,28 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value {
3660636606 .single_const_pointer_to_comptime_int_type,
3660736607 .slice_const_u8_type,
3660836608 .slice_const_u8_sentinel_0_type,
36609 .vector_16_i8_type,
36610 .vector_32_i8_type,
36611 .vector_16_u8_type,
36612 .vector_32_u8_type,
36613 .vector_8_i16_type,
36614 .vector_16_i16_type,
36615 .vector_8_u16_type,
36616 .vector_16_u16_type,
36617 .vector_4_i32_type,
36618 .vector_8_i32_type,
36619 .vector_4_u32_type,
36620 .vector_8_u32_type,
36621 .vector_2_i64_type,
36622 .vector_4_i64_type,
36623 .vector_2_u64_type,
36624 .vector_4_u64_type,
36625 .vector_4_f16_type,
36626 .vector_8_f16_type,
36627 .vector_4_f32_type,
36628 .vector_8_f32_type,
36629 .vector_2_f64_type,
36630 .vector_4_f64_type,
3660936631 .anyerror_void_error_union_type,
3661036632 => null,
3661136633 .void_type => Value.void,
src/Type.zig+25-1
......@@ -4174,7 +4174,31 @@ pub const single_const_pointer_to_comptime_int: Type = .{
41744174 .ip_index = .single_const_pointer_to_comptime_int_type,
41754175};
41764176pub const slice_const_u8_sentinel_0: Type = .{ .ip_index = .slice_const_u8_sentinel_0_type };
4177pub const empty_tuple_type: Type = .{ .ip_index = .empty_tuple_type };
4177
4178pub const vector_16_i8: Type = .{ .ip_index = .vector_16_i8_type };
4179pub const vector_32_i8: Type = .{ .ip_index = .vector_32_i8_type };
4180pub const vector_16_u8: Type = .{ .ip_index = .vector_16_u8_type };
4181pub const vector_32_u8: Type = .{ .ip_index = .vector_32_u8_type };
4182pub const vector_8_i16: Type = .{ .ip_index = .vector_8_i16_type };
4183pub const vector_16_i16: Type = .{ .ip_index = .vector_16_i16_type };
4184pub const vector_8_u16: Type = .{ .ip_index = .vector_8_u16_type };
4185pub const vector_16_u16: Type = .{ .ip_index = .vector_16_u16_type };
4186pub const vector_4_i32: Type = .{ .ip_index = .vector_4_i32_type };
4187pub const vector_8_i32: Type = .{ .ip_index = .vector_8_i32_type };
4188pub const vector_4_u32: Type = .{ .ip_index = .vector_4_u32_type };
4189pub const vector_8_u32: Type = .{ .ip_index = .vector_8_u32_type };
4190pub const vector_2_i64: Type = .{ .ip_index = .vector_2_i64_type };
4191pub const vector_4_i64: Type = .{ .ip_index = .vector_4_i64_type };
4192pub const vector_2_u64: Type = .{ .ip_index = .vector_2_u64_type };
4193pub const vector_4_u64: Type = .{ .ip_index = .vector_4_u64_type };
4194pub const vector_4_f16: Type = .{ .ip_index = .vector_4_f16_type };
4195pub const vector_8_f16: Type = .{ .ip_index = .vector_8_f16_type };
4196pub const vector_4_f32: Type = .{ .ip_index = .vector_4_f32_type };
4197pub const vector_8_f32: Type = .{ .ip_index = .vector_8_f32_type };
4198pub const vector_2_f64: Type = .{ .ip_index = .vector_2_f64_type };
4199pub const vector_4_f64: Type = .{ .ip_index = .vector_4_f64_type };
4200
4201pub const empty_tuple: Type = .{ .ip_index = .empty_tuple_type };
41784202
41794203pub const generic_poison: Type = .{ .ip_index = .generic_poison_type };
41804204
src/arch/x86_64/CodeGen.zig+13493-4385
......@@ -150,7 +150,7 @@ const Owner = union(enum) {
150150};
151151
152152const MaskKind = enum(u1) { sign, all };
153const MaskInfo = packed struct { kind: MaskKind, inverted: bool, scalar: Memory.Size };
153const MaskInfo = packed struct { kind: MaskKind, inverted: bool = false, scalar: Memory.Size };
154154
155155pub const MCValue = union(enum) {
156156 /// No runtime bits. `void` types, empty structs, u0, enums with 1 tag, etc.
......@@ -2393,7 +2393,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
23932393}
23942394
23952395fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
2396 @setEvalBranchQuota(1_800);
2396 @setEvalBranchQuota(3_400);
23972397 const pt = cg.pt;
23982398 const zcu = pt.zcu;
23992399 const ip = &zcu.intern_pool;
......@@ -2433,17 +2433,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
24332433 .add_wrap,
24342434 .sub,
24352435 .sub_wrap,
2436 .min,
2437 .max,
24382436 => |air_tag| try cg.airBinOp(inst, air_tag),
24392437
24402438 .shr, .shr_exact => try cg.airShlShrBinOp(inst),
24412439 .shl, .shl_exact => try cg.airShlShrBinOp(inst),
24422440
2443 .mul => try cg.airMulDivBinOp(inst),
2444 .mul_wrap => try cg.airMulDivBinOp(inst),
2445 .rem => try cg.airMulDivBinOp(inst),
2446 .mod => try cg.airMulDivBinOp(inst),
2441 .mul,
2442 .mul_wrap,
2443 .rem,
2444 .mod,
2445 .div_float,
2446 .div_trunc,
2447 .div_floor,
2448 .div_exact,
2449 => |air_tag| try cg.airMulDivBinOp(inst, air_tag),
24472450
24482451 .add_sat => try cg.airAddSat(inst),
24492452 .sub_sat => try cg.airSubSat(inst),
......@@ -2465,15 +2468,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
24652468 .ceil => try cg.airRound(inst, .{ .mode = .up, .precision = .inexact }),
24662469 .trunc_float => try cg.airRound(inst, .{ .mode = .zero, .precision = .inexact }),
24672470 .sqrt => try cg.airSqrt(inst),
2468 .neg => try cg.airFloatSign(inst),
2471 .neg => |air_tag| try cg.airFloatSign(inst, air_tag),
24692472
24702473 .add_with_overflow => try cg.airAddSubWithOverflow(inst),
24712474 .sub_with_overflow => try cg.airAddSubWithOverflow(inst),
24722475 .mul_with_overflow => try cg.airMulWithOverflow(inst),
24732476 .shl_with_overflow => try cg.airShlWithOverflow(inst),
24742477
2475 .div_float, .div_trunc, .div_floor, .div_exact => try cg.airMulDivBinOp(inst),
2476
24772478 .cmp_lt_errors_len => try cg.airCmpLtErrorsLen(inst),
24782479
24792480 .bitcast => try cg.airBitCast(inst),
......@@ -2528,19 +2529,19 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
25282529 .sub_safe,
25292530 .mul_safe,
25302531 => return cg.fail("TODO implement safety_checked_instructions", .{}),
2531 .add_optimized,
2532 .sub_optimized,
2533 .mul_optimized,
2534 .div_float_optimized,
2535 .div_trunc_optimized,
2536 .div_floor_optimized,
2537 .div_exact_optimized,
2538 .rem_optimized,
2539 .mod_optimized,
2540 .neg_optimized,
2541 .reduce_optimized,
2542 .int_from_float_optimized,
2543 => return cg.fail("TODO implement optimized float mode", .{}),
2532
2533 .add_optimized => try cg.airBinOp(inst, .add),
2534 .sub_optimized => try cg.airBinOp(inst, .sub),
2535 .mul_optimized => try cg.airBinOp(inst, .mul),
2536 .div_float_optimized => try cg.airMulDivBinOp(inst, .div_float),
2537 .div_trunc_optimized => try cg.airMulDivBinOp(inst, .div_trunc),
2538 .div_floor_optimized => try cg.airMulDivBinOp(inst, .div_floor),
2539 .div_exact_optimized => try cg.airMulDivBinOp(inst, .div_exact),
2540 .rem_optimized => try cg.airMulDivBinOp(inst, .rem),
2541 .mod_optimized => try cg.airMulDivBinOp(inst, .mod),
2542 .neg_optimized => try cg.airFloatSign(inst, .neg),
2543 .reduce_optimized => try cg.airReduce(inst),
2544 .int_from_float_optimized => try cg.airIntFromFloat(inst),
25442545
25452546 .arg => try cg.airDbgArg(inst),
25462547 .ptr_add => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else {
......@@ -2657,10 +2658,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
26572658 } else { // hack around Sema OPV bugs
26582659 res[0] = ops[0];
26592660 }
2660 for (ops) |op| for (res) |r| {
2661 if (op.index == r.index) break;
2662 } else try op.die(cg);
2663 try res[0].moveTo(inst, cg);
2661 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
26642662 },
26652663 .ptr_sub => |air_tag| if (use_old) try cg.airPtrArithmetic(inst, air_tag) else {
26662664 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
......@@ -2792,673 +2790,451 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
27922790 // hack around Sema OPV bugs
27932791 res[0] = ops[0];
27942792 }
2795 for (ops) |op| for (res) |r| {
2796 if (op.index == r.index) break;
2797 } else try op.die(cg);
2798 try res[0].moveTo(inst, cg);
2799 },
2800 .alloc => if (use_old) try cg.airAlloc(inst) else {
2801 const ty = air_datas[@intFromEnum(inst)].ty;
2802 var slot = try cg.tempInit(ty, .{ .lea_frame = .{
2803 .index = try cg.allocMemPtr(inst),
2804 } });
2805 try slot.moveTo(inst, cg);
2806 },
2807 .inferred_alloc, .inferred_alloc_comptime => unreachable,
2808 .ret_ptr => if (use_old) try cg.airRetPtr(inst) else {
2809 const ty = air_datas[@intFromEnum(inst)].ty;
2810 var slot = switch (cg.ret_mcv.long) {
2811 else => unreachable,
2812 .none => try cg.tempInit(ty, .{ .lea_frame = .{
2813 .index = try cg.allocMemPtr(inst),
2814 } }),
2815 .load_frame => slot: {
2816 var slot = try cg.tempInit(ty, cg.ret_mcv.long);
2817 try slot.toOffset(cg.ret_mcv.short.indirect.off, cg);
2818 break :slot slot;
2819 },
2820 };
2821 try slot.moveTo(inst, cg);
2793 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
28222794 },
2823 .assembly => try cg.airAsm(inst),
2824 .bit_and, .bit_or, .xor, .bool_and, .bool_or => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else {
2795 .max => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: {
28252796 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
2797 if (cg.typeOf(bin_op.lhs).scalarType(zcu).isRuntimeFloat()) break :fallback try cg.airBinOp(inst, air_tag);
28262798 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
28272799 var res: [1]Temp = undefined;
2828 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, switch (@as(Mir.Inst.Tag, switch (air_tag) {
2829 else => unreachable,
2830 .bit_and, .bool_and => .@"and",
2831 .bit_or, .bool_or => .@"or",
2832 .xor => .xor,
2833 })) {
2834 else => unreachable,
2835 inline .@"and", .@"or", .xor => |mir_tag| comptime &.{ .{
2836 .src_constraints = .{ .{ .size = .byte }, .{ .size = .byte } },
2837 .patterns = &.{
2838 .{ .src = .{ .mut_mem, .imm8 } },
2839 .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } },
2840 .{ .src = .{ .to_mut_gpr, .imm8 } },
2841 .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } },
2842 .{ .src = .{ .mut_mem, .to_gpr } },
2843 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
2844 .{ .src = .{ .to_mut_gpr, .mem } },
2845 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2846 .{ .src = .{ .to_mut_gpr, .to_gpr } },
2847 },
2848 .dst_temps = .{.{ .ref = .src0 }},
2849 .clobbers = .{ .eflags = true },
2850 .each = .{ .once = &.{
2851 .{ ._, ._, mir_tag, .dst0b, .src1b, ._, ._ },
2852 } },
2853 }, .{
2854 .src_constraints = .{ .{ .size = .word }, .{ .size = .word } },
2855 .patterns = &.{
2856 .{ .src = .{ .mut_mem, .imm16 } },
2857 .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } },
2858 .{ .src = .{ .to_mut_gpr, .imm16 } },
2859 .{ .src = .{ .imm16, .to_mut_gpr }, .commute = .{ 0, 1 } },
2860 .{ .src = .{ .mut_mem, .to_gpr } },
2861 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
2862 .{ .src = .{ .to_mut_gpr, .mem } },
2863 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2864 .{ .src = .{ .to_mut_gpr, .to_gpr } },
2865 },
2866 .dst_temps = .{.{ .ref = .src0 }},
2867 .clobbers = .{ .eflags = true },
2868 .each = .{ .once = &.{
2869 .{ ._, ._, mir_tag, .dst0w, .src1w, ._, ._ },
2870 } },
2871 }, .{
2872 .src_constraints = .{ .{ .size = .dword }, .{ .size = .dword } },
2873 .patterns = &.{
2874 .{ .src = .{ .mut_mem, .imm32 } },
2875 .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } },
2876 .{ .src = .{ .to_mut_gpr, .imm32 } },
2877 .{ .src = .{ .imm32, .to_mut_gpr }, .commute = .{ 0, 1 } },
2878 .{ .src = .{ .mut_mem, .to_gpr } },
2879 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
2880 .{ .src = .{ .to_mut_gpr, .mem } },
2881 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2882 .{ .src = .{ .to_mut_gpr, .to_gpr } },
2883 },
2884 .dst_temps = .{.{ .ref = .src0 }},
2885 .clobbers = .{ .eflags = true },
2886 .each = .{ .once = &.{
2887 .{ ._, ._, mir_tag, .dst0d, .src1d, ._, ._ },
2888 } },
2889 }, .{
2890 .required_features = .{ .@"64bit", null, null, null },
2891 .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword } },
2892 .patterns = &.{
2893 .{ .src = .{ .mut_mem, .simm32 } },
2894 .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } },
2895 .{ .src = .{ .to_mut_gpr, .simm32 } },
2896 .{ .src = .{ .simm32, .to_mut_gpr }, .commute = .{ 0, 1 } },
2897 .{ .src = .{ .mut_mem, .to_gpr } },
2898 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
2899 .{ .src = .{ .to_mut_gpr, .mem } },
2900 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2901 .{ .src = .{ .to_mut_gpr, .to_gpr } },
2902 },
2903 .dst_temps = .{.{ .ref = .src0 }},
2904 .clobbers = .{ .eflags = true },
2905 .each = .{ .once = &.{
2906 .{ ._, ._, mir_tag, .dst0q, .src1q, ._, ._ },
2907 } },
2908 }, .{
2909 .required_features = .{ .mmx, null, null, null },
2910 .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword } },
2911 .patterns = &.{
2912 .{ .src = .{ .to_mut_mm, .mem } },
2913 .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } },
2914 .{ .src = .{ .to_mut_mm, .to_mm } },
2915 },
2916 .dst_temps = .{.{ .ref = .src0 }},
2917 .each = .{ .once = &.{
2918 .{ ._, .p_, mir_tag, .dst0q, .src1q, ._, ._ },
2919 } },
2920 }, .{
2921 .required_features = .{ .avx, null, null, null },
2922 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } },
2923 .patterns = &.{
2924 .{ .src = .{ .to_xmm, .mem } },
2925 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
2926 .{ .src = .{ .to_xmm, .to_xmm } },
2927 },
2928 .dst_temps = .{.{ .rc = .sse }},
2929 .each = .{ .once = &.{
2930 .{ ._, .vp_, mir_tag, .dst0x, .src0x, .src1x, ._ },
2931 } },
2932 }, .{
2933 .required_features = .{ .sse2, null, null, null },
2934 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } },
2935 .patterns = &.{
2936 .{ .src = .{ .to_mut_xmm, .mem } },
2937 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
2938 .{ .src = .{ .to_mut_xmm, .to_xmm } },
2939 },
2940 .dst_temps = .{.{ .ref = .src0 }},
2941 .each = .{ .once = &.{
2942 .{ ._, .p_, mir_tag, .dst0x, .src1x, ._, ._ },
2943 } },
2944 }, .{
2945 .required_features = .{ .sse, null, null, null },
2946 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } },
2947 .patterns = &.{
2948 .{ .src = .{ .to_mut_xmm, .mem } },
2949 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
2950 .{ .src = .{ .to_mut_xmm, .to_xmm } },
2951 },
2952 .dst_temps = .{.{ .ref = .src0 }},
2953 .each = .{ .once = &.{
2954 .{ ._, ._ps, mir_tag, .dst0x, .src1x, ._, ._ },
2955 } },
2956 }, .{
2957 .required_features = .{ .avx2, null, null, null },
2958 .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword } },
2959 .patterns = &.{
2960 .{ .src = .{ .to_ymm, .mem } },
2961 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
2962 .{ .src = .{ .to_ymm, .to_ymm } },
2963 },
2964 .dst_temps = .{.{ .rc = .sse }},
2965 .each = .{ .once = &.{
2966 .{ ._, .vp_, mir_tag, .dst0y, .src0y, .src1y, ._ },
2967 } },
2968 }, .{
2969 .required_features = .{ .avx, null, null, null },
2970 .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword } },
2971 .patterns = &.{
2972 .{ .src = .{ .to_ymm, .mem } },
2973 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
2974 .{ .src = .{ .to_ymm, .to_ymm } },
2975 },
2976 .dst_temps = .{.{ .rc = .sse }},
2977 .each = .{ .once = &.{
2978 .{ ._, .v_pd, mir_tag, .dst0y, .src0y, .src1y, ._ },
2979 } },
2980 }, .{
2981 .required_features = .{ .avx2, null, null, null },
2982 .src_constraints = .{ .{ .multiple_size = .yword }, .{ .multiple_size = .yword } },
2983 .patterns = &.{
2984 .{ .src = .{ .to_mem, .to_mem } },
2985 },
2986 .extra_temps = .{
2987 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
2988 .{ .kind = .{ .rc = .sse } },
2989 .unused,
2990 .unused,
2991 .unused,
2992 .unused,
2993 },
2994 .dst_temps = .{.mem},
2995 .clobbers = .{ .eflags = true },
2996 .each = .{ .once = &.{
2997 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
2998 .{ .@"0:", .v_dqu, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
2999 .{ ._, .vp_, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
3000 .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
3001 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
3002 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3003 } },
3004 }, .{
3005 .required_features = .{ .avx, null, null, null },
3006 .src_constraints = .{ .{ .multiple_size = .yword }, .{ .multiple_size = .yword } },
3007 .patterns = &.{
3008 .{ .src = .{ .to_mem, .to_mem } },
3009 },
3010 .extra_temps = .{
3011 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3012 .{ .kind = .{ .rc = .sse } },
3013 .unused,
3014 .unused,
3015 .unused,
3016 .unused,
3017 },
3018 .dst_temps = .{.mem},
3019 .clobbers = .{ .eflags = true },
3020 .each = .{ .once = &.{
3021 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3022 .{ .@"0:", .v_pd, .movu, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
3023 .{ ._, .v_pd, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
3024 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
3025 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
3026 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3027 } },
3028 }, .{
3029 .required_features = .{ .avx, null, null, null },
3030 .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } },
3031 .patterns = &.{
3032 .{ .src = .{ .to_mem, .to_mem } },
3033 },
3034 .extra_temps = .{
3035 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3036 .{ .kind = .{ .rc = .sse } },
3037 .unused,
3038 .unused,
3039 .unused,
3040 .unused,
3041 },
3042 .dst_temps = .{.mem},
3043 .clobbers = .{ .eflags = true },
3044 .each = .{ .once = &.{
3045 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3046 .{ .@"0:", .v_dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3047 .{ ._, .vp_, mir_tag, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
3048 .{ ._, .v_dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
3049 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
3050 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3051 } },
3052 }, .{
3053 .required_features = .{ .sse2, null, null, null },
3054 .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } },
3055 .patterns = &.{
3056 .{ .src = .{ .to_mem, .to_mem } },
3057 },
3058 .extra_temps = .{
3059 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3060 .{ .kind = .{ .rc = .sse } },
3061 .unused,
3062 .unused,
3063 .unused,
3064 .unused,
3065 },
3066 .dst_temps = .{.mem},
3067 .clobbers = .{ .eflags = true },
3068 .each = .{ .once = &.{
3069 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3070 .{ .@"0:", ._dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3071 .{ ._, .p_, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
3072 .{ ._, ._dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
3073 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
3074 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3075 } },
3076 }, .{
3077 .required_features = .{ .sse, null, null, null },
3078 .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } },
3079 .patterns = &.{
3080 .{ .src = .{ .to_mem, .to_mem } },
3081 },
3082 .extra_temps = .{
3083 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3084 .{ .kind = .{ .rc = .sse } },
3085 .unused,
3086 .unused,
3087 .unused,
3088 .unused,
3089 },
3090 .dst_temps = .{.mem},
3091 .clobbers = .{ .eflags = true },
3092 .each = .{ .once = &.{
3093 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3094 .{ .@"0:", ._ps, .movu, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3095 .{ ._, ._ps, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
3096 .{ ._, ._ps, .movu, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
3097 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
3098 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3099 } },
3100 }, .{
3101 .required_features = .{ .mmx, null, null, null },
3102 .src_constraints = .{ .{ .multiple_size = .qword }, .{ .multiple_size = .qword } },
3103 .patterns = &.{
3104 .{ .src = .{ .to_mem, .to_mem } },
3105 },
3106 .extra_temps = .{
3107 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3108 .{ .kind = .{ .rc = .mmx } },
3109 .unused,
3110 .unused,
3111 .unused,
3112 .unused,
3113 },
3114 .dst_temps = .{.mem},
3115 .clobbers = .{ .eflags = true },
3116 .each = .{ .once = &.{
3117 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3118 .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
3119 .{ ._, .p_, mir_tag, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
3120 .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
3121 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3122 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3123 } },
3124 }, .{
3125 .src_constraints = .{ .{ .multiple_size = .qword }, .{ .multiple_size = .qword } },
3126 .patterns = &.{
3127 .{ .src = .{ .to_mem, .to_mem } },
3128 },
3129 .extra_temps = .{
3130 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3131 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
3132 .unused,
3133 .unused,
3134 .unused,
3135 .unused,
3136 },
3137 .dst_temps = .{.mem},
3138 .clobbers = .{ .eflags = true },
3139 .each = .{ .once = &.{
3140 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3141 .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
3142 .{ ._, ._, mir_tag, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
3143 .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
3144 .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
3145 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3146 } },
2800 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
2801 .required_features = .{ .cmov, null, null, null },
2802 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },
2803 .patterns = &.{
2804 .{ .src = .{ .to_mut_gpr, .to_gpr } },
2805 },
2806 .dst_temps = .{.{ .ref = .src0 }},
2807 .clobbers = .{ .eflags = true },
2808 .each = .{ .once = &.{
2809 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
2810 .{ ._, ._l, .cmov, .dst0d, .src1d, ._, ._ },
31472811 } },
3148 }) catch |err| switch (err) {
3149 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
3150 @tagName(air_tag),
3151 cg.typeOf(bin_op.lhs).fmt(pt),
3152 ops[0].tracking(cg),
3153 ops[1].tracking(cg),
3154 }),
3155 else => |e| return e,
3156 };
3157 for (ops) |op| for (res) |r| {
3158 if (op.index == r.index) break;
3159 } else try op.die(cg);
3160 try res[0].moveTo(inst, cg);
3161 },
3162 .not => |air_tag| if (use_old) try cg.airUnOp(inst, air_tag) else {
3163 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
3164 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
3165 var res: [1]Temp = undefined;
3166 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
3167 .src_constraints = .{ .{ .signed_or_exact_int = .byte }, .any },
2812 }, .{
2813 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },
31682814 .patterns = &.{
3169 .{ .src = .{ .mut_mem, .none } },
3170 .{ .src = .{ .to_mut_gpr, .none } },
2815 .{ .src = .{ .to_mut_gpr, .mem } },
2816 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2817 .{ .src = .{ .to_mut_gpr, .to_gpr } },
31712818 },
31722819 .dst_temps = .{.{ .ref = .src0 }},
2820 .clobbers = .{ .eflags = true },
31732821 .each = .{ .once = &.{
3174 .{ ._, ._, .not, .dst0b, ._, ._, ._ },
2822 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
2823 .{ ._, ._nl, .j, .@"0f", ._, ._, ._ },
2824 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },
31752825 } },
31762826 }, .{
3177 .src_constraints = .{ .{ .unsigned_int = .byte }, .any },
2827 .required_features = .{ .cmov, null, null, null },
2828 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },
31782829 .patterns = &.{
3179 .{ .src = .{ .mut_mem, .none } },
3180 .{ .src = .{ .to_mut_gpr, .none } },
2830 .{ .src = .{ .to_mut_gpr, .to_gpr } },
31812831 },
31822832 .dst_temps = .{.{ .ref = .src0 }},
31832833 .clobbers = .{ .eflags = true },
31842834 .each = .{ .once = &.{
3185 .{ ._, ._, .xor, .dst0b, .sa(.src0, .add_umax), ._, ._ },
2835 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
2836 .{ ._, ._b, .cmov, .dst0d, .src1d, ._, ._ },
31862837 } },
31872838 }, .{
3188 .src_constraints = .{ .{ .signed_or_exact_int = .word }, .any },
2839 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },
31892840 .patterns = &.{
3190 .{ .src = .{ .mut_mem, .none } },
3191 .{ .src = .{ .to_mut_gpr, .none } },
2841 .{ .src = .{ .to_mut_gpr, .mem } },
2842 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2843 .{ .src = .{ .to_mut_gpr, .to_gpr } },
31922844 },
31932845 .dst_temps = .{.{ .ref = .src0 }},
2846 .clobbers = .{ .eflags = true },
31942847 .each = .{ .once = &.{
3195 .{ ._, ._, .not, .dst0w, ._, ._, ._ },
2848 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
2849 .{ ._, ._nb, .j, .@"0f", ._, ._, ._ },
2850 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },
31962851 } },
31972852 }, .{
3198 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
2853 .required_features = .{ .cmov, null, null, null },
2854 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },
31992855 .patterns = &.{
3200 .{ .src = .{ .mut_mem, .none } },
3201 .{ .src = .{ .to_mut_gpr, .none } },
2856 .{ .src = .{ .to_mut_gpr, .mem } },
2857 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2858 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32022859 },
32032860 .dst_temps = .{.{ .ref = .src0 }},
32042861 .clobbers = .{ .eflags = true },
32052862 .each = .{ .once = &.{
3206 .{ ._, ._, .xor, .dst0w, .sa(.src0, .add_umax), ._, ._ },
2863 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
2864 .{ ._, ._l, .cmov, .dst0w, .src1w, ._, ._ },
32072865 } },
32082866 }, .{
3209 .src_constraints = .{ .{ .signed_or_exact_int = .dword }, .any },
2867 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },
32102868 .patterns = &.{
3211 .{ .src = .{ .mut_mem, .none } },
3212 .{ .src = .{ .to_mut_gpr, .none } },
2869 .{ .src = .{ .to_mut_gpr, .mem } },
2870 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2871 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32132872 },
32142873 .dst_temps = .{.{ .ref = .src0 }},
2874 .clobbers = .{ .eflags = true },
32152875 .each = .{ .once = &.{
3216 .{ ._, ._, .not, .dst0d, ._, ._, ._ },
2876 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
2877 .{ ._, ._nl, .j, .@"0f", ._, ._, ._ },
2878 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },
32172879 } },
32182880 }, .{
3219 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
2881 .required_features = .{ .cmov, null, null, null },
2882 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },
32202883 .patterns = &.{
3221 .{ .src = .{ .mut_mem, .none } },
3222 .{ .src = .{ .to_mut_gpr, .none } },
2884 .{ .src = .{ .to_mut_gpr, .mem } },
2885 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2886 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32232887 },
32242888 .dst_temps = .{.{ .ref = .src0 }},
32252889 .clobbers = .{ .eflags = true },
32262890 .each = .{ .once = &.{
3227 .{ ._, ._, .xor, .dst0d, .sa(.src0, .add_umax), ._, ._ },
2891 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
2892 .{ ._, ._b, .cmov, .dst0w, .src1w, ._, ._ },
32282893 } },
32292894 }, .{
3230 .required_features = .{ .@"64bit", null, null, null },
3231 .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any },
2895 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },
32322896 .patterns = &.{
3233 .{ .src = .{ .mut_mem, .none } },
3234 .{ .src = .{ .to_mut_gpr, .none } },
2897 .{ .src = .{ .to_mut_gpr, .mem } },
2898 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2899 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32352900 },
32362901 .dst_temps = .{.{ .ref = .src0 }},
2902 .clobbers = .{ .eflags = true },
32372903 .each = .{ .once = &.{
3238 .{ ._, ._, .not, .dst0q, ._, ._, ._ },
2904 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
2905 .{ ._, ._nb, .j, .@"0f", ._, ._, ._ },
2906 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },
32392907 } },
32402908 }, .{
3241 .required_features = .{ .@"64bit", null, null, null },
3242 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
2909 .required_features = .{ .cmov, null, null, null },
2910 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },
32432911 .patterns = &.{
3244 .{ .src = .{ .mem, .none } },
3245 .{ .src = .{ .to_gpr, .none } },
2912 .{ .src = .{ .to_mut_gpr, .mem } },
2913 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2914 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32462915 },
3247 .dst_temps = .{.{ .rc = .general_purpose }},
2916 .dst_temps = .{.{ .ref = .src0 }},
2917 .clobbers = .{ .eflags = true },
32482918 .each = .{ .once = &.{
3249 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
3250 .{ ._, ._, .xor, .dst0q, .src0q, ._, ._ },
2919 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
2920 .{ ._, ._l, .cmov, .dst0d, .src1d, ._, ._ },
32512921 } },
32522922 }, .{
3253 .required_features = .{ .mmx, null, null, null },
3254 .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any },
2923 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },
32552924 .patterns = &.{
3256 .{ .src = .{ .mem, .none } },
3257 .{ .src = .{ .to_mm, .none } },
2925 .{ .src = .{ .to_mut_gpr, .mem } },
2926 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2927 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32582928 },
3259 .dst_temps = .{.{ .rc = .mmx }},
2929 .dst_temps = .{.{ .ref = .src0 }},
2930 .clobbers = .{ .eflags = true },
32602931 .each = .{ .once = &.{
3261 .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ },
3262 .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ },
2932 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
2933 .{ ._, ._nl, .j, .@"0f", ._, ._, ._ },
2934 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },
32632935 } },
32642936 }, .{
3265 .required_features = .{ .mmx, null, null, null },
3266 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
2937 .required_features = .{ .cmov, null, null, null },
2938 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },
32672939 .patterns = &.{
3268 .{ .src = .{ .to_mut_mm, .none } },
2940 .{ .src = .{ .to_mut_gpr, .mem } },
2941 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2942 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32692943 },
3270 .extra_temps = .{
3271 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
3272 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
3273 .unused,
3274 .unused,
3275 .unused,
3276 .unused,
2944 .dst_temps = .{.{ .ref = .src0 }},
2945 .clobbers = .{ .eflags = true },
2946 .each = .{ .once = &.{
2947 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
2948 .{ ._, ._b, .cmov, .dst0d, .src1d, ._, ._ },
2949 } },
2950 }, .{
2951 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },
2952 .patterns = &.{
2953 .{ .src = .{ .to_mut_gpr, .mem } },
2954 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2955 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32772956 },
32782957 .dst_temps = .{.{ .ref = .src0 }},
2958 .clobbers = .{ .eflags = true },
32792959 .each = .{ .once = &.{
3280 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
3281 .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ },
2960 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
2961 .{ ._, ._nb, .j, .@"0f", ._, ._, ._ },
2962 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },
32822963 } },
32832964 }, .{
3284 .required_features = .{ .avx, null, null, null },
3285 .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any },
2965 .required_features = .{ .@"64bit", .cmov, null, null },
2966 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },
32862967 .patterns = &.{
3287 .{ .src = .{ .mem, .none } },
3288 .{ .src = .{ .to_xmm, .none } },
2968 .{ .src = .{ .to_mut_gpr, .mem } },
2969 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2970 .{ .src = .{ .to_mut_gpr, .to_gpr } },
32892971 },
3290 .dst_temps = .{.{ .rc = .sse }},
2972 .dst_temps = .{.{ .ref = .src0 }},
2973 .clobbers = .{ .eflags = true },
32912974 .each = .{ .once = &.{
3292 .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ },
3293 .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ },
2975 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
2976 .{ ._, ._l, .cmov, .dst0q, .src1q, ._, ._ },
32942977 } },
32952978 }, .{
3296 .required_features = .{ .avx, null, null, null },
3297 .src_constraints = .{ .{ .unsigned_int = .xword }, .any },
2979 .required_features = .{ .@"64bit", null, null, null },
2980 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },
32982981 .patterns = &.{
3299 .{ .src = .{ .to_xmm, .none } },
2982 .{ .src = .{ .to_mut_gpr, .mem } },
2983 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2984 .{ .src = .{ .to_mut_gpr, .to_gpr } },
33002985 },
3301 .extra_temps = .{
3302 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
3303 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
3304 .unused,
3305 .unused,
3306 .unused,
3307 .unused,
2986 .dst_temps = .{.{ .ref = .src0 }},
2987 .clobbers = .{ .eflags = true },
2988 .each = .{ .once = &.{
2989 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
2990 .{ ._, ._nl, .j, .@"0f", ._, ._, ._ },
2991 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },
2992 } },
2993 }, .{
2994 .required_features = .{ .@"64bit", .cmov, null, null },
2995 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },
2996 .patterns = &.{
2997 .{ .src = .{ .to_mut_gpr, .mem } },
2998 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
2999 .{ .src = .{ .to_mut_gpr, .to_gpr } },
33083000 },
3309 .dst_temps = .{.{ .rc = .sse }},
3001 .dst_temps = .{.{ .ref = .src0 }},
3002 .clobbers = .{ .eflags = true },
33103003 .each = .{ .once = &.{
3311 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
3312 .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
3004 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
3005 .{ ._, ._b, .cmov, .dst0q, .src1q, ._, ._ },
33133006 } },
33143007 }, .{
3315 .required_features = .{ .sse2, null, null, null },
3316 .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any },
3008 .required_features = .{ .@"64bit", null, null, null },
3009 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },
33173010 .patterns = &.{
3318 .{ .src = .{ .mem, .none } },
3319 .{ .src = .{ .to_xmm, .none } },
3011 .{ .src = .{ .to_mut_gpr, .mem } },
3012 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
3013 .{ .src = .{ .to_mut_gpr, .to_gpr } },
33203014 },
3321 .dst_temps = .{.{ .rc = .sse }},
3015 .dst_temps = .{.{ .ref = .src0 }},
3016 .clobbers = .{ .eflags = true },
33223017 .each = .{ .once = &.{
3323 .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ },
3324 .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ },
3018 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
3019 .{ ._, ._nb, .j, .@"0f", ._, ._, ._ },
3020 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },
33253021 } },
33263022 }, .{
3327 .required_features = .{ .sse2, null, null, null },
3328 .src_constraints = .{ .{ .unsigned_int = .xword }, .any },
3023 .required_features = .{ .@"64bit", .cmov, null, null },
3024 .src_constraints = .{ .any_signed_int, .any_signed_int },
33293025 .patterns = &.{
3330 .{ .src = .{ .to_mut_xmm, .none } },
3026 .{ .src = .{ .to_mem, .to_mem } },
33313027 },
33323028 .extra_temps = .{
3333 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
3334 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
3029 .{ .type = .isize, .kind = .{ .reg = .rsi } },
3030 .{ .type = .u64, .kind = .{ .reg = .rdi } },
3031 .{ .type = .u64, .kind = .{ .reg = .rcx } },
3032 .unused,
3033 .unused,
33353034 .unused,
33363035 .unused,
33373036 .unused,
33383037 .unused,
33393038 },
3340 .dst_temps = .{.{ .ref = .src0 }},
3039 .dst_temps = .{.mem},
3040 .clobbers = .{ .eflags = true },
33413041 .each = .{ .once = &.{
3342 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
3343 .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ },
3042 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
3043 .{ ._, ._c, .cl, ._, ._, ._, ._ },
3044 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
3045 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
3046 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
3047 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
3048 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
3049 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
3050 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
3051 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
3052 .{ ._, ._l, .cmov, .tmp0p, .tmp1p, ._, ._ },
3053 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
3054 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
3055 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
33443056 } },
33453057 }, .{
3346 .required_features = .{ .sse, null, null, null },
3347 .src_constraints = .{ .{ .int = .xword }, .any },
3058 .required_features = .{ .@"64bit", null, null, null },
3059 .src_constraints = .{ .any_signed_int, .any_signed_int },
33483060 .patterns = &.{
3349 .{ .src = .{ .to_mut_xmm, .none } },
3061 .{ .src = .{ .to_mem, .to_mem } },
33503062 },
33513063 .extra_temps = .{
3352 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
3353 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
3064 .{ .type = .isize, .kind = .{ .reg = .rsi } },
3065 .{ .type = .u64, .kind = .{ .reg = .rdi } },
3066 .{ .type = .u64, .kind = .{ .reg = .rcx } },
3067 .unused,
3068 .unused,
33543069 .unused,
33553070 .unused,
33563071 .unused,
33573072 .unused,
33583073 },
3359 .dst_temps = .{.{ .ref = .src0 }},
3074 .dst_temps = .{.mem},
3075 .clobbers = .{ .eflags = true },
33603076 .each = .{ .once = &.{
3361 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
3362 .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ },
3077 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
3078 .{ ._, ._c, .cl, ._, ._, ._, ._ },
3079 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
3080 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
3081 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
3082 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
3083 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
3084 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
3085 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
3086 .{ ._, ._nl, .j, .@"0f", ._, ._, ._ },
3087 .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ },
3088 .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
3089 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
3090 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
33633091 } },
33643092 }, .{
3365 .required_features = .{ .avx2, null, null, null },
3366 .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any },
3093 .required_features = .{ .@"64bit", .cmov, null, null },
3094 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },
33673095 .patterns = &.{
3368 .{ .src = .{ .mem, .none } },
3369 .{ .src = .{ .to_ymm, .none } },
3096 .{ .src = .{ .to_mem, .to_mem } },
33703097 },
3371 .dst_temps = .{.{ .rc = .sse }},
3098 .extra_temps = .{
3099 .{ .type = .isize, .kind = .{ .reg = .rsi } },
3100 .{ .type = .u64, .kind = .{ .reg = .rdi } },
3101 .{ .type = .u64, .kind = .{ .reg = .rcx } },
3102 .unused,
3103 .unused,
3104 .unused,
3105 .unused,
3106 .unused,
3107 .unused,
3108 },
3109 .dst_temps = .{.mem},
3110 .clobbers = .{ .eflags = true },
33723111 .each = .{ .once = &.{
3373 .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ },
3374 .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ },
3112 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
3113 .{ ._, ._c, .cl, ._, ._, ._, ._ },
3114 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
3115 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
3116 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
3117 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
3118 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
3119 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
3120 .{ ._, ._b, .cmov, .tmp0p, .tmp1p, ._, ._ },
3121 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
3122 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
3123 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
33753124 } },
33763125 }, .{
3377 .required_features = .{ .avx2, null, null, null },
3378 .src_constraints = .{ .{ .unsigned_int = .yword }, .any },
3126 .required_features = .{ .@"64bit", null, null, null },
3127 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },
33793128 .patterns = &.{
3380 .{ .src = .{ .to_ymm, .none } },
3129 .{ .src = .{ .to_mem, .to_mem } },
33813130 },
33823131 .extra_temps = .{
3383 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
3384 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
3132 .{ .type = .isize, .kind = .{ .reg = .rsi } },
3133 .{ .type = .u64, .kind = .{ .reg = .rdi } },
3134 .{ .type = .u64, .kind = .{ .reg = .rcx } },
3135 .unused,
3136 .unused,
33853137 .unused,
33863138 .unused,
33873139 .unused,
33883140 .unused,
33893141 },
3390 .dst_temps = .{.{ .rc = .sse }},
3142 .dst_temps = .{.mem},
3143 .clobbers = .{ .eflags = true },
33913144 .each = .{ .once = &.{
3392 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
3393 .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
3145 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
3146 .{ ._, ._c, .cl, ._, ._, ._, ._ },
3147 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
3148 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
3149 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
3150 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
3151 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
3152 .{ ._, ._nb, .j, .@"0f", ._, ._, ._ },
3153 .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ },
3154 .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
3155 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
3156 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
33943157 } },
33953158 }, .{
33963159 .required_features = .{ .avx, null, null, null },
3397 .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any },
3160 .src_constraints = .{
3161 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
3162 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
3163 },
33983164 .patterns = &.{
3399 .{ .src = .{ .mem, .none } },
3400 .{ .src = .{ .to_ymm, .none } },
3165 .{ .src = .{ .to_sse, .mem } },
3166 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
3167 .{ .src = .{ .to_sse, .to_sse } },
34013168 },
34023169 .dst_temps = .{.{ .rc = .sse }},
34033170 .each = .{ .once = &.{
3404 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) },
3405 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
3171 .{ ._, .vp_b, .maxs, .dst0x, .src0x, .src1x, ._ },
34063172 } },
34073173 }, .{
3408 .required_features = .{ .avx, null, null, null },
3409 .src_constraints = .{ .{ .unsigned_int = .yword }, .any },
3174 .required_features = .{ .sse4_1, null, null, null },
3175 .src_constraints = .{
3176 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
3177 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
3178 },
34103179 .patterns = &.{
3411 .{ .src = .{ .to_ymm, .none } },
3180 .{ .src = .{ .to_mut_sse, .mem } },
3181 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
3182 .{ .src = .{ .to_mut_sse, .to_sse } },
34123183 },
3413 .extra_temps = .{
3414 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
3415 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
3416 .unused,
3417 .unused,
3418 .unused,
3419 .unused,
3184 .dst_temps = .{.{ .ref = .src0 }},
3185 .each = .{ .once = &.{
3186 .{ ._, .p_b, .maxs, .dst0x, .src1x, ._, ._ },
3187 } },
3188 }, .{
3189 .required_features = .{ .sse2, null, null, null },
3190 .src_constraints = .{
3191 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
3192 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
3193 },
3194 .patterns = &.{
3195 .{ .src = .{ .to_mut_sse, .mem } },
3196 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
3197 .{ .src = .{ .to_mut_sse, .to_sse } },
34203198 },
34213199 .dst_temps = .{.{ .rc = .sse }},
34223200 .each = .{ .once = &.{
3423 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
3424 .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
3201 .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
3202 .{ ._, .p_b, .cmpgt, .dst0x, .src1x, ._, ._ },
3203 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
3204 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
3205 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
34253206 } },
34263207 }, .{
34273208 .required_features = .{ .avx2, null, null, null },
3428 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any },
3429 .patterns = &.{
3430 .{ .src = .{ .to_mem, .none } },
3209 .src_constraints = .{
3210 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
3211 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
34313212 },
3432 .extra_temps = .{
3433 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3434 .{ .kind = .{ .rc = .sse } },
3435 .{ .kind = .{ .rc = .sse } },
3436 .unused,
3437 .unused,
3438 .unused,
3213 .patterns = &.{
3214 .{ .src = .{ .to_sse, .mem } },
3215 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
3216 .{ .src = .{ .to_sse, .to_sse } },
34393217 },
3440 .dst_temps = .{.mem},
3441 .clobbers = .{ .eflags = true },
3218 .dst_temps = .{.{ .rc = .sse }},
34423219 .each = .{ .once = &.{
3443 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3444 .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ },
3445 .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
3446 .{ ._, .v_dqu, .mov, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
3447 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
3448 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3449 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ },
3450 .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ },
3220 .{ ._, .vp_b, .maxs, .dst0y, .src0y, .src1y, ._ },
34513221 } },
34523222 }, .{
34533223 .required_features = .{ .avx2, null, null, null },
3454 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any },
3224 .src_constraints = .{
3225 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
3226 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
3227 },
34553228 .patterns = &.{
3456 .{ .src = .{ .to_mem, .none } },
3229 .{ .src = .{ .to_mem, .to_mem } },
34573230 },
34583231 .extra_temps = .{
34593232 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3460 .{ .kind = .{ .rc = .sse } },
3461 .{ .kind = .{ .rc = .sse } },
3233 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
3234 .unused,
3235 .unused,
3236 .unused,
3237 .unused,
34623238 .unused,
34633239 .unused,
34643240 .unused,
......@@ -3467,22 +3243,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
34673243 .clobbers = .{ .eflags = true },
34683244 .each = .{ .once = &.{
34693245 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3470 .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ },
3471 .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
3472 .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
3246 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
3247 .{ ._, .vp_b, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
3248 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
34733249 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
34743250 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
34753251 } },
34763252 }, .{
34773253 .required_features = .{ .avx, null, null, null },
3478 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any },
3254 .src_constraints = .{
3255 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
3256 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
3257 },
34793258 .patterns = &.{
3480 .{ .src = .{ .to_mem, .none } },
3259 .{ .src = .{ .to_mem, .to_mem } },
34813260 },
34823261 .extra_temps = .{
34833262 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3484 .{ .kind = .{ .rc = .sse } },
3485 .{ .kind = .{ .rc = .sse } },
3263 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
3264 .unused,
3265 .unused,
3266 .unused,
3267 .unused,
34863268 .unused,
34873269 .unused,
34883270 .unused,
......@@ -3490,25 +3272,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
34903272 .dst_temps = .{.mem},
34913273 .clobbers = .{ .eflags = true },
34923274 .each = .{ .once = &.{
3493 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3494 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) },
3495 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
3496 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
3497 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
3275 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3276 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3277 .{ ._, .vp_b, .maxs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
3278 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
3279 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
34983280 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3499 .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ },
3500 .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ },
35013281 } },
35023282 }, .{
3503 .required_features = .{ .avx, null, null, null },
3504 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any },
3283 .required_features = .{ .sse4_1, null, null, null },
3284 .src_constraints = .{
3285 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
3286 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
3287 },
35053288 .patterns = &.{
3506 .{ .src = .{ .to_mem, .none } },
3289 .{ .src = .{ .to_mem, .to_mem } },
35073290 },
35083291 .extra_temps = .{
35093292 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3510 .{ .kind = .{ .rc = .sse } },
3511 .{ .kind = .{ .rc = .sse } },
3293 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
3294 .unused,
3295 .unused,
3296 .unused,
3297 .unused,
35123298 .unused,
35133299 .unused,
35143300 .unused,
......@@ -3517,22 +3303,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
35173303 .clobbers = .{ .eflags = true },
35183304 .each = .{ .once = &.{
35193305 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3520 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .si(0b01111) },
3521 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
3522 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
3523 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
3306 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3307 .{ ._, .p_b, .maxs, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
3308 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
3309 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
35243310 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
35253311 } },
35263312 }, .{
3527 .required_features = .{ .avx, null, null, null },
3528 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
3313 .required_features = .{ .sse2, null, null, null },
3314 .src_constraints = .{
3315 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
3316 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
3317 },
35293318 .patterns = &.{
3530 .{ .src = .{ .to_mem, .none } },
3319 .{ .src = .{ .to_mem, .to_mem } },
35313320 },
35323321 .extra_temps = .{
35333322 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3534 .{ .kind = .{ .rc = .sse } },
3535 .{ .kind = .{ .rc = .sse } },
3323 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
3324 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
3325 .unused,
3326 .unused,
3327 .unused,
35363328 .unused,
35373329 .unused,
35383330 .unused,
......@@ -3541,22 +3333,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
35413333 .clobbers = .{ .eflags = true },
35423334 .each = .{ .once = &.{
35433335 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3544 .{ ._, .vp_q, .cmpeq, .tmp1x, .tmp1x, .tmp1x, ._ },
3545 .{ .@"0:", .v_, .xor, .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._ },
3546 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
3336 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3337 .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
3338 .{ ._, .p_b, .cmpgt, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
3339 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },
3340 .{ ._, .p_, .andn, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
3341 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
3342 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
35473343 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
35483344 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
35493345 } },
35503346 }, .{
3551 .required_features = .{ .sse2, null, null, null },
3552 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
3347 .required_features = .{ .cmov, .slow_incdec, null, null },
3348 .src_constraints = .{
3349 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
3350 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
3351 },
35533352 .patterns = &.{
3554 .{ .src = .{ .to_mem, .none } },
3353 .{ .src = .{ .to_mem, .to_mem } },
35553354 },
35563355 .extra_temps = .{
35573356 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3558 .{ .kind = .{ .rc = .sse } },
3559 .{ .kind = .{ .rc = .sse } },
3357 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
3358 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
3359 .unused,
3360 .unused,
3361 .unused,
35603362 .unused,
35613363 .unused,
35623364 .unused,
......@@ -3565,45 +3367,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
35653367 .clobbers = .{ .eflags = true },
35663368 .each = .{ .once = &.{
35673369 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3568 .{ ._, .p_d, .cmpeq, .tmp1x, .tmp1x, ._, ._ },
3569 .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3570 .{ ._, .p_, .xor, .tmp2x, .tmp1x, ._, ._ },
3571 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
3572 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
3370 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
3371 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3372 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
3373 .{ ._, ._l, .cmov, .tmp1d, .tmp2d, ._, ._ },
3374 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
3375 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
35733376 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
35743377 } },
35753378 }, .{
3576 .required_features = .{ .@"64bit", null, null, null },
3577 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
3379 .required_features = .{ .cmov, null, null, null },
3380 .src_constraints = .{
3381 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
3382 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
3383 },
35783384 .patterns = &.{
3579 .{ .src = .{ .mut_mem, .none } },
3385 .{ .src = .{ .to_mem, .to_mem } },
35803386 },
35813387 .extra_temps = .{
35823388 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3389 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
3390 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
3391 .unused,
35833392 .unused,
35843393 .unused,
35853394 .unused,
35863395 .unused,
35873396 .unused,
35883397 },
3589 .dst_temps = .{.{ .ref = .src0 }},
3398 .dst_temps = .{.mem},
35903399 .clobbers = .{ .eflags = true },
35913400 .each = .{ .once = &.{
35923401 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3593 .{ .@"0:", ._, .not, .memia(.dst0q, .tmp0, .add_size), ._, ._, ._ },
3594 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, 8), ._, ._, ._ },
3595 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
3596 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3402 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
3403 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3404 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
3405 .{ ._, ._l, .cmov, .tmp1d, .tmp2d, ._, ._ },
3406 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
3407 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
3408 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
35973409 } },
35983410 }, .{
3599 .required_features = .{ .@"64bit", null, null, null },
3600 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
3411 .required_features = .{ .slow_incdec, null, null, null },
3412 .src_constraints = .{
3413 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
3414 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
3415 },
36013416 .patterns = &.{
3602 .{ .src = .{ .to_mem, .none } },
3417 .{ .src = .{ .to_mem, .to_mem } },
36033418 },
36043419 .extra_temps = .{
36053420 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3606 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
3421 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
3422 .unused,
3423 .unused,
3424 .unused,
36073425 .unused,
36083426 .unused,
36093427 .unused,
......@@ -3613,45 +3431,120 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
36133431 .clobbers = .{ .eflags = true },
36143432 .each = .{ .once = &.{
36153433 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3616 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
3617 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
3618 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
3619 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3434 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
3435 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3436 .{ ._, ._nl, .j, .@"1f", ._, ._, ._ },
3437 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3438 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
3439 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
36203440 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
36213441 } },
36223442 }, .{
3623 .required_features = .{ .@"64bit", null, null, null },
3624 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any },
3443 .src_constraints = .{
3444 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
3445 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
3446 },
36253447 .patterns = &.{
3626 .{ .src = .{ .mut_mem, .none } },
3448 .{ .src = .{ .to_mem, .to_mem } },
36273449 },
36283450 .extra_temps = .{
36293451 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3452 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
3453 .unused,
3454 .unused,
36303455 .unused,
36313456 .unused,
36323457 .unused,
36333458 .unused,
36343459 .unused,
36353460 },
3636 .dst_temps = .{.{ .ref = .src0 }},
3461 .dst_temps = .{.mem},
36373462 .clobbers = .{ .eflags = true },
36383463 .each = .{ .once = &.{
3639 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3640 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ },
3641 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ },
3642 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
3643 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3644 .{ ._, ._, .not, .memad(.dst0d, .add_size, -16), ._, ._, ._ },
3464 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3465 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
3466 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3467 .{ ._, ._nl, .j, .@"1f", ._, ._, ._ },
3468 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3469 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
3470 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
3471 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
36453472 } },
36463473 }, .{
3647 .required_features = .{ .@"64bit", null, null, null },
3648 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any },
3474 .required_features = .{ .sse, .mmx, null, null },
3475 .src_constraints = .{
3476 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
3477 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
3478 },
36493479 .patterns = &.{
3650 .{ .src = .{ .to_mem, .none } },
3480 .{ .src = .{ .to_mut_mmx, .mem } },
3481 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
3482 .{ .src = .{ .to_mut_mmx, .to_mmx } },
3483 },
3484 .dst_temps = .{.{ .ref = .src0 }},
3485 .each = .{ .once = &.{
3486 .{ ._, .p_b, .maxu, .dst0q, .src1q, ._, ._ },
3487 } },
3488 }, .{
3489 .required_features = .{ .avx, null, null, null },
3490 .src_constraints = .{
3491 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
3492 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
3493 },
3494 .patterns = &.{
3495 .{ .src = .{ .to_sse, .mem } },
3496 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
3497 .{ .src = .{ .to_sse, .to_sse } },
3498 },
3499 .dst_temps = .{.{ .rc = .sse }},
3500 .each = .{ .once = &.{
3501 .{ ._, .vp_b, .maxu, .dst0x, .src0x, .src1x, ._ },
3502 } },
3503 }, .{
3504 .required_features = .{ .sse2, null, null, null },
3505 .src_constraints = .{
3506 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
3507 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
3508 },
3509 .patterns = &.{
3510 .{ .src = .{ .to_mut_sse, .mem } },
3511 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
3512 .{ .src = .{ .to_mut_sse, .to_sse } },
3513 },
3514 .dst_temps = .{.{ .ref = .src0 }},
3515 .each = .{ .once = &.{
3516 .{ ._, .p_b, .maxu, .dst0x, .src1x, ._, ._ },
3517 } },
3518 }, .{
3519 .required_features = .{ .avx2, null, null, null },
3520 .src_constraints = .{
3521 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
3522 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
3523 },
3524 .patterns = &.{
3525 .{ .src = .{ .to_sse, .mem } },
3526 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
3527 .{ .src = .{ .to_sse, .to_sse } },
3528 },
3529 .dst_temps = .{.{ .rc = .sse }},
3530 .each = .{ .once = &.{
3531 .{ ._, .vp_b, .maxu, .dst0y, .src0y, .src1y, ._ },
3532 } },
3533 }, .{
3534 .required_features = .{ .avx2, null, null, null },
3535 .src_constraints = .{
3536 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
3537 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
3538 },
3539 .patterns = &.{
3540 .{ .src = .{ .to_mem, .to_mem } },
36513541 },
36523542 .extra_temps = .{
36533543 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3654 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
3544 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
3545 .unused,
3546 .unused,
3547 .unused,
36553548 .unused,
36563549 .unused,
36573550 .unused,
......@@ -3660,51 +3553,58 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
36603553 .dst_temps = .{.mem},
36613554 .clobbers = .{ .eflags = true },
36623555 .each = .{ .once = &.{
3663 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3664 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ },
3665 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
3666 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ },
3667 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3556 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3557 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
3558 .{ ._, .vp_b, .maxu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
3559 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
3560 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
36683561 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3669 .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ },
3670 .{ ._, ._, .not, .tmp0d, ._, ._, ._ },
3671 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16), .tmp0d, ._, ._ },
3672 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16 + 4), .si(0), ._, ._ },
3673 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16 + 8), .si(0), ._, ._ },
36743562 } },
36753563 }, .{
3676 .required_features = .{ .@"64bit", null, null, null },
3677 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any },
3564 .required_features = .{ .avx, null, null, null },
3565 .src_constraints = .{
3566 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
3567 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
3568 },
36783569 .patterns = &.{
3679 .{ .src = .{ .mut_mem, .none } },
3570 .{ .src = .{ .to_mem, .to_mem } },
36803571 },
36813572 .extra_temps = .{
36823573 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3574 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
3575 .unused,
3576 .unused,
36833577 .unused,
36843578 .unused,
36853579 .unused,
36863580 .unused,
36873581 .unused,
36883582 },
3689 .dst_temps = .{.{ .ref = .src0 }},
3583 .dst_temps = .{.mem},
36903584 .clobbers = .{ .eflags = true },
36913585 .each = .{ .once = &.{
3692 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3693 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ },
3694 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ },
3586 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3587 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3588 .{ ._, .vp_b, .maxu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
3589 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
36953590 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
36963591 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3697 .{ ._, ._, .not, .memad(.dst0q, .add_size, -16), ._, ._, ._ },
36983592 } },
36993593 }, .{
3700 .required_features = .{ .@"64bit", null, null, null },
3701 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any },
3594 .required_features = .{ .sse2, null, null, null },
3595 .src_constraints = .{
3596 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
3597 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
3598 },
37023599 .patterns = &.{
3703 .{ .src = .{ .to_mem, .none } },
3600 .{ .src = .{ .to_mem, .to_mem } },
37043601 },
37053602 .extra_temps = .{
37063603 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3707 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
3604 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
3605 .unused,
3606 .unused,
3607 .unused,
37083608 .unused,
37093609 .unused,
37103610 .unused,
......@@ -3713,46 +3613,60 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
37133613 .dst_temps = .{.mem},
37143614 .clobbers = .{ .eflags = true },
37153615 .each = .{ .once = &.{
3716 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
3717 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ },
3718 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
3719 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ },
3720 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3616 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3617 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3618 .{ ._, .p_b, .maxu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
3619 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
3620 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
37213621 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3722 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
37233622 } },
37243623 }, .{
3725 .required_features = .{ .@"64bit", null, null, null },
3726 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any },
3624 .required_features = .{ .cmov, .slow_incdec, null, null },
3625 .src_constraints = .{
3626 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
3627 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
3628 },
37273629 .patterns = &.{
3728 .{ .src = .{ .mut_mem, .none } },
3630 .{ .src = .{ .to_mem, .to_mem } },
37293631 },
37303632 .extra_temps = .{
37313633 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3634 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
3635 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
3636 .unused,
37323637 .unused,
37333638 .unused,
37343639 .unused,
37353640 .unused,
37363641 .unused,
37373642 },
3738 .dst_temps = .{.{ .ref = .src0 }},
3643 .dst_temps = .{.mem},
37393644 .clobbers = .{ .eflags = true },
37403645 .each = .{ .once = &.{
3741 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
3742 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ },
3743 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3646 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3647 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
3648 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3649 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
3650 .{ ._, ._b, .cmov, .tmp1d, .tmp2d, ._, ._ },
3651 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
3652 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
37443653 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3745 .{ ._, ._, .not, .memad(.dst0d, .add_size, -8), ._, ._, ._ },
37463654 } },
37473655 }, .{
3748 .required_features = .{ .@"64bit", null, null, null },
3749 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any },
3656 .required_features = .{ .cmov, null, null, null },
3657 .src_constraints = .{
3658 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
3659 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
3660 },
37503661 .patterns = &.{
3751 .{ .src = .{ .to_mem, .none } },
3662 .{ .src = .{ .to_mem, .to_mem } },
37523663 },
37533664 .extra_temps = .{
37543665 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3755 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
3666 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
3667 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
3668 .unused,
3669 .unused,
37563670 .unused,
37573671 .unused,
37583672 .unused,
......@@ -3761,50 +3675,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
37613675 .dst_temps = .{.mem},
37623676 .clobbers = .{ .eflags = true },
37633677 .each = .{ .once = &.{
3764 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
3765 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ },
3766 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
3767 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ },
3768 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3769 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3770 .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ },
3771 .{ ._, ._, .not, .tmp0d, ._, ._, ._ },
3772 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ },
3773 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ },
3678 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3679 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
3680 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3681 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
3682 .{ ._, ._b, .cmov, .tmp1d, .tmp2d, ._, ._ },
3683 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
3684 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
3685 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
37743686 } },
37753687 }, .{
3776 .required_features = .{ .@"64bit", null, null, null },
3777 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any },
3688 .required_features = .{ .slow_incdec, null, null, null },
3689 .src_constraints = .{
3690 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
3691 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
3692 },
37783693 .patterns = &.{
3779 .{ .src = .{ .mut_mem, .none } },
3694 .{ .src = .{ .to_mem, .to_mem } },
37803695 },
37813696 .extra_temps = .{
37823697 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3698 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
3699 .unused,
3700 .unused,
37833701 .unused,
37843702 .unused,
37853703 .unused,
37863704 .unused,
37873705 .unused,
37883706 },
3789 .dst_temps = .{.{ .ref = .src0 }},
3707 .dst_temps = .{.mem},
37903708 .clobbers = .{ .eflags = true },
37913709 .each = .{ .once = &.{
3792 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3793 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ },
3794 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ },
3795 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
3710 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3711 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
3712 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3713 .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
3714 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3715 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
3716 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
37963717 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3797 .{ ._, ._, .xor, .memad(.dst0d, .add_size, -16), .sa(.src0, .add_umax), ._, ._ },
37983718 } },
37993719 }, .{
3800 .required_features = .{ .@"64bit", null, null, null },
3801 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any },
3720 .src_constraints = .{
3721 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
3722 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
3723 },
38023724 .patterns = &.{
3803 .{ .src = .{ .to_mem, .none } },
3725 .{ .src = .{ .to_mem, .to_mem } },
38043726 },
38053727 .extra_temps = .{
38063728 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3807 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
3729 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
3730 .unused,
3731 .unused,
3732 .unused,
38083733 .unused,
38093734 .unused,
38103735 .unused,
......@@ -3813,50 +3738,90 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
38133738 .dst_temps = .{.mem},
38143739 .clobbers = .{ .eflags = true },
38153740 .each = .{ .once = &.{
3816 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3817 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ },
3818 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
3819 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ },
3820 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3821 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3822 .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ },
3823 .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ },
3824 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16), .tmp0d, ._, ._ },
3825 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16 + 4), .si(0), ._, ._ },
3826 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16 + 8), .si(0), ._, ._ },
3741 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3742 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
3743 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3744 .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
3745 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
3746 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
3747 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
3748 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
38273749 } },
38283750 }, .{
3829 .required_features = .{ .@"64bit", null, null, null },
3830 .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any },
3751 .required_features = .{ .sse, .mmx, null, null },
3752 .src_constraints = .{
3753 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },
3754 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },
3755 },
38313756 .patterns = &.{
3832 .{ .src = .{ .mut_mem, .none } },
3757 .{ .src = .{ .to_mut_mmx, .mem } },
3758 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
3759 .{ .src = .{ .to_mut_mmx, .to_mmx } },
38333760 },
3834 .extra_temps = .{
3835 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3836 .unused,
3837 .unused,
3838 .unused,
3839 .unused,
3840 .unused,
3761 .dst_temps = .{.{ .ref = .src0 }},
3762 .each = .{ .once = &.{
3763 .{ ._, .p_w, .maxs, .dst0q, .src1q, ._, ._ },
3764 } },
3765 }, .{
3766 .required_features = .{ .avx, null, null, null },
3767 .src_constraints = .{
3768 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
3769 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
3770 },
3771 .patterns = &.{
3772 .{ .src = .{ .to_sse, .mem } },
3773 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
3774 .{ .src = .{ .to_sse, .to_sse } },
3775 },
3776 .dst_temps = .{.{ .rc = .sse }},
3777 .each = .{ .once = &.{
3778 .{ ._, .vp_w, .maxs, .dst0x, .src0x, .src1x, ._ },
3779 } },
3780 }, .{
3781 .required_features = .{ .sse2, null, null, null },
3782 .src_constraints = .{
3783 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
3784 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
3785 },
3786 .patterns = &.{
3787 .{ .src = .{ .to_mut_sse, .mem } },
3788 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
3789 .{ .src = .{ .to_mut_sse, .to_sse } },
38413790 },
38423791 .dst_temps = .{.{ .ref = .src0 }},
3843 .clobbers = .{ .eflags = true },
38443792 .each = .{ .once = &.{
3845 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
3846 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ },
3847 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3848 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3849 .{ ._, ._, .xor, .memad(.dst0d, .add_size, -8), .sa(.src0, .add_umax), ._, ._ },
3793 .{ ._, .p_w, .maxs, .dst0x, .src1x, ._, ._ },
38503794 } },
38513795 }, .{
3852 .required_features = .{ .@"64bit", null, null, null },
3853 .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any },
3796 .required_features = .{ .avx2, null, null, null },
3797 .src_constraints = .{
3798 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
3799 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
3800 },
38543801 .patterns = &.{
3855 .{ .src = .{ .to_mem, .none } },
3802 .{ .src = .{ .to_sse, .mem } },
3803 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
3804 .{ .src = .{ .to_sse, .to_sse } },
3805 },
3806 .dst_temps = .{.{ .rc = .sse }},
3807 .each = .{ .once = &.{
3808 .{ ._, .vp_w, .maxs, .dst0y, .src0y, .src1y, ._ },
3809 } },
3810 }, .{
3811 .required_features = .{ .avx2, null, null, null },
3812 .src_constraints = .{
3813 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
3814 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
3815 },
3816 .patterns = &.{
3817 .{ .src = .{ .to_mem, .to_mem } },
38563818 },
38573819 .extra_temps = .{
38583820 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3859 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
3821 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
3822 .unused,
3823 .unused,
3824 .unused,
38603825 .unused,
38613826 .unused,
38623827 .unused,
......@@ -3865,51 +3830,58 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
38653830 .dst_temps = .{.mem},
38663831 .clobbers = .{ .eflags = true },
38673832 .each = .{ .once = &.{
3868 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
3869 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ },
3870 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
3871 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ },
3872 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3833 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3834 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
3835 .{ ._, .vp_w, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
3836 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
3837 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
38733838 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3874 .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ },
3875 .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ },
3876 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ },
3877 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ },
38783839 } },
38793840 }, .{
3880 .required_features = .{ .@"64bit", null, null, null },
3881 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
3841 .required_features = .{ .avx, null, null, null },
3842 .src_constraints = .{
3843 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
3844 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
3845 },
38823846 .patterns = &.{
3883 .{ .src = .{ .mut_mem, .none } },
3847 .{ .src = .{ .to_mem, .to_mem } },
38843848 },
38853849 .extra_temps = .{
38863850 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3851 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
3852 .unused,
3853 .unused,
38873854 .unused,
38883855 .unused,
38893856 .unused,
38903857 .unused,
38913858 .unused,
38923859 },
3893 .dst_temps = .{.{ .ref = .src0 }},
3860 .dst_temps = .{.mem},
38943861 .clobbers = .{ .eflags = true },
38953862 .each = .{ .once = &.{
3896 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3897 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ },
3898 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ },
3863 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3864 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3865 .{ ._, .vp_w, .maxs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
3866 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
38993867 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
39003868 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3901 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
3902 .{ ._, ._, .xor, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
39033869 } },
39043870 }, .{
3905 .required_features = .{ .@"64bit", null, null, null },
3906 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
3871 .required_features = .{ .sse2, null, null, null },
3872 .src_constraints = .{
3873 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
3874 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
3875 },
39073876 .patterns = &.{
3908 .{ .src = .{ .to_mem, .none } },
3877 .{ .src = .{ .to_mem, .to_mem } },
39093878 },
39103879 .extra_temps = .{
39113880 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3912 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
3881 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
3882 .unused,
3883 .unused,
3884 .unused,
39133885 .unused,
39143886 .unused,
39153887 .unused,
......@@ -3918,1746 +3890,2329 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
39183890 .dst_temps = .{.mem},
39193891 .clobbers = .{ .eflags = true },
39203892 .each = .{ .once = &.{
3921 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
3922 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ },
3923 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
3924 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ },
3925 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3893 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3894 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
3895 .{ ._, .p_w, .maxs, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
3896 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
3897 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
39263898 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3927 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
3928 .{ ._, ._, .xor, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
3929 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
3930 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
39313899 } },
39323900 }, .{
3933 .required_features = .{ .@"64bit", null, null, null },
3934 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
3901 .required_features = .{ .cmov, null, null, null },
3902 .src_constraints = .{
3903 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
3904 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
3905 },
39353906 .patterns = &.{
3936 .{ .src = .{ .mut_mem, .none } },
3907 .{ .src = .{ .to_mem, .to_mem } },
39373908 },
39383909 .extra_temps = .{
39393910 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3911 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
3912 .unused,
3913 .unused,
39403914 .unused,
39413915 .unused,
39423916 .unused,
39433917 .unused,
39443918 .unused,
39453919 },
3946 .dst_temps = .{.{ .ref = .src0 }},
3920 .dst_temps = .{.mem},
39473921 .clobbers = .{ .eflags = true },
39483922 .each = .{ .once = &.{
3949 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
3950 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ },
3951 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3923 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3924 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
3925 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
3926 .{ ._, ._l, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
3927 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
3928 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
39523929 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3953 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
3954 .{ ._, ._, .xor, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
39553930 } },
39563931 }, .{
3957 .required_features = .{ .@"64bit", null, null, null },
3958 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
3932 .src_constraints = .{
3933 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
3934 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
3935 },
39593936 .patterns = &.{
3960 .{ .src = .{ .to_mem, .none } },
3937 .{ .src = .{ .to_mem, .to_mem } },
39613938 },
39623939 .extra_temps = .{
39633940 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
3964 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
3941 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
39653942 .unused,
39663943 .unused,
39673944 .unused,
39683945 .unused,
3969 },
3946 .unused,
3947 .unused,
3948 .unused,
3949 },
39703950 .dst_temps = .{.mem},
39713951 .clobbers = .{ .eflags = true },
39723952 .each = .{ .once = &.{
3973 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
3974 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ },
3975 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
3976 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ },
3977 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
3953 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
3954 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
3955 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
3956 .{ ._, ._nl, .j, .@"1f", ._, ._, ._ },
3957 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
3958 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
3959 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
39783960 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
3979 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
3980 .{ ._, ._, .xor, .tmp0q, .memad(.src0q, .add_size, -8), ._, ._ },
3981 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
39823961 } },
39833962 }, .{
3984 .required_features = .{ .mmx, null, null, null },
3985 .src_constraints = .{ .{ .signed_int_or_full_vec = .qword }, .any },
3963 .required_features = .{ .avx, null, null, null },
3964 .src_constraints = .{
3965 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
3966 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
3967 },
39863968 .patterns = &.{
3987 .{ .src = .{ .mem, .none } },
3988 .{ .src = .{ .to_mm, .none } },
3969 .{ .src = .{ .to_sse, .mem } },
3970 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
3971 .{ .src = .{ .to_sse, .to_sse } },
39893972 },
3990 .dst_temps = .{.{ .rc = .mmx }},
3973 .dst_temps = .{.{ .rc = .sse }},
39913974 .each = .{ .once = &.{
3992 .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ },
3993 .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ },
3975 .{ ._, .vp_w, .maxu, .dst0x, .src0x, .src1x, ._ },
39943976 } },
39953977 }, .{
3996 .required_features = .{ .mmx, null, null, null },
3997 .src_constraints = .{ .{ .unsigned_int_vec = .qword }, .any },
3998 .patterns = &.{
3999 .{ .src = .{ .to_mut_mm, .none } },
3978 .required_features = .{ .sse4_1, null, null, null },
3979 .src_constraints = .{
3980 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
3981 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
40003982 },
4001 .extra_temps = .{
4002 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4003 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4004 .unused,
4005 .unused,
4006 .unused,
4007 .unused,
3983 .patterns = &.{
3984 .{ .src = .{ .to_mut_sse, .mem } },
3985 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
3986 .{ .src = .{ .to_mut_sse, .to_sse } },
40083987 },
40093988 .dst_temps = .{.{ .ref = .src0 }},
40103989 .each = .{ .once = &.{
4011 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4012 .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ },
3990 .{ ._, .p_w, .maxu, .dst0x, .src1x, ._, ._ },
40133991 } },
40143992 }, .{
4015 .required_features = .{ .avx, null, null, null },
4016 .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any },
4017 .patterns = &.{
4018 .{ .src = .{ .mem, .none } },
4019 .{ .src = .{ .to_xmm, .none } },
3993 .required_features = .{ .sse2, null, null, null },
3994 .src_constraints = .{
3995 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
3996 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
40203997 },
4021 .dst_temps = .{.{ .rc = .sse }},
4022 .each = .{ .once = &.{
4023 .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ },
4024 .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ },
4025 } },
4026 }, .{
4027 .required_features = .{ .avx, null, null, null },
4028 .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any },
40293998 .patterns = &.{
4030 .{ .src = .{ .to_xmm, .none } },
4031 },
4032 .extra_temps = .{
4033 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4034 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4035 .unused,
4036 .unused,
4037 .unused,
4038 .unused,
3999 .{ .src = .{ .to_mut_sse, .mem } },
4000 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
4001 .{ .src = .{ .to_mut_sse, .to_sse } },
40394002 },
4040 .dst_temps = .{.{ .rc = .sse }},
4003 .dst_temps = .{.{ .ref = .src0 }},
40414004 .each = .{ .once = &.{
4042 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4043 .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
4005 .{ ._, .p_w, .subus, .dst0x, .src1x, ._, ._ },
4006 .{ ._, .p_w, .add, .dst0x, .src1x, ._, ._ },
40444007 } },
40454008 }, .{
4046 .required_features = .{ .sse2, null, null, null },
4047 .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any },
4009 .required_features = .{ .avx2, null, null, null },
4010 .src_constraints = .{
4011 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
4012 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
4013 },
40484014 .patterns = &.{
4049 .{ .src = .{ .mem, .none } },
4050 .{ .src = .{ .to_xmm, .none } },
4015 .{ .src = .{ .to_sse, .mem } },
4016 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
4017 .{ .src = .{ .to_sse, .to_sse } },
40514018 },
40524019 .dst_temps = .{.{ .rc = .sse }},
40534020 .each = .{ .once = &.{
4054 .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ },
4055 .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ },
4021 .{ ._, .vp_w, .maxu, .dst0y, .src0y, .src1y, ._ },
40564022 } },
40574023 }, .{
4058 .required_features = .{ .sse2, null, null, null },
4059 .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any },
4024 .required_features = .{ .avx2, null, null, null },
4025 .src_constraints = .{
4026 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
4027 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
4028 },
40604029 .patterns = &.{
4061 .{ .src = .{ .to_mut_xmm, .none } },
4030 .{ .src = .{ .to_mem, .to_mem } },
40624031 },
40634032 .extra_temps = .{
4064 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4065 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4033 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4034 .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
4035 .unused,
4036 .unused,
4037 .unused,
40664038 .unused,
40674039 .unused,
40684040 .unused,
40694041 .unused,
40704042 },
4071 .dst_temps = .{.{ .ref = .src0 }},
4043 .dst_temps = .{.mem},
4044 .clobbers = .{ .eflags = true },
40724045 .each = .{ .once = &.{
4073 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4074 .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ },
4046 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4047 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
4048 .{ ._, .vp_w, .maxu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
4049 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
4050 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
4051 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
40754052 } },
40764053 }, .{
4077 .required_features = .{ .sse, null, null, null },
4078 .src_constraints = .{ .{ .vec = .xword }, .any },
4054 .required_features = .{ .avx, null, null, null },
4055 .src_constraints = .{
4056 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
4057 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
4058 },
40794059 .patterns = &.{
4080 .{ .src = .{ .to_mut_xmm, .none } },
4060 .{ .src = .{ .to_mem, .to_mem } },
40814061 },
40824062 .extra_temps = .{
4083 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4084 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4063 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4064 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
4065 .unused,
4066 .unused,
4067 .unused,
40854068 .unused,
40864069 .unused,
40874070 .unused,
40884071 .unused,
40894072 },
4090 .dst_temps = .{.{ .ref = .src0 }},
4073 .dst_temps = .{.mem},
4074 .clobbers = .{ .eflags = true },
40914075 .each = .{ .once = &.{
4092 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4093 .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ },
4076 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4077 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4078 .{ ._, .vp_w, .maxu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
4079 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4080 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4081 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
40944082 } },
40954083 }, .{
4096 .required_features = .{ .avx2, null, null, null },
4097 .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any },
4098 .patterns = &.{
4099 .{ .src = .{ .mem, .none } },
4100 .{ .src = .{ .to_ymm, .none } },
4084 .required_features = .{ .sse4_1, null, null, null },
4085 .src_constraints = .{
4086 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
4087 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
41014088 },
4102 .dst_temps = .{.{ .rc = .sse }},
4103 .each = .{ .once = &.{
4104 .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ },
4105 .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ },
4106 } },
4107 }, .{
4108 .required_features = .{ .avx2, null, null, null },
4109 .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any },
41104089 .patterns = &.{
4111 .{ .src = .{ .to_ymm, .none } },
4090 .{ .src = .{ .to_mem, .to_mem } },
41124091 },
41134092 .extra_temps = .{
4114 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4115 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4093 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4094 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
4095 .unused,
4096 .unused,
4097 .unused,
41164098 .unused,
41174099 .unused,
41184100 .unused,
41194101 .unused,
41204102 },
4121 .dst_temps = .{.{ .rc = .sse }},
4103 .dst_temps = .{.mem},
4104 .clobbers = .{ .eflags = true },
41224105 .each = .{ .once = &.{
4123 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4124 .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
4106 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4107 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4108 .{ ._, .p_w, .maxu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4109 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4110 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4111 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
41254112 } },
41264113 }, .{
4127 .required_features = .{ .avx, null, null, null },
4128 .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any },
4129 .patterns = &.{
4130 .{ .src = .{ .mem, .none } },
4131 .{ .src = .{ .to_ymm, .none } },
4114 .required_features = .{ .sse2, null, null, null },
4115 .src_constraints = .{
4116 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
4117 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
41324118 },
4133 .dst_temps = .{.{ .rc = .sse }},
4134 .each = .{ .once = &.{
4135 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .si(0b01111) },
4136 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
4137 } },
4138 }, .{
4139 .required_features = .{ .avx, null, null, null },
4140 .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any },
41414119 .patterns = &.{
4142 .{ .src = .{ .to_ymm, .none } },
4120 .{ .src = .{ .to_mem, .to_mem } },
41434121 },
41444122 .extra_temps = .{
4145 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4146 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4123 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4124 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
4125 .unused,
4126 .unused,
4127 .unused,
41474128 .unused,
41484129 .unused,
41494130 .unused,
41504131 .unused,
41514132 },
4152 .dst_temps = .{.{ .rc = .sse }},
4133 .dst_temps = .{.mem},
4134 .clobbers = .{ .eflags = true },
41534135 .each = .{ .once = &.{
4154 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4155 .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
4136 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4137 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4138 .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4139 .{ ._, .p_w, .add, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4140 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4141 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4142 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
41564143 } },
41574144 }, .{
4158 .required_features = .{ .@"64bit", null, null, null },
4145 .required_features = .{ .cmov, null, null, null },
4146 .src_constraints = .{
4147 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
4148 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
4149 },
41594150 .patterns = &.{
4160 .{ .src = .{ .to_mem, .none } },
4151 .{ .src = .{ .to_mem, .to_mem } },
41614152 },
41624153 .extra_temps = .{
41634154 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4164 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4165 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
4166 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4155 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
4156 .unused,
4157 .unused,
4158 .unused,
4159 .unused,
4160 .unused,
41674161 .unused,
41684162 .unused,
41694163 },
41704164 .dst_temps = .{.mem},
4165 .clobbers = .{ .eflags = true },
41714166 .each = .{ .once = &.{
4172 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },
4173 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
4174 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ },
4175 .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },
4176 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ },
4177 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
4167 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4168 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
4169 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
4170 .{ ._, ._b, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
4171 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
4172 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
41784173 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
41794174 } },
41804175 }, .{
4176 .src_constraints = .{
4177 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
4178 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
4179 },
41814180 .patterns = &.{
4182 .{ .src = .{ .to_mem, .none } },
4181 .{ .src = .{ .to_mem, .to_mem } },
41834182 },
41844183 .extra_temps = .{
41854184 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4186 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4187 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4188 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
4185 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
4186 .unused,
4187 .unused,
4188 .unused,
4189 .unused,
4190 .unused,
41894191 .unused,
41904192 .unused,
41914193 },
41924194 .dst_temps = .{.mem},
4195 .clobbers = .{ .eflags = true },
41934196 .each = .{ .once = &.{
4194 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },
4195 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
4196 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ },
4197 .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },
4198 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ },
4199 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
4197 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4198 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
4199 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
4200 .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
4201 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
4202 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
4203 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
42004204 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
42014205 } },
4202 } }) catch |err| switch (err) {
4203 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
4204 @tagName(air_tag),
4205 cg.typeOf(ty_op.operand).fmt(pt),
4206 ops[0].tracking(cg),
4207 }),
4208 else => |e| return e,
4209 };
4210 for (ops) |op| for (res) |r| {
4211 if (op.index == r.index) break;
4212 } else try op.die(cg);
4213 try res[0].moveTo(inst, cg);
4214 },
4215
4216 .block => if (use_old) try cg.airBlock(inst) else {
4217 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
4218 const extra = cg.air.extraData(Air.Block, ty_pl.payload);
4219 try cg.asmPseudo(.pseudo_dbg_enter_block_none);
4220 try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));
4221 try cg.asmPseudo(.pseudo_dbg_leave_block_none);
4222 },
4223 .loop => if (use_old) try cg.airLoop(inst) else {
4224 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
4225 const extra = cg.air.extraData(Air.Block, ty_pl.payload);
4226 cg.scope_generation += 1;
4227 try cg.loops.putNoClobber(cg.gpa, inst, .{
4228 .state = try cg.saveState(),
4229 .target = @intCast(cg.mir_instructions.len),
4230 });
4231 defer assert(cg.loops.remove(inst));
4232 try cg.genBodyBlock(@ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));
4233 },
4234 .repeat => if (use_old) try cg.airRepeat(inst) else {
4235 const repeat = air_datas[@intFromEnum(inst)].repeat;
4236 const loop = cg.loops.get(repeat.loop_inst).?;
4237 try cg.restoreState(loop.state, &.{}, .{
4238 .emit_instructions = true,
4239 .update_tracking = false,
4240 .resurrect = false,
4241 .close_scope = true,
4242 });
4243 _ = try cg.asmJmpReloc(loop.target);
4244 },
4245 .br => try cg.airBr(inst),
4246 .trap => try cg.asmOpOnly(.{ ._2, .ud }),
4247 .breakpoint => try cg.asmOpOnly(.{ ._3, .int }),
4248 .ret_addr => if (use_old) try cg.airRetAddr(inst) else {
4249 var slot = try cg.tempInit(.usize, .{ .load_frame = .{
4250 .index = .ret_addr,
4251 } });
4252 while (try slot.toRegClass(true, .general_purpose, cg)) {}
4253 try slot.moveTo(inst, cg);
4254 },
4255 .frame_addr => if (use_old) try cg.airFrameAddress(inst) else {
4256 var slot = try cg.tempInit(.usize, .{ .lea_frame = .{
4257 .index = .base_ptr,
4258 } });
4259 try slot.moveTo(inst, cg);
4260 },
4261 .call => try cg.airCall(inst, .auto, .{ .safety = true }),
4262 .call_always_tail => try cg.airCall(inst, .always_tail, .{ .safety = true }),
4263 .call_never_tail => try cg.airCall(inst, .never_tail, .{ .safety = true }),
4264 .call_never_inline => try cg.airCall(inst, .never_inline, .{ .safety = true }),
4265
4266 .clz => |air_tag| if (use_old) try cg.airClz(inst) else {
4267 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
4268 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
4269 var res: [1]Temp = undefined;
4270 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
4271 .required_features = .{ .slow_incdec, null, null, null },
4272 .src_constraints = .{ .{ .exact_signed_int = 1 }, .any },
4206 }, .{
4207 .required_features = .{ .avx, null, null, null },
4208 .src_constraints = .{
4209 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
4210 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
4211 },
42734212 .patterns = &.{
4274 .{ .src = .{ .mut_mem, .none } },
4275 .{ .src = .{ .to_mut_gpr, .none } },
4213 .{ .src = .{ .to_sse, .mem } },
4214 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
4215 .{ .src = .{ .to_sse, .to_sse } },
42764216 },
4277 .dst_temps = .{.{ .ref = .src0 }},
4278 .clobbers = .{ .eflags = true },
4217 .dst_temps = .{.{ .rc = .sse }},
42794218 .each = .{ .once = &.{
4280 .{ ._, ._, .add, .dst0b, .si(1), ._, ._ },
4219 .{ ._, .vp_d, .maxs, .dst0x, .src0x, .src1x, ._ },
42814220 } },
42824221 }, .{
4283 .src_constraints = .{ .{ .exact_signed_int = 1 }, .any },
4222 .required_features = .{ .sse4_1, null, null, null },
4223 .src_constraints = .{
4224 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
4225 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
4226 },
42844227 .patterns = &.{
4285 .{ .src = .{ .mut_mem, .none } },
4286 .{ .src = .{ .to_mut_gpr, .none } },
4228 .{ .src = .{ .to_mut_sse, .mem } },
4229 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
4230 .{ .src = .{ .to_mut_sse, .to_sse } },
42874231 },
42884232 .dst_temps = .{.{ .ref = .src0 }},
4289 .clobbers = .{ .eflags = true },
42904233 .each = .{ .once = &.{
4291 .{ ._, ._c, .in, .dst0b, ._, ._, ._ },
4234 .{ ._, .p_d, .maxs, .dst0x, .src1x, ._, ._ },
42924235 } },
42934236 }, .{
4294 .src_constraints = .{ .{ .exact_unsigned_int = 1 }, .any },
4237 .required_features = .{ .sse2, null, null, null },
4238 .src_constraints = .{
4239 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
4240 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
4241 },
42954242 .patterns = &.{
4296 .{ .src = .{ .mut_mem, .none } },
4297 .{ .src = .{ .to_mut_gpr, .none } },
4243 .{ .src = .{ .to_mut_sse, .mem } },
4244 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
4245 .{ .src = .{ .to_mut_sse, .to_sse } },
42984246 },
4299 .dst_temps = .{.{ .ref = .src0 }},
4300 .clobbers = .{ .eflags = true },
4247 .dst_temps = .{.{ .rc = .sse }},
43014248 .each = .{ .once = &.{
4302 .{ ._, ._, .xor, .dst0b, .si(1), ._, ._ },
4249 .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
4250 .{ ._, .p_d, .cmpgt, .dst0x, .src1x, ._, ._ },
4251 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
4252 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
4253 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
43034254 } },
43044255 }, .{
4305 .required_features = .{ .lzcnt, null, null, null },
4306 .src_constraints = .{ .{ .unsigned_or_exact_int = .byte }, .any },
4256 .required_features = .{ .avx2, null, null, null },
4257 .src_constraints = .{
4258 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
4259 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
4260 },
43074261 .patterns = &.{
4308 .{ .src = .{ .mem, .none } },
4309 .{ .src = .{ .to_gpr, .none } },
4262 .{ .src = .{ .to_sse, .mem } },
4263 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
4264 .{ .src = .{ .to_sse, .to_sse } },
43104265 },
4311 .dst_temps = .{.{ .rc = .general_purpose }},
4312 .clobbers = .{ .eflags = true },
4266 .dst_temps = .{.{ .rc = .sse }},
43134267 .each = .{ .once = &.{
4314 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
4315 .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ },
4316 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
4268 .{ ._, .vp_d, .maxs, .dst0y, .src0y, .src1y, ._ },
43174269 } },
43184270 }, .{
4319 .required_features = .{ .lzcnt, null, null, null },
4320 .src_constraints = .{ .{ .signed_int = .byte }, .any },
4271 .required_features = .{ .avx2, null, null, null },
4272 .src_constraints = .{
4273 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
4274 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
4275 },
43214276 .patterns = &.{
4322 .{ .src = .{ .mem, .none } },
4323 .{ .src = .{ .to_gpr, .none } },
4277 .{ .src = .{ .to_mem, .to_mem } },
43244278 },
4325 .dst_temps = .{.{ .rc = .general_purpose }},
4279 .extra_temps = .{
4280 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4281 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
4282 .unused,
4283 .unused,
4284 .unused,
4285 .unused,
4286 .unused,
4287 .unused,
4288 .unused,
4289 },
4290 .dst_temps = .{.mem},
43264291 .clobbers = .{ .eflags = true },
43274292 .each = .{ .once = &.{
4328 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
4329 .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ },
4330 .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ },
4331 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
4293 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4294 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
4295 .{ ._, .vp_d, .maxs, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
4296 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
4297 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
4298 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
43324299 } },
43334300 }, .{
4334 .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null },
4335 .src_constraints = .{ .{ .exact_int = 16 }, .any },
4301 .required_features = .{ .avx, null, null, null },
4302 .src_constraints = .{
4303 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
4304 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
4305 },
43364306 .patterns = &.{
4337 .{ .src = .{ .to_mut_gpr, .none } },
4307 .{ .src = .{ .to_mem, .to_mem } },
43384308 },
4339 .dst_temps = .{.{ .ref = .src0 }},
4309 .extra_temps = .{
4310 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4311 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
4312 .unused,
4313 .unused,
4314 .unused,
4315 .unused,
4316 .unused,
4317 .unused,
4318 .unused,
4319 },
4320 .dst_temps = .{.mem},
43404321 .clobbers = .{ .eflags = true },
43414322 .each = .{ .once = &.{
4342 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
4323 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4324 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4325 .{ ._, .vp_d, .maxs, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
4326 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4327 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4328 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
43434329 } },
43444330 }, .{
4345 .required_features = .{ .lzcnt, null, null, null },
4346 .src_constraints = .{ .{ .exact_int = 16 }, .any },
4331 .required_features = .{ .sse4_1, null, null, null },
4332 .src_constraints = .{
4333 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
4334 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
4335 },
43474336 .patterns = &.{
4348 .{ .src = .{ .mem, .none } },
4349 .{ .src = .{ .to_gpr, .none } },
4337 .{ .src = .{ .to_mem, .to_mem } },
43504338 },
4351 .dst_temps = .{.{ .rc = .general_purpose }},
4339 .extra_temps = .{
4340 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4341 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
4342 .unused,
4343 .unused,
4344 .unused,
4345 .unused,
4346 .unused,
4347 .unused,
4348 .unused,
4349 },
4350 .dst_temps = .{.mem},
43524351 .clobbers = .{ .eflags = true },
43534352 .each = .{ .once = &.{
4354 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
4353 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4354 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4355 .{ ._, .p_d, .maxs, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4356 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4357 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4358 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
43554359 } },
43564360 }, .{
4357 .required_features = .{ .lzcnt, null, null, null },
4358 .src_constraints = .{ .{ .signed_int = .word }, .any },
4361 .required_features = .{ .sse2, null, null, null },
4362 .src_constraints = .{
4363 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
4364 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
4365 },
43594366 .patterns = &.{
4360 .{ .src = .{ .to_mut_gpr, .none } },
4367 .{ .src = .{ .to_mem, .to_mem } },
43614368 },
4362 .dst_temps = .{.{ .ref = .src0 }},
4369 .extra_temps = .{
4370 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4371 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
4372 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
4373 .unused,
4374 .unused,
4375 .unused,
4376 .unused,
4377 .unused,
4378 .unused,
4379 },
4380 .dst_temps = .{.mem},
43634381 .clobbers = .{ .eflags = true },
43644382 .each = .{ .once = &.{
4365 .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ },
4366 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
4367 .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ },
4383 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4384 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4385 .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
4386 .{ ._, .p_d, .cmpgt, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4387 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },
4388 .{ ._, .p_, .andn, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4389 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
4390 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4391 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4392 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
43684393 } },
43694394 }, .{
4370 .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null },
4371 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
4395 .required_features = .{ .cmov, null, null, null },
4396 .src_constraints = .{
4397 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
4398 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
4399 },
43724400 .patterns = &.{
4373 .{ .src = .{ .to_mut_gpr, .none } },
4401 .{ .src = .{ .to_mem, .to_mem } },
43744402 },
4375 .dst_temps = .{.{ .ref = .src0 }},
4403 .extra_temps = .{
4404 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4405 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
4406 .unused,
4407 .unused,
4408 .unused,
4409 .unused,
4410 .unused,
4411 .unused,
4412 .unused,
4413 },
4414 .dst_temps = .{.mem},
43764415 .clobbers = .{ .eflags = true },
43774416 .each = .{ .once = &.{
4378 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
4379 .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ },
4417 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4418 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
4419 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
4420 .{ ._, ._l, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
4421 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
4422 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
4423 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
43804424 } },
43814425 }, .{
4382 .required_features = .{ .lzcnt, null, null, null },
4383 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
4426 .src_constraints = .{
4427 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
4428 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
4429 },
43844430 .patterns = &.{
4385 .{ .src = .{ .mem, .none } },
4386 .{ .src = .{ .to_gpr, .none } },
4431 .{ .src = .{ .to_mem, .to_mem } },
43874432 },
4388 .dst_temps = .{.{ .rc = .general_purpose }},
4433 .extra_temps = .{
4434 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4435 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
4436 .unused,
4437 .unused,
4438 .unused,
4439 .unused,
4440 .unused,
4441 .unused,
4442 .unused,
4443 },
4444 .dst_temps = .{.mem},
43894445 .clobbers = .{ .eflags = true },
43904446 .each = .{ .once = &.{
4391 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
4392 .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ },
4447 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4448 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
4449 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
4450 .{ ._, ._nl, .j, .@"1f", ._, ._, ._ },
4451 .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
4452 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
4453 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
4454 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
43934455 } },
43944456 }, .{
4395 .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null },
4396 .src_constraints = .{ .{ .exact_int = 32 }, .any },
4457 .required_features = .{ .avx, null, null, null },
4458 .src_constraints = .{
4459 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4460 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4461 },
43974462 .patterns = &.{
4398 .{ .src = .{ .to_mut_gpr, .none } },
4463 .{ .src = .{ .to_sse, .mem } },
4464 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
4465 .{ .src = .{ .to_sse, .to_sse } },
43994466 },
4400 .dst_temps = .{.{ .ref = .src0 }},
4401 .clobbers = .{ .eflags = true },
4467 .dst_temps = .{.{ .rc = .sse }},
44024468 .each = .{ .once = &.{
4403 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
4469 .{ ._, .vp_d, .maxu, .dst0x, .src0x, .src1x, ._ },
44044470 } },
44054471 }, .{
4406 .required_features = .{ .lzcnt, null, null, null },
4407 .src_constraints = .{ .{ .exact_int = 32 }, .any },
4472 .required_features = .{ .sse4_1, null, null, null },
4473 .src_constraints = .{
4474 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4475 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4476 },
44084477 .patterns = &.{
4409 .{ .src = .{ .mem, .none } },
4410 .{ .src = .{ .to_gpr, .none } },
4478 .{ .src = .{ .to_mut_sse, .mem } },
4479 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
4480 .{ .src = .{ .to_mut_sse, .to_sse } },
44114481 },
4412 .dst_temps = .{.{ .rc = .general_purpose }},
4413 .clobbers = .{ .eflags = true },
4482 .dst_temps = .{.{ .ref = .src0 }},
44144483 .each = .{ .once = &.{
4415 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
4484 .{ ._, .p_d, .maxu, .dst0x, .src1x, ._, ._ },
44164485 } },
44174486 }, .{
4418 .required_features = .{ .lzcnt, null, null, null },
4419 .src_constraints = .{ .{ .signed_int = .dword }, .any },
4487 .required_features = .{ .sse2, null, null, null },
4488 .src_constraints = .{
4489 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4490 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4491 },
44204492 .patterns = &.{
4421 .{ .src = .{ .to_mut_gpr, .none } },
4493 .{ .src = .{ .to_mut_sse, .mem } },
4494 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
4495 .{ .src = .{ .to_mut_sse, .to_sse } },
44224496 },
4423 .dst_temps = .{.{ .ref = .src0 }},
4424 .clobbers = .{ .eflags = true },
4497 .extra_temps = .{
4498 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4499 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
4500 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4501 .unused,
4502 .unused,
4503 .unused,
4504 .unused,
4505 .unused,
4506 .unused,
4507 },
4508 .dst_temps = .{.{ .rc = .sse }},
44254509 .each = .{ .once = &.{
4426 .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ },
4427 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
4428 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
4510 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4511 .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ },
4512 .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
4513 .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ },
4514 .{ ._, .p_, .xor, .tmp2x, .src1x, ._, ._ },
4515 .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ },
4516 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
4517 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
4518 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
44294519 } },
44304520 }, .{
4431 .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null },
4432 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
4521 .required_features = .{ .avx2, null, null, null },
4522 .src_constraints = .{
4523 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
4524 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
4525 },
44334526 .patterns = &.{
4434 .{ .src = .{ .to_mut_gpr, .none } },
4527 .{ .src = .{ .to_sse, .mem } },
4528 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
4529 .{ .src = .{ .to_sse, .to_sse } },
44354530 },
4436 .dst_temps = .{.{ .ref = .src0 }},
4437 .clobbers = .{ .eflags = true },
4531 .dst_temps = .{.{ .rc = .sse }},
44384532 .each = .{ .once = &.{
4439 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
4440 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
4533 .{ ._, .vp_d, .maxu, .dst0y, .src0y, .src1y, ._ },
44414534 } },
44424535 }, .{
4443 .required_features = .{ .lzcnt, null, null, null },
4444 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
4536 .required_features = .{ .avx2, null, null, null },
4537 .src_constraints = .{
4538 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
4539 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
4540 },
44454541 .patterns = &.{
4446 .{ .src = .{ .mem, .none } },
4447 .{ .src = .{ .to_gpr, .none } },
4542 .{ .src = .{ .to_mem, .to_mem } },
44484543 },
4449 .dst_temps = .{.{ .rc = .general_purpose }},
4450 .clobbers = .{ .eflags = true },
4451 .each = .{ .once = &.{
4452 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
4453 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
4454 } },
4455 }, .{
4456 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
4457 .src_constraints = .{ .{ .exact_int = 64 }, .any },
4458 .patterns = &.{
4459 .{ .src = .{ .to_mut_gpr, .none } },
4544 .extra_temps = .{
4545 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4546 .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
4547 .unused,
4548 .unused,
4549 .unused,
4550 .unused,
4551 .unused,
4552 .unused,
4553 .unused,
44604554 },
4461 .dst_temps = .{.{ .ref = .src0 }},
4555 .dst_temps = .{.mem},
44624556 .clobbers = .{ .eflags = true },
44634557 .each = .{ .once = &.{
4464 .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ },
4558 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4559 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
4560 .{ ._, .vp_d, .maxu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
4561 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
4562 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
4563 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
44654564 } },
44664565 }, .{
4467 .required_features = .{ .@"64bit", .lzcnt, null, null },
4468 .src_constraints = .{ .{ .exact_int = 64 }, .any },
4469 .patterns = &.{
4470 .{ .src = .{ .mem, .none } },
4471 .{ .src = .{ .to_gpr, .none } },
4566 .required_features = .{ .avx, null, null, null },
4567 .src_constraints = .{
4568 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4569 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
44724570 },
4473 .dst_temps = .{.{ .rc = .general_purpose }},
4474 .clobbers = .{ .eflags = true },
4475 .each = .{ .once = &.{
4476 .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ },
4477 } },
4478 }, .{
4479 .required_features = .{ .@"64bit", .lzcnt, null, null },
4480 .src_constraints = .{ .{ .signed_int = .qword }, .any },
44814571 .patterns = &.{
4482 .{ .src = .{ .mem, .none } },
4483 .{ .src = .{ .to_gpr, .none } },
4572 .{ .src = .{ .to_mem, .to_mem } },
44844573 },
4485 .dst_temps = .{.{ .rc = .general_purpose }},
4486 .clobbers = .{ .eflags = true },
4487 .each = .{ .once = &.{
4488 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
4489 .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
4490 .{ ._, ._, .lzcnt, .dst0q, .dst0q, ._, ._ },
4491 .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ },
4492 } },
4493 }, .{
4494 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
4495 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
4496 .patterns = &.{
4497 .{ .src = .{ .to_mut_gpr, .none } },
4574 .extra_temps = .{
4575 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4576 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4577 .unused,
4578 .unused,
4579 .unused,
4580 .unused,
4581 .unused,
4582 .unused,
4583 .unused,
44984584 },
4499 .dst_temps = .{.{ .ref = .src0 }},
4585 .dst_temps = .{.mem},
45004586 .clobbers = .{ .eflags = true },
45014587 .each = .{ .once = &.{
4502 .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ },
4503 .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ },
4588 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4589 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4590 .{ ._, .vp_d, .maxu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
4591 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4592 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4593 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
45044594 } },
45054595 }, .{
4506 .required_features = .{ .@"64bit", .lzcnt, null, null },
4507 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
4508 .patterns = &.{
4509 .{ .src = .{ .mem, .none } },
4510 .{ .src = .{ .to_gpr, .none } },
4596 .required_features = .{ .sse4_1, null, null, null },
4597 .src_constraints = .{
4598 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4599 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
45114600 },
4512 .dst_temps = .{.{ .rc = .general_purpose }},
4513 .clobbers = .{ .eflags = true },
4514 .each = .{ .once = &.{
4515 .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ },
4516 .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ },
4517 } },
4518 }, .{
4519 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4520 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any },
45214601 .patterns = &.{
4522 .{ .src = .{ .mem, .none } },
4523 .{ .src = .{ .to_gpr, .none } },
4602 .{ .src = .{ .to_mem, .to_mem } },
45244603 },
45254604 .extra_temps = .{
4526 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4605 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4606 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4607 .unused,
4608 .unused,
45274609 .unused,
45284610 .unused,
45294611 .unused,
45304612 .unused,
45314613 .unused,
45324614 },
4533 .dst_temps = .{.{ .rc = .general_purpose }},
4615 .dst_temps = .{.mem},
45344616 .clobbers = .{ .eflags = true },
45354617 .each = .{ .once = &.{
4536 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
4537 .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ },
4538 .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4539 .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ },
4540 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4618 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4619 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4620 .{ ._, .p_d, .maxu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4621 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4622 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4623 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
45414624 } },
45424625 }, .{
4543 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4544 .src_constraints = .{ .{ .signed_po2_int = .byte }, .any },
4626 .required_features = .{ .sse2, null, null, null },
4627 .src_constraints = .{
4628 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4629 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
4630 },
45454631 .patterns = &.{
4546 .{ .src = .{ .mem, .none } },
4547 .{ .src = .{ .to_gpr, .none } },
4632 .{ .src = .{ .to_mem, .to_mem } },
45484633 },
45494634 .extra_temps = .{
4550 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4551 .unused,
4552 .unused,
4553 .unused,
4635 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4636 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
4637 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4638 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4639 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4640 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
4641 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
45544642 .unused,
45554643 .unused,
45564644 },
4557 .dst_temps = .{.{ .rc = .general_purpose }},
4645 .dst_temps = .{.mem},
45584646 .clobbers = .{ .eflags = true },
45594647 .each = .{ .once = &.{
4560 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
4561 .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ },
4562 .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ },
4563 .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4564 .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ },
4565 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4648 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4649 .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
4650 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4651 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4652 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4653 .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
4654 .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ },
4655 .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ },
4656 .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ },
4657 .{ ._, .p_d, .cmpgt, .tmp5x, .tmp6x, ._, ._ },
4658 .{ ._, .p_, .@"and", .tmp3x, .tmp5x, ._, ._ },
4659 .{ ._, .p_, .andn, .tmp5x, .tmp4x, ._, ._ },
4660 .{ ._, .p_, .@"or", .tmp3x, .tmp5x, ._, ._ },
4661 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
4662 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4663 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
45664664 } },
45674665 }, .{
4568 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4569 .src_constraints = .{ .{ .signed_int = .byte }, .any },
4666 .required_features = .{ .cmov, null, null, null },
4667 .src_constraints = .{
4668 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
4669 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
4670 },
45704671 .patterns = &.{
4571 .{ .src = .{ .mem, .none } },
4572 .{ .src = .{ .to_gpr, .none } },
4672 .{ .src = .{ .to_mem, .to_mem } },
45734673 },
45744674 .extra_temps = .{
4675 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
45754676 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
45764677 .unused,
45774678 .unused,
45784679 .unused,
45794680 .unused,
45804681 .unused,
4682 .unused,
4683 .unused,
45814684 },
4582 .dst_temps = .{.{ .rc = .general_purpose }},
4685 .dst_temps = .{.mem},
45834686 .clobbers = .{ .eflags = true },
45844687 .each = .{ .once = &.{
4585 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
4586 .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ },
4587 .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ },
4588 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
4589 .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ },
4590 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4591 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
4688 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4689 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
4690 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
4691 .{ ._, ._b, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
4692 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
4693 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
4694 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
45924695 } },
45934696 }, .{
4594 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4595 .src_constraints = .{ .{ .unsigned_int = .byte }, .any },
4697 .src_constraints = .{
4698 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
4699 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
4700 },
45964701 .patterns = &.{
4597 .{ .src = .{ .mem, .none } },
4598 .{ .src = .{ .to_gpr, .none } },
4702 .{ .src = .{ .to_mem, .to_mem } },
45994703 },
46004704 .extra_temps = .{
4705 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
46014706 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
46024707 .unused,
46034708 .unused,
46044709 .unused,
46054710 .unused,
46064711 .unused,
4712 .unused,
4713 .unused,
46074714 },
4608 .dst_temps = .{.{ .rc = .general_purpose }},
4715 .dst_temps = .{.mem},
46094716 .clobbers = .{ .eflags = true },
46104717 .each = .{ .once = &.{
4611 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
4612 .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ },
4613 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
4614 .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ },
4615 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4616 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
4718 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4719 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
4720 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
4721 .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
4722 .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
4723 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
4724 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
4725 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
46174726 } },
46184727 }, .{
4619 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
4620 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any },
4621 .patterns = &.{
4622 .{ .src = .{ .mem, .none } },
4623 .{ .src = .{ .to_gpr, .none } },
4728 .required_features = .{ .avx, null, null, null },
4729 .src_constraints = .{
4730 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
4731 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
46244732 },
4625 .dst_temps = .{.{ .rc = .general_purpose }},
4626 .clobbers = .{ .eflags = true },
4627 .each = .{ .once = &.{
4628 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
4629 .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ },
4630 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
4631 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4632 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4633 } },
4634 }, .{
4635 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
4636 .src_constraints = .{ .{ .signed_po2_int = .byte }, .any },
46374733 .patterns = &.{
4638 .{ .src = .{ .mem, .none } },
4639 .{ .src = .{ .to_gpr, .none } },
4734 .{ .src = .{ .to_sse, .to_sse } },
46404735 },
4641 .dst_temps = .{.{ .rc = .general_purpose }},
4642 .clobbers = .{ .eflags = true },
4736 .dst_temps = .{.{ .rc = .sse }},
46434737 .each = .{ .once = &.{
4644 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
4645 .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ },
4646 .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ },
4647 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
4648 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4649 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4738 .{ ._, .vp_q, .cmpgt, .dst0x, .src1x, .src0x, ._ },
4739 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },
46504740 } },
46514741 }, .{
4652 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
4653 .src_constraints = .{ .{ .signed_int = .byte }, .any },
4742 .required_features = .{ .sse4_2, null, null, null },
4743 .src_constraints = .{
4744 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
4745 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
4746 },
46544747 .patterns = &.{
4655 .{ .src = .{ .mem, .none } },
4656 .{ .src = .{ .to_gpr, .none } },
4748 .{ .src = .{ .to_mut_sse, .mem } },
4749 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
4750 .{ .src = .{ .to_mut_sse, .to_sse } },
46574751 },
46584752 .extra_temps = .{
4659 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4753 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
4754 .unused,
4755 .unused,
4756 .unused,
46604757 .unused,
46614758 .unused,
46624759 .unused,
46634760 .unused,
46644761 .unused,
46654762 },
4666 .dst_temps = .{.{ .rc = .general_purpose }},
4667 .clobbers = .{ .eflags = true },
4763 .dst_temps = .{.{ .ref = .src0 }},
46684764 .each = .{ .once = &.{
4669 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
4670 .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ },
4671 .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ },
4672 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
4673 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
4674 .{ ._, ._c, .st, ._, ._, ._, ._ },
4675 .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ },
4765 .{ ._, ._dqa, .mov, .tmp0x, .src1x, ._, ._ },
4766 .{ ._, .p_q, .cmpgt, .tmp0x, .src0x, ._, ._ },
4767 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ },
46764768 } },
46774769 }, .{
4678 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
4679 .src_constraints = .{ .{ .unsigned_int = .byte }, .any },
4770 .required_features = .{ .avx2, null, null, null },
4771 .src_constraints = .{
4772 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
4773 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
4774 },
46804775 .patterns = &.{
4681 .{ .src = .{ .mem, .none } },
4682 .{ .src = .{ .to_gpr, .none } },
4776 .{ .src = .{ .to_sse, .to_sse } },
4777 },
4778 .dst_temps = .{.{ .rc = .sse }},
4779 .each = .{ .once = &.{
4780 .{ ._, .vp_q, .cmpgt, .dst0y, .src1y, .src0y, ._ },
4781 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },
4782 } },
4783 }, .{
4784 .required_features = .{ .avx2, null, null, null },
4785 .src_constraints = .{
4786 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
4787 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
4788 },
4789 .patterns = &.{
4790 .{ .src = .{ .to_mem, .to_mem } },
46834791 },
46844792 .extra_temps = .{
4685 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4793 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4794 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
4795 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
4796 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
46864797 .unused,
46874798 .unused,
46884799 .unused,
46894800 .unused,
46904801 .unused,
46914802 },
4692 .dst_temps = .{.{ .rc = .general_purpose }},
4803 .dst_temps = .{.mem},
46934804 .clobbers = .{ .eflags = true },
46944805 .each = .{ .once = &.{
4695 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
4696 .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ },
4697 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
4698 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
4699 .{ ._, ._c, .st, ._, ._, ._, ._ },
4700 .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ },
4806 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4807 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
4808 .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
4809 .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp2y, .tmp1y, ._ },
4810 .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
4811 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
4812 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
4813 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
47014814 } },
47024815 }, .{
4703 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any },
4816 .required_features = .{ .avx, null, null, null },
4817 .src_constraints = .{
4818 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
4819 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
4820 },
47044821 .patterns = &.{
4705 .{ .src = .{ .mem, .none } },
4706 .{ .src = .{ .to_gpr, .none } },
4822 .{ .src = .{ .to_mem, .to_mem } },
47074823 },
47084824 .extra_temps = .{
4709 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4825 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4826 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
4827 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
4828 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
47104829 .unused,
47114830 .unused,
47124831 .unused,
47134832 .unused,
47144833 .unused,
47154834 },
4716 .dst_temps = .{.{ .rc = .general_purpose }},
4835 .dst_temps = .{.mem},
47174836 .clobbers = .{ .eflags = true },
47184837 .each = .{ .once = &.{
4719 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
4720 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4721 .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ },
4722 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4838 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4839 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4840 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4841 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp2x, .tmp1x, ._ },
4842 .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x },
4843 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4844 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4845 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
47234846 } },
47244847 }, .{
4725 .src_constraints = .{ .{ .signed_po2_int = .byte }, .any },
4848 .required_features = .{ .sse4_2, null, null, null },
4849 .src_constraints = .{
4850 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
4851 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
4852 },
47264853 .patterns = &.{
4727 .{ .src = .{ .mem, .none } },
4728 .{ .src = .{ .to_gpr, .none } },
4854 .{ .src = .{ .to_mem, .to_mem } },
47294855 },
47304856 .extra_temps = .{
4731 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4857 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4858 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
4859 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
4860 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
47324861 .unused,
47334862 .unused,
47344863 .unused,
47354864 .unused,
47364865 .unused,
47374866 },
4738 .dst_temps = .{.{ .rc = .general_purpose }},
4867 .dst_temps = .{.mem},
47394868 .clobbers = .{ .eflags = true },
47404869 .each = .{ .once = &.{
4741 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
4742 .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ },
4743 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4744 .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ },
4745 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4870 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4871 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
4872 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
4873 .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
4874 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp1x, ._, ._ },
4875 .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ },
4876 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
4877 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
4878 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
47464879 } },
47474880 }, .{
4748 .src_constraints = .{ .{ .signed_int = .byte }, .any },
4881 .required_features = .{ .@"64bit", .cmov, null, null },
4882 .src_constraints = .{
4883 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
4884 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
4885 },
47494886 .patterns = &.{
4750 .{ .src = .{ .mem, .none } },
4751 .{ .src = .{ .to_gpr, .none } },
4887 .{ .src = .{ .to_mem, .to_mem } },
47524888 },
47534889 .extra_temps = .{
4754 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4890 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4891 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
4892 .unused,
4893 .unused,
47554894 .unused,
47564895 .unused,
47574896 .unused,
47584897 .unused,
47594898 .unused,
47604899 },
4761 .dst_temps = .{.{ .rc = .general_purpose }},
4900 .dst_temps = .{.mem},
47624901 .clobbers = .{ .eflags = true },
47634902 .each = .{ .once = &.{
4764 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
4765 .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ },
4766 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
4767 .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ },
4768 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4769 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
4903 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4904 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
4905 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
4906 .{ ._, ._l, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
4907 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
4908 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
4909 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
47704910 } },
47714911 }, .{
4772 .src_constraints = .{ .{ .unsigned_int = .byte }, .any },
4912 .required_features = .{ .@"64bit", null, null, null },
4913 .src_constraints = .{
4914 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
4915 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
4916 },
47734917 .patterns = &.{
4774 .{ .src = .{ .mem, .none } },
4775 .{ .src = .{ .to_gpr, .none } },
4918 .{ .src = .{ .to_mem, .to_mem } },
47764919 },
47774920 .extra_temps = .{
4778 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
4921 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
4922 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
4923 .unused,
4924 .unused,
47794925 .unused,
47804926 .unused,
47814927 .unused,
47824928 .unused,
47834929 .unused,
47844930 },
4785 .dst_temps = .{.{ .rc = .general_purpose }},
4931 .dst_temps = .{.mem},
47864932 .clobbers = .{ .eflags = true },
47874933 .each = .{ .once = &.{
4788 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
4789 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
4790 .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ },
4791 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4792 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
4934 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
4935 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
4936 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
4937 .{ ._, ._nl, .j, .@"1f", ._, ._, ._ },
4938 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
4939 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
4940 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
4941 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
47934942 } },
47944943 }, .{
4795 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4796 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any },
4944 .required_features = .{ .avx, null, null, null },
4945 .src_constraints = .{
4946 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
4947 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
4948 },
47974949 .patterns = &.{
4798 .{ .src = .{ .to_mut_gpr, .none } },
4950 .{ .src = .{ .to_sse, .mem } },
4951 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
4952 .{ .src = .{ .to_sse, .to_sse } },
47994953 },
4800 .dst_temps = .{.{ .rc = .general_purpose }},
4801 .clobbers = .{ .eflags = true },
4954 .extra_temps = .{
4955 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4956 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
4957 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
4958 .unused,
4959 .unused,
4960 .unused,
4961 .unused,
4962 .unused,
4963 .unused,
4964 },
4965 .dst_temps = .{.{ .rc = .sse }},
48024966 .each = .{ .once = &.{
4803 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
4804 .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4805 .{ ._, ._nz, .cmov, .dst0w, .src0w, ._, ._ },
4806 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4967 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4968 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
4969 .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ },
4970 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ },
4971 .{ ._, .vp_q, .cmpgt, .dst0x, .tmp2x, .dst0x, ._ },
4972 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },
48074973 } },
48084974 }, .{
4809 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4810 .src_constraints = .{ .{ .signed_int = .word }, .any },
4975 .required_features = .{ .sse4_2, null, null, null },
4976 .src_constraints = .{
4977 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
4978 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
4979 },
48114980 .patterns = &.{
4812 .{ .src = .{ .to_mut_gpr, .none } },
4981 .{ .src = .{ .to_mut_sse, .mem } },
4982 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
4983 .{ .src = .{ .to_mut_sse, .to_sse } },
48134984 },
4814 .dst_temps = .{.{ .rc = .general_purpose }},
4815 .clobbers = .{ .eflags = true },
4985 .extra_temps = .{
4986 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
4987 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
4988 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
4989 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
4990 .unused,
4991 .unused,
4992 .unused,
4993 .unused,
4994 .unused,
4995 },
4996 .dst_temps = .{.{ .ref = .src0 }},
48164997 .each = .{ .once = &.{
4817 .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ },
4818 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
4819 .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ },
4820 .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ },
4821 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4822 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
4998 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
4999 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
5000 .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
5001 .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ },
5002 .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },
5003 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
5004 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp3x, ._ },
48235005 } },
48245006 }, .{
4825 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4826 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
5007 .required_features = .{ .avx2, null, null, null },
5008 .src_constraints = .{
5009 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
5010 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
5011 },
48275012 .patterns = &.{
4828 .{ .src = .{ .to_mut_gpr, .none } },
5013 .{ .src = .{ .to_sse, .mem } },
5014 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
5015 .{ .src = .{ .to_sse, .to_sse } },
48295016 },
4830 .dst_temps = .{.{ .rc = .general_purpose }},
4831 .clobbers = .{ .eflags = true },
5017 .extra_temps = .{
5018 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
5019 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
5020 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5021 .unused,
5022 .unused,
5023 .unused,
5024 .unused,
5025 .unused,
5026 .unused,
5027 },
5028 .dst_temps = .{.{ .rc = .sse }},
48325029 .each = .{ .once = &.{
4833 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
4834 .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ },
4835 .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ },
4836 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4837 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
5030 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
5031 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },
5032 .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ },
5033 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ },
5034 .{ ._, .vp_q, .cmpgt, .dst0y, .tmp2y, .dst0y, ._ },
5035 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },
48385036 } },
48395037 }, .{
4840 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
4841 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any },
5038 .required_features = .{ .avx2, null, null, null },
5039 .src_constraints = .{
5040 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
5041 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
5042 },
48425043 .patterns = &.{
4843 .{ .src = .{ .to_mut_gpr, .none } },
5044 .{ .src = .{ .to_mem, .to_mem } },
48445045 },
4845 .dst_temps = .{.{ .ref = .src0 }},
5046 .extra_temps = .{
5047 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5048 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
5049 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5050 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5051 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5052 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5053 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
5054 .unused,
5055 .unused,
5056 },
5057 .dst_temps = .{.mem},
48465058 .clobbers = .{ .eflags = true },
48475059 .each = .{ .once = &.{
4848 .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ },
4849 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
4850 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4851 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5060 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
5061 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },
5062 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5063 .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
5064 .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
5065 .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ },
5066 .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ },
5067 .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp6y, .tmp5y, ._ },
5068 .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y },
5069 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
5070 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
5071 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
48525072 } },
48535073 }, .{
4854 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
4855 .src_constraints = .{ .{ .signed_int = .word }, .any },
5074 .required_features = .{ .avx, null, null, null },
5075 .src_constraints = .{
5076 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
5077 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
5078 },
48565079 .patterns = &.{
4857 .{ .src = .{ .to_mut_gpr, .none } },
5080 .{ .src = .{ .to_mem, .to_mem } },
48585081 },
4859 .dst_temps = .{.{ .rc = .general_purpose }},
5082 .extra_temps = .{
5083 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5084 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
5085 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5086 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5087 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5088 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5089 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5090 .unused,
5091 .unused,
5092 },
5093 .dst_temps = .{.mem},
48605094 .clobbers = .{ .eflags = true },
48615095 .each = .{ .once = &.{
4862 .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ },
4863 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
4864 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
4865 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
4866 .{ ._, ._c, .st, ._, ._, ._, ._ },
4867 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
5096 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
5097 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
5098 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5099 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5100 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5101 .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ },
5102 .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ },
5103 .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp6x, .tmp5x, ._ },
5104 .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x },
5105 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
5106 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5107 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
48685108 } },
48695109 }, .{
4870 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
4871 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
5110 .required_features = .{ .sse4_2, null, null, null },
5111 .src_constraints = .{
5112 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
5113 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
5114 },
48725115 .patterns = &.{
4873 .{ .src = .{ .to_mut_gpr, .none } },
5116 .{ .src = .{ .to_mem, .to_mem } },
48745117 },
4875 .dst_temps = .{.{ .rc = .general_purpose }},
5118 .extra_temps = .{
5119 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5120 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
5121 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5122 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5123 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5124 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
5125 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
5126 .unused,
5127 .unused,
5128 },
5129 .dst_temps = .{.mem},
48765130 .clobbers = .{ .eflags = true },
48775131 .each = .{ .once = &.{
4878 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
4879 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
4880 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
4881 .{ ._, ._c, .st, ._, ._, ._, ._ },
4882 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
5132 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
5133 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
5134 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5135 .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ },
5136 .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ },
5137 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5138 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5139 .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ },
5140 .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ },
5141 .{ ._, .p_q, .cmpgt, .tmp6x, .tmp5x, ._, ._ },
5142 .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp6x, ._ },
5143 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
5144 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
5145 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
48835146 } },
48845147 }, .{
4885 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any },
5148 .required_features = .{ .@"64bit", .cmov, null, null },
5149 .src_constraints = .{
5150 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
5151 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
5152 },
48865153 .patterns = &.{
4887 .{ .src = .{ .mem, .none } },
4888 .{ .src = .{ .to_gpr, .none } },
5154 .{ .src = .{ .to_mem, .to_mem } },
48895155 },
4890 .dst_temps = .{.{ .rc = .general_purpose }},
5156 .extra_temps = .{
5157 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5158 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
5159 .unused,
5160 .unused,
5161 .unused,
5162 .unused,
5163 .unused,
5164 .unused,
5165 .unused,
5166 },
5167 .dst_temps = .{.mem},
48915168 .clobbers = .{ .eflags = true },
48925169 .each = .{ .once = &.{
4893 .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4894 .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ },
4895 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5170 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5171 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
5172 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5173 .{ ._, ._b, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5174 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
5175 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
5176 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
48965177 } },
48975178 }, .{
4898 .src_constraints = .{ .{ .signed_int = .word }, .any },
5179 .required_features = .{ .@"64bit", null, null, null },
5180 .src_constraints = .{
5181 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
5182 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
5183 },
48995184 .patterns = &.{
4900 .{ .src = .{ .to_mut_gpr, .none } },
5185 .{ .src = .{ .to_mem, .to_mem } },
49015186 },
49025187 .extra_temps = .{
4903 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
5188 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5189 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
5190 .unused,
5191 .unused,
49045192 .unused,
49055193 .unused,
49065194 .unused,
49075195 .unused,
49085196 .unused,
49095197 },
4910 .dst_temps = .{.{ .rc = .general_purpose }},
5198 .dst_temps = .{.mem},
49115199 .clobbers = .{ .eflags = true },
49125200 .each = .{ .once = &.{
4913 .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ },
4914 .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ },
4915 .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ },
4916 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4917 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
5201 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5202 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
5203 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5204 .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
5205 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5206 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
5207 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
5208 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
49185209 } },
49195210 }, .{
4920 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
5211 .required_features = .{ .@"64bit", .cmov, null, null },
5212 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },
49215213 .patterns = &.{
4922 .{ .src = .{ .mem, .none } },
4923 .{ .src = .{ .to_gpr, .none } },
5214 .{ .src = .{ .to_mem, .to_mem } },
49245215 },
49255216 .extra_temps = .{
4926 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
5217 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5218 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5219 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5220 .{ .type = .u64, .kind = .{ .reg = .rcx } },
49275221 .unused,
49285222 .unused,
49295223 .unused,
49305224 .unused,
49315225 .unused,
49325226 },
4933 .dst_temps = .{.{ .rc = .general_purpose }},
5227 .dst_temps = .{.mem},
49345228 .clobbers = .{ .eflags = true },
49355229 .each = .{ .once = &.{
4936 .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ },
4937 .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ },
4938 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4939 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
5230 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5231 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },
5232 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5233 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
5234 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5235 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
5236 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
5237 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
5238 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
5239 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5240 .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
5241 .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
5242 .{ ._, ._l, .cmov, .tmp1p, .tmp2p, ._, ._ },
5243 .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
5244 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
5245 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
5246 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
5247 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
49405248 } },
49415249 }, .{
4942 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4943 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any },
5250 .required_features = .{ .@"64bit", null, null, null },
5251 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },
49445252 .patterns = &.{
4945 .{ .src = .{ .to_mut_gpr, .none } },
5253 .{ .src = .{ .to_mem, .to_mem } },
49465254 },
4947 .dst_temps = .{.{ .rc = .general_purpose }},
5255 .extra_temps = .{
5256 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5257 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5258 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5259 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5260 .unused,
5261 .unused,
5262 .unused,
5263 .unused,
5264 .unused,
5265 },
5266 .dst_temps = .{.mem},
49485267 .clobbers = .{ .eflags = true },
49495268 .each = .{ .once = &.{
4950 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
4951 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4952 .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ },
4953 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5269 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5270 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },
5271 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5272 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
5273 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5274 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
5275 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
5276 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
5277 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
5278 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5279 .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
5280 .{ ._, ._nl, .j, .@"1f", ._, ._, ._ },
5281 .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
5282 .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
5283 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
5284 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
5285 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
5286 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
49545287 } },
49555288 }, .{
4956 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4957 .src_constraints = .{ .{ .signed_int = .dword }, .any },
5289 .required_features = .{ .@"64bit", .cmov, null, null },
5290 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },
49585291 .patterns = &.{
4959 .{ .src = .{ .to_mut_gpr, .none } },
5292 .{ .src = .{ .to_mem, .to_mem } },
49605293 },
4961 .dst_temps = .{.{ .rc = .general_purpose }},
5294 .extra_temps = .{
5295 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5296 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5297 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5298 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5299 .unused,
5300 .unused,
5301 .unused,
5302 .unused,
5303 .unused,
5304 },
5305 .dst_temps = .{.mem},
49625306 .clobbers = .{ .eflags = true },
49635307 .each = .{ .once = &.{
4964 .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ },
4965 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
4966 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
4967 .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ },
4968 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4969 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
5308 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5309 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
5310 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5311 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
5312 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5313 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
5314 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
5315 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
5316 .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ },
5317 .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
5318 .{ ._, ._b, .cmov, .tmp1p, .tmp2p, ._, ._ },
5319 .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
5320 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
5321 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
5322 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
5323 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
49705324 } },
49715325 }, .{
4972 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
4973 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
5326 .required_features = .{ .@"64bit", null, null, null },
5327 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },
49745328 .patterns = &.{
4975 .{ .src = .{ .to_mut_gpr, .none } },
5329 .{ .src = .{ .to_mem, .to_mem } },
49765330 },
4977 .dst_temps = .{.{ .rc = .general_purpose }},
5331 .extra_temps = .{
5332 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5333 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5334 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5335 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5336 .unused,
5337 .unused,
5338 .unused,
5339 .unused,
5340 .unused,
5341 },
5342 .dst_temps = .{.mem},
49785343 .clobbers = .{ .eflags = true },
49795344 .each = .{ .once = &.{
4980 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
4981 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
4982 .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ },
4983 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
4984 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
5345 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5346 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
5347 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5348 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
5349 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
5350 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
5351 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
5352 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
5353 .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ },
5354 .{ ._, ._nb, .j, .@"1f", ._, ._, ._ },
5355 .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
5356 .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
5357 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
5358 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
5359 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
5360 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
49855361 } },
4986 }, .{
4987 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
4988 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any },
5362 } }) catch |err| switch (err) {
5363 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
5364 @tagName(air_tag),
5365 cg.typeOf(bin_op.lhs).fmt(pt),
5366 ops[0].tracking(cg),
5367 ops[1].tracking(cg),
5368 }),
5369 else => |e| return e,
5370 };
5371 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
5372 },
5373 .min => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else fallback: {
5374 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
5375 if (cg.typeOf(bin_op.lhs).scalarType(zcu).isRuntimeFloat()) break :fallback try cg.airBinOp(inst, air_tag);
5376 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
5377 var res: [1]Temp = undefined;
5378 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, comptime &.{ .{
5379 .required_features = .{ .cmov, null, null, null },
5380 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },
49895381 .patterns = &.{
4990 .{ .src = .{ .to_mut_gpr, .none } },
5382 .{ .src = .{ .to_mut_gpr, .to_gpr } },
49915383 },
49925384 .dst_temps = .{.{ .ref = .src0 }},
49935385 .clobbers = .{ .eflags = true },
49945386 .each = .{ .once = &.{
4995 .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ },
4996 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
4997 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
4998 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5387 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
5388 .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ },
49995389 } },
50005390 }, .{
5001 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
5002 .src_constraints = .{ .{ .signed_int = .dword }, .any },
5391 .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte } },
50035392 .patterns = &.{
5004 .{ .src = .{ .to_mut_gpr, .none } },
5393 .{ .src = .{ .to_mut_gpr, .mem } },
5394 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5395 .{ .src = .{ .to_mut_gpr, .to_gpr } },
50055396 },
5006 .dst_temps = .{.{ .rc = .general_purpose }},
5397 .dst_temps = .{.{ .ref = .src0 }},
50075398 .clobbers = .{ .eflags = true },
50085399 .each = .{ .once = &.{
5009 .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ },
5010 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
5011 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
5012 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
5013 .{ ._, ._c, .st, ._, ._, ._, ._ },
5014 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
5400 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
5401 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5402 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },
50155403 } },
50165404 }, .{
5017 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
5018 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
5405 .required_features = .{ .cmov, null, null, null },
5406 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },
50195407 .patterns = &.{
5020 .{ .src = .{ .to_mut_gpr, .none } },
5408 .{ .src = .{ .to_mut_gpr, .to_gpr } },
50215409 },
5022 .dst_temps = .{.{ .rc = .general_purpose }},
5410 .dst_temps = .{.{ .ref = .src0 }},
50235411 .clobbers = .{ .eflags = true },
50245412 .each = .{ .once = &.{
5025 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
5026 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
5027 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
5028 .{ ._, ._c, .st, ._, ._, ._, ._ },
5029 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
5413 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
5414 .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ },
50305415 } },
50315416 }, .{
5032 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any },
5417 .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte } },
50335418 .patterns = &.{
5034 .{ .src = .{ .mem, .none } },
5035 .{ .src = .{ .to_gpr, .none } },
5419 .{ .src = .{ .to_mut_gpr, .mem } },
5420 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5421 .{ .src = .{ .to_mut_gpr, .to_gpr } },
50365422 },
5037 .dst_temps = .{.{ .rc = .general_purpose }},
5423 .dst_temps = .{.{ .ref = .src0 }},
50385424 .clobbers = .{ .eflags = true },
50395425 .each = .{ .once = &.{
5040 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
5041 .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ },
5042 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5426 .{ ._, ._, .cmp, .src0b, .src1b, ._, ._ },
5427 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5428 .{ ._, ._, .mov, .dst0b, .src1b, ._, ._ },
50435429 } },
50445430 }, .{
5045 .src_constraints = .{ .{ .signed_int = .dword }, .any },
5431 .required_features = .{ .cmov, null, null, null },
5432 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },
50465433 .patterns = &.{
5047 .{ .src = .{ .to_mut_gpr, .none } },
5048 },
5049 .extra_temps = .{
5050 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5051 .unused,
5052 .unused,
5053 .unused,
5054 .unused,
5055 .unused,
5434 .{ .src = .{ .to_mut_gpr, .mem } },
5435 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5436 .{ .src = .{ .to_mut_gpr, .to_gpr } },
50565437 },
5057 .dst_temps = .{.{ .rc = .general_purpose }},
5438 .dst_temps = .{.{ .ref = .src0 }},
50585439 .clobbers = .{ .eflags = true },
50595440 .each = .{ .once = &.{
5060 .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ },
5061 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
5062 .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ },
5063 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5064 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
5441 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
5442 .{ ._, ._ge, .cmov, .dst0w, .src1w, ._, ._ },
50655443 } },
50665444 }, .{
5067 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
5445 .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word } },
50685446 .patterns = &.{
5069 .{ .src = .{ .mem, .none } },
5070 .{ .src = .{ .to_gpr, .none } },
5447 .{ .src = .{ .to_mut_gpr, .mem } },
5448 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5449 .{ .src = .{ .to_mut_gpr, .to_gpr } },
50715450 },
5072 .extra_temps = .{
5073 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5074 .unused,
5075 .unused,
5076 .unused,
5077 .unused,
5078 .unused,
5451 .dst_temps = .{.{ .ref = .src0 }},
5452 .clobbers = .{ .eflags = true },
5453 .each = .{ .once = &.{
5454 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
5455 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5456 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },
5457 } },
5458 }, .{
5459 .required_features = .{ .cmov, null, null, null },
5460 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },
5461 .patterns = &.{
5462 .{ .src = .{ .to_mut_gpr, .mem } },
5463 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5464 .{ .src = .{ .to_mut_gpr, .to_gpr } },
50795465 },
5080 .dst_temps = .{.{ .rc = .general_purpose }},
5466 .dst_temps = .{.{ .ref = .src0 }},
50815467 .clobbers = .{ .eflags = true },
50825468 .each = .{ .once = &.{
5083 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
5084 .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ },
5085 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5086 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
5469 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
5470 .{ ._, ._ae, .cmov, .dst0w, .src1w, ._, ._ },
50875471 } },
50885472 }, .{
5089 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null },
5090 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any },
5473 .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word } },
50915474 .patterns = &.{
5092 .{ .src = .{ .to_mut_gpr, .none } },
5475 .{ .src = .{ .to_mut_gpr, .mem } },
5476 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5477 .{ .src = .{ .to_mut_gpr, .to_gpr } },
50935478 },
5094 .dst_temps = .{.{ .rc = .general_purpose }},
5479 .dst_temps = .{.{ .ref = .src0 }},
50955480 .clobbers = .{ .eflags = true },
50965481 .each = .{ .once = &.{
5097 .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ },
5098 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
5099 .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ },
5100 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5482 .{ ._, ._, .cmp, .src0w, .src1w, ._, ._ },
5483 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5484 .{ ._, ._, .mov, .dst0w, .src1w, ._, ._ },
51015485 } },
51025486 }, .{
5103 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null },
5104 .src_constraints = .{ .{ .signed_int = .qword }, .any },
5487 .required_features = .{ .cmov, null, null, null },
5488 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },
51055489 .patterns = &.{
5106 .{ .src = .{ .mem, .none } },
5107 .{ .src = .{ .to_gpr, .none } },
5490 .{ .src = .{ .to_mut_gpr, .mem } },
5491 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5492 .{ .src = .{ .to_mut_gpr, .to_gpr } },
51085493 },
5109 .extra_temps = .{
5110 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
5111 .unused,
5112 .unused,
5113 .unused,
5114 .unused,
5115 .unused,
5494 .dst_temps = .{.{ .ref = .src0 }},
5495 .clobbers = .{ .eflags = true },
5496 .each = .{ .once = &.{
5497 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
5498 .{ ._, ._ge, .cmov, .dst0d, .src1d, ._, ._ },
5499 } },
5500 }, .{
5501 .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword } },
5502 .patterns = &.{
5503 .{ .src = .{ .to_mut_gpr, .mem } },
5504 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5505 .{ .src = .{ .to_mut_gpr, .to_gpr } },
51165506 },
5117 .dst_temps = .{.{ .rc = .general_purpose }},
5507 .dst_temps = .{.{ .ref = .src0 }},
51185508 .clobbers = .{ .eflags = true },
51195509 .each = .{ .once = &.{
5120 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
5121 .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ },
5122 .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ },
5123 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
5124 .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ },
5125 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5126 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
5510 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
5511 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5512 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },
51275513 } },
51285514 }, .{
5129 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null },
5130 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
5515 .required_features = .{ .cmov, null, null, null },
5516 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },
51315517 .patterns = &.{
5132 .{ .src = .{ .to_mut_gpr, .none } },
5518 .{ .src = .{ .to_mut_gpr, .mem } },
5519 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5520 .{ .src = .{ .to_mut_gpr, .to_gpr } },
51335521 },
5134 .dst_temps = .{.{ .rc = .general_purpose }},
5522 .dst_temps = .{.{ .ref = .src0 }},
51355523 .clobbers = .{ .eflags = true },
51365524 .each = .{ .once = &.{
5137 .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ },
5138 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
5139 .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ },
5140 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5141 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
5525 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
5526 .{ ._, ._ae, .cmov, .dst0d, .src1d, ._, ._ },
51425527 } },
51435528 }, .{
5144 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
5145 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any },
5529 .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword } },
51465530 .patterns = &.{
5147 .{ .src = .{ .to_mut_gpr, .none } },
5531 .{ .src = .{ .to_mut_gpr, .mem } },
5532 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5533 .{ .src = .{ .to_mut_gpr, .to_gpr } },
51485534 },
51495535 .dst_temps = .{.{ .ref = .src0 }},
51505536 .clobbers = .{ .eflags = true },
51515537 .each = .{ .once = &.{
5152 .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ },
5153 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
5154 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
5155 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5538 .{ ._, ._, .cmp, .src0d, .src1d, ._, ._ },
5539 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5540 .{ ._, ._, .mov, .dst0d, .src1d, ._, ._ },
51565541 } },
51575542 }, .{
5158 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
5159 .src_constraints = .{ .{ .signed_int = .qword }, .any },
5543 .required_features = .{ .@"64bit", .cmov, null, null },
5544 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },
51605545 .patterns = &.{
5161 .{ .src = .{ .mem, .none } },
5162 .{ .src = .{ .to_gpr, .none } },
5546 .{ .src = .{ .to_mut_gpr, .mem } },
5547 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5548 .{ .src = .{ .to_mut_gpr, .to_gpr } },
51635549 },
5164 .extra_temps = .{
5165 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
5166 .unused,
5167 .unused,
5168 .unused,
5169 .unused,
5170 .unused,
5550 .dst_temps = .{.{ .ref = .src0 }},
5551 .clobbers = .{ .eflags = true },
5552 .each = .{ .once = &.{
5553 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
5554 .{ ._, ._ge, .cmov, .dst0q, .src1q, ._, ._ },
5555 } },
5556 }, .{
5557 .required_features = .{ .@"64bit", null, null, null },
5558 .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword } },
5559 .patterns = &.{
5560 .{ .src = .{ .to_mut_gpr, .mem } },
5561 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5562 .{ .src = .{ .to_mut_gpr, .to_gpr } },
51715563 },
5172 .dst_temps = .{.{ .rc = .general_purpose }},
5564 .dst_temps = .{.{ .ref = .src0 }},
51735565 .clobbers = .{ .eflags = true },
51745566 .each = .{ .once = &.{
5175 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
5176 .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ },
5177 .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ },
5178 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
5179 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
5180 .{ ._, ._c, .st, ._, ._, ._, ._ },
5181 .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ },
5567 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
5568 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5569 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },
51825570 } },
51835571 }, .{
5184 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
5185 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
5572 .required_features = .{ .@"64bit", .cmov, null, null },
5573 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },
51865574 .patterns = &.{
5187 .{ .src = .{ .to_mut_gpr, .none } },
5575 .{ .src = .{ .to_mut_gpr, .mem } },
5576 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5577 .{ .src = .{ .to_mut_gpr, .to_gpr } },
51885578 },
5189 .dst_temps = .{.{ .rc = .general_purpose }},
5579 .dst_temps = .{.{ .ref = .src0 }},
51905580 .clobbers = .{ .eflags = true },
51915581 .each = .{ .once = &.{
5192 .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ },
5193 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
5194 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
5195 .{ ._, ._c, .st, ._, ._, ._, ._ },
5196 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
5582 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
5583 .{ ._, ._ae, .cmov, .dst0q, .src1q, ._, ._ },
51975584 } },
51985585 }, .{
51995586 .required_features = .{ .@"64bit", null, null, null },
5200 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any },
5587 .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword } },
52015588 .patterns = &.{
5202 .{ .src = .{ .mem, .none } },
5203 .{ .src = .{ .to_gpr, .none } },
5589 .{ .src = .{ .to_mut_gpr, .mem } },
5590 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
5591 .{ .src = .{ .to_mut_gpr, .to_gpr } },
52045592 },
5205 .dst_temps = .{.{ .rc = .general_purpose }},
5593 .dst_temps = .{.{ .ref = .src0 }},
52065594 .clobbers = .{ .eflags = true },
52075595 .each = .{ .once = &.{
5208 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
5209 .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ },
5210 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5596 .{ ._, ._, .cmp, .src0q, .src1q, ._, ._ },
5597 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5598 .{ ._, ._, .mov, .dst0q, .src1q, ._, ._ },
52115599 } },
52125600 }, .{
5213 .required_features = .{ .@"64bit", null, null, null },
5214 .src_constraints = .{ .{ .signed_int = .qword }, .any },
5601 .required_features = .{ .@"64bit", .cmov, null, null },
5602 .src_constraints = .{ .any_signed_int, .any_signed_int },
52155603 .patterns = &.{
5216 .{ .src = .{ .mem, .none } },
5217 .{ .src = .{ .to_gpr, .none } },
5604 .{ .src = .{ .to_mem, .to_mem } },
52185605 },
52195606 .extra_temps = .{
5220 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
5607 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5608 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5609 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5610 .unused,
52215611 .unused,
52225612 .unused,
52235613 .unused,
52245614 .unused,
52255615 .unused,
52265616 },
5227 .dst_temps = .{.{ .rc = .general_purpose }},
5617 .dst_temps = .{.mem},
52285618 .clobbers = .{ .eflags = true },
52295619 .each = .{ .once = &.{
5230 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
5231 .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
5232 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
5233 .{ ._, ._r, .bs, .tmp0q, .dst0q, ._, ._ },
5234 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5235 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
5620 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
5621 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5622 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
5623 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
5624 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5625 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5626 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
5627 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
5628 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
5629 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
5630 .{ ._, ._ge, .cmov, .tmp0p, .tmp1p, ._, ._ },
5631 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
5632 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
5633 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
52365634 } },
52375635 }, .{
52385636 .required_features = .{ .@"64bit", null, null, null },
5239 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
5637 .src_constraints = .{ .any_signed_int, .any_signed_int },
52405638 .patterns = &.{
5241 .{ .src = .{ .mem, .none } },
5242 .{ .src = .{ .to_gpr, .none } },
5639 .{ .src = .{ .to_mem, .to_mem } },
52435640 },
52445641 .extra_temps = .{
5245 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
5642 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5643 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5644 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5645 .unused,
52465646 .unused,
52475647 .unused,
52485648 .unused,
52495649 .unused,
52505650 .unused,
52515651 },
5252 .dst_temps = .{.{ .rc = .general_purpose }},
5652 .dst_temps = .{.mem},
52535653 .clobbers = .{ .eflags = true },
52545654 .each = .{ .once = &.{
5255 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
5256 .{ ._, ._r, .bs, .tmp0q, .src0q, ._, ._ },
5257 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5258 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
5655 .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
5656 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5657 .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
5658 .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
5659 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5660 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5661 .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
5662 .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
5663 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
5664 .{ ._, ._nge, .j, .@"0f", ._, ._, ._ },
5665 .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ },
5666 .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
5667 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
5668 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
52595669 } },
52605670 }, .{
5261 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
5262 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
5671 .required_features = .{ .@"64bit", .cmov, null, null },
5672 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },
52635673 .patterns = &.{
5264 .{ .src = .{ .to_mem, .none } },
5674 .{ .src = .{ .to_mem, .to_mem } },
52655675 },
52665676 .extra_temps = .{
5267 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5677 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5678 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5679 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5680 .unused,
52685681 .unused,
52695682 .unused,
52705683 .unused,
52715684 .unused,
52725685 .unused,
52735686 },
5274 .dst_temps = .{.{ .rc = .general_purpose }},
5687 .dst_temps = .{.mem},
52755688 .clobbers = .{ .eflags = true },
52765689 .each = .{ .once = &.{
5277 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
5278 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
5279 .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5280 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
5281 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5282 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5283 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5284 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
5285 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
5690 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
5691 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5692 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
5693 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
5694 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5695 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5696 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
5697 .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
5698 .{ ._, ._ae, .cmov, .tmp0p, .tmp1p, ._, ._ },
5699 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
5700 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
5701 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
52865702 } },
52875703 }, .{
5288 .required_features = .{ .@"64bit", .lzcnt, null, null },
5289 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
5704 .required_features = .{ .@"64bit", null, null, null },
5705 .src_constraints = .{ .any_unsigned_int, .any_unsigned_int },
52905706 .patterns = &.{
5291 .{ .src = .{ .to_mem, .none } },
5707 .{ .src = .{ .to_mem, .to_mem } },
52925708 },
52935709 .extra_temps = .{
5294 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5710 .{ .type = .isize, .kind = .{ .reg = .rsi } },
5711 .{ .type = .u64, .kind = .{ .reg = .rdi } },
5712 .{ .type = .u64, .kind = .{ .reg = .rcx } },
5713 .unused,
52955714 .unused,
52965715 .unused,
52975716 .unused,
52985717 .unused,
52995718 .unused,
53005719 },
5301 .dst_temps = .{.{ .rc = .general_purpose }},
5720 .dst_temps = .{.mem},
53025721 .clobbers = .{ .eflags = true },
53035722 .each = .{ .once = &.{
5304 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
5305 .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5306 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
5307 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5308 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5309 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5310 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
5311 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
5723 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
5724 .{ ._, ._c, .cl, ._, ._, ._, ._ },
5725 .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
5726 .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
5727 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5728 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
5729 .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ },
5730 .{ ._, ._nae, .j, .@"0f", ._, ._, ._ },
5731 .{ ._, ._, .lea, .tmp0p, .mem(.src1), ._, ._ },
5732 .{ .@"0:", ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
5733 .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ },
5734 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
53125735 } },
53135736 }, .{
5314 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
5315 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
5737 .required_features = .{ .avx, null, null, null },
5738 .src_constraints = .{
5739 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5740 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5741 },
53165742 .patterns = &.{
5317 .{ .src = .{ .to_mem, .none } },
5743 .{ .src = .{ .to_sse, .mem } },
5744 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
5745 .{ .src = .{ .to_sse, .to_sse } },
5746 },
5747 .dst_temps = .{.{ .rc = .sse }},
5748 .each = .{ .once = &.{
5749 .{ ._, .vp_b, .mins, .dst0x, .src0x, .src1x, ._ },
5750 } },
5751 }, .{
5752 .required_features = .{ .sse4_1, null, null, null },
5753 .src_constraints = .{
5754 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5755 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5756 },
5757 .patterns = &.{
5758 .{ .src = .{ .to_mut_sse, .mem } },
5759 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
5760 .{ .src = .{ .to_mut_sse, .to_sse } },
5761 },
5762 .dst_temps = .{.{ .ref = .src0 }},
5763 .each = .{ .once = &.{
5764 .{ ._, .p_b, .mins, .dst0x, .src1x, ._, ._ },
5765 } },
5766 }, .{
5767 .required_features = .{ .sse2, null, null, null },
5768 .src_constraints = .{
5769 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5770 .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } },
5771 },
5772 .patterns = &.{
5773 .{ .src = .{ .to_mut_sse, .mem } },
5774 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
5775 .{ .src = .{ .to_mut_sse, .to_sse } },
5776 },
5777 .dst_temps = .{.{ .rc = .sse }},
5778 .each = .{ .once = &.{
5779 .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ },
5780 .{ ._, .p_b, .cmpgt, .dst0x, .src0x, ._, ._ },
5781 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
5782 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
5783 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
5784 } },
5785 }, .{
5786 .required_features = .{ .avx2, null, null, null },
5787 .src_constraints = .{
5788 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
5789 .{ .scalar_signed_int = .{ .of = .yword, .is = .byte } },
5790 },
5791 .patterns = &.{
5792 .{ .src = .{ .to_sse, .mem } },
5793 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
5794 .{ .src = .{ .to_sse, .to_sse } },
5795 },
5796 .dst_temps = .{.{ .rc = .sse }},
5797 .each = .{ .once = &.{
5798 .{ ._, .vp_b, .mins, .dst0y, .src0y, .src1y, ._ },
5799 } },
5800 }, .{
5801 .required_features = .{ .avx2, null, null, null },
5802 .src_constraints = .{
5803 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
5804 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .byte } },
5805 },
5806 .patterns = &.{
5807 .{ .src = .{ .to_mem, .to_mem } },
53185808 },
53195809 .extra_temps = .{
5320 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5810 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5811 .{ .type = .vector_32_i8, .kind = .{ .rc = .sse } },
5812 .unused,
5813 .unused,
53215814 .unused,
53225815 .unused,
53235816 .unused,
53245817 .unused,
53255818 .unused,
53265819 },
5327 .dst_temps = .{.{ .rc = .general_purpose }},
5820 .dst_temps = .{.mem},
53285821 .clobbers = .{ .eflags = true },
53295822 .each = .{ .once = &.{
5330 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
5331 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
5332 .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5333 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
5334 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5823 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5824 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
5825 .{ ._, .vp_b, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
5826 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
5827 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
53355828 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5336 .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ },
5337 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5338 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
5339 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
53405829 } },
53415830 }, .{
5342 .required_features = .{ .@"64bit", null, null, null },
5343 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
5831 .required_features = .{ .avx, null, null, null },
5832 .src_constraints = .{
5833 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5834 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5835 },
53445836 .patterns = &.{
5345 .{ .src = .{ .to_mem, .none } },
5837 .{ .src = .{ .to_mem, .to_mem } },
53465838 },
53475839 .extra_temps = .{
5348 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5840 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5841 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
5842 .unused,
5843 .unused,
53495844 .unused,
53505845 .unused,
53515846 .unused,
53525847 .unused,
53535848 .unused,
53545849 },
5355 .dst_temps = .{.{ .rc = .general_purpose }},
5850 .dst_temps = .{.mem},
53565851 .clobbers = .{ .eflags = true },
53575852 .each = .{ .once = &.{
5358 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
5359 .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ },
5360 .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5361 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
5362 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5853 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5854 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5855 .{ ._, .vp_b, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
5856 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5857 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
53635858 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5364 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5365 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
5366 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
53675859 } },
53685860 }, .{
5369 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
5370 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
5861 .required_features = .{ .sse4_1, null, null, null },
5862 .src_constraints = .{
5863 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5864 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5865 },
53715866 .patterns = &.{
5372 .{ .src = .{ .to_mem, .none } },
5867 .{ .src = .{ .to_mem, .to_mem } },
53735868 },
53745869 .extra_temps = .{
5375 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5870 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5871 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
5872 .unused,
5873 .unused,
53765874 .unused,
53775875 .unused,
53785876 .unused,
53795877 .unused,
53805878 .unused,
53815879 },
5382 .dst_temps = .{.{ .rc = .general_purpose }},
5880 .dst_temps = .{.mem},
53835881 .clobbers = .{ .eflags = true },
53845882 .each = .{ .once = &.{
5385 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
5386 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
5387 .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5388 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
5389 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5883 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5884 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5885 .{ ._, .p_b, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5886 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5887 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
53905888 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5391 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5392 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
5393 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
53945889 } },
53955890 }, .{
5396 .required_features = .{ .@"64bit", .lzcnt, null, null },
5397 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
5891 .required_features = .{ .sse2, null, null, null },
5892 .src_constraints = .{
5893 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5894 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } },
5895 },
53985896 .patterns = &.{
5399 .{ .src = .{ .to_mem, .none } },
5897 .{ .src = .{ .to_mem, .to_mem } },
54005898 },
54015899 .extra_temps = .{
5402 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5900 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5901 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
5902 .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } },
5903 .unused,
54035904 .unused,
54045905 .unused,
54055906 .unused,
54065907 .unused,
54075908 .unused,
54085909 },
5409 .dst_temps = .{.{ .rc = .general_purpose }},
5910 .dst_temps = .{.mem},
54105911 .clobbers = .{ .eflags = true },
54115912 .each = .{ .once = &.{
5412 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
5413 .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5414 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
5415 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5913 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5914 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5915 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
5916 .{ ._, .p_b, .cmpgt, .tmp1x, .tmp2x, ._, ._ },
5917 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },
5918 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
5919 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
5920 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
5921 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
54165922 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5417 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5418 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
5419 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
54205923 } },
54215924 }, .{
5422 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
5423 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
5925 .required_features = .{ .cmov, .slow_incdec, null, null },
5926 .src_constraints = .{
5927 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5928 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5929 },
54245930 .patterns = &.{
5425 .{ .src = .{ .to_mem, .none } },
5931 .{ .src = .{ .to_mem, .to_mem } },
54265932 },
54275933 .extra_temps = .{
5428 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5934 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5935 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5936 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5937 .unused,
54295938 .unused,
54305939 .unused,
54315940 .unused,
54325941 .unused,
54335942 .unused,
54345943 },
5435 .dst_temps = .{.{ .rc = .general_purpose }},
5944 .dst_temps = .{.mem},
54365945 .clobbers = .{ .eflags = true },
54375946 .each = .{ .once = &.{
5438 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
5439 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
5440 .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5441 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
5442 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5947 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5948 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
5949 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
5950 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
5951 .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ },
5952 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
5953 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
54435954 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5444 .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ },
5445 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5446 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
5447 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
54485955 } },
54495956 }, .{
5450 .required_features = .{ .@"64bit", null, null, null },
5451 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
5957 .required_features = .{ .cmov, null, null, null },
5958 .src_constraints = .{
5959 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5960 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5961 },
54525962 .patterns = &.{
5453 .{ .src = .{ .to_mem, .none } },
5963 .{ .src = .{ .to_mem, .to_mem } },
54545964 },
54555965 .extra_temps = .{
5456 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5966 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5967 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5968 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
5969 .unused,
54575970 .unused,
54585971 .unused,
54595972 .unused,
54605973 .unused,
54615974 .unused,
54625975 },
5463 .dst_temps = .{.{ .rc = .general_purpose }},
5976 .dst_temps = .{.mem},
54645977 .clobbers = .{ .eflags = true },
54655978 .each = .{ .once = &.{
5466 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
5467 .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ },
5468 .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5469 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
5470 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5471 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5472 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5473 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
5474 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
5979 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
5980 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
5981 .{ ._, ._, .movsx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
5982 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
5983 .{ ._, ._ge, .cmov, .tmp1d, .tmp2d, ._, ._ },
5984 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
5985 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5986 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
54755987 } },
54765988 }, .{
5477 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
5478 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
5989 .required_features = .{ .slow_incdec, null, null, null },
5990 .src_constraints = .{
5991 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5992 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
5993 },
54795994 .patterns = &.{
5480 .{ .src = .{ .to_mem, .none } },
5995 .{ .src = .{ .to_mem, .to_mem } },
54815996 },
54825997 .extra_temps = .{
5483 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5484 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
5998 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5999 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
6000 .unused,
6001 .unused,
6002 .unused,
54856003 .unused,
54866004 .unused,
54876005 .unused,
54886006 .unused,
54896007 },
5490 .dst_temps = .{.{ .rc = .general_purpose }},
6008 .dst_temps = .{.mem},
54916009 .clobbers = .{ .eflags = true },
54926010 .each = .{ .once = &.{
5493 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
5494 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
5495 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
5496 .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
5497 .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ },
5498 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
5499 .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
5500 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
6011 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6012 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6013 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6014 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
6015 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6016 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
6017 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
55016018 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5502 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5503 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
5504 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
55056019 } },
55066020 }, .{
5507 .required_features = .{ .@"64bit", .lzcnt, null, null },
5508 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
6021 .src_constraints = .{
6022 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
6023 .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } },
6024 },
55096025 .patterns = &.{
5510 .{ .src = .{ .to_mem, .none } },
6026 .{ .src = .{ .to_mem, .to_mem } },
55116027 },
55126028 .extra_temps = .{
5513 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5514 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6029 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6030 .{ .type = .i8, .kind = .{ .rc = .general_purpose } },
6031 .unused,
6032 .unused,
6033 .unused,
55156034 .unused,
55166035 .unused,
55176036 .unused,
55186037 .unused,
55196038 },
5520 .dst_temps = .{.{ .rc = .general_purpose }},
6039 .dst_temps = .{.mem},
55216040 .clobbers = .{ .eflags = true },
55226041 .each = .{ .once = &.{
5523 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
5524 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
5525 .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
5526 .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ },
5527 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
5528 .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
5529 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5530 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5531 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5532 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
5533 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
6042 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6043 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6044 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6045 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
6046 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6047 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
6048 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6049 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
55346050 } },
55356051 }, .{
5536 .required_features = .{ .@"64bit", null, null, null },
5537 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
6052 .required_features = .{ .sse, .mmx, null, null },
6053 .src_constraints = .{
6054 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
6055 .{ .scalar_unsigned_int = .{ .of = .qword, .is = .byte } },
6056 },
55386057 .patterns = &.{
5539 .{ .src = .{ .to_mem, .none } },
6058 .{ .src = .{ .to_mut_mmx, .mem } },
6059 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
6060 .{ .src = .{ .to_mut_mmx, .to_mmx } },
55406061 },
5541 .extra_temps = .{
5542 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5543 .unused,
5544 .unused,
5545 .unused,
5546 .unused,
5547 .unused,
6062 .dst_temps = .{.{ .ref = .src0 }},
6063 .each = .{ .once = &.{
6064 .{ ._, .p_b, .minu, .dst0q, .src1q, ._, ._ },
6065 } },
6066 }, .{
6067 .required_features = .{ .avx, null, null, null },
6068 .src_constraints = .{
6069 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6070 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
55486071 },
5549 .dst_temps = .{.{ .rc = .general_purpose }},
5550 .clobbers = .{ .eflags = true },
6072 .patterns = &.{
6073 .{ .src = .{ .to_sse, .mem } },
6074 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6075 .{ .src = .{ .to_sse, .to_sse } },
6076 },
6077 .dst_temps = .{.{ .rc = .sse }},
55516078 .each = .{ .once = &.{
5552 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
5553 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
5554 .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5555 .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ },
5556 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
5557 .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ },
5558 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
5559 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5560 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5561 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
5562 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
6079 .{ ._, .vp_b, .minu, .dst0x, .src0x, .src1x, ._ },
55636080 } },
55646081 }, .{
5565 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
5566 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
6082 .required_features = .{ .sse2, null, null, null },
6083 .src_constraints = .{
6084 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6085 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6086 },
55676087 .patterns = &.{
5568 .{ .src = .{ .to_mem, .none } },
6088 .{ .src = .{ .to_mut_sse, .mem } },
6089 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6090 .{ .src = .{ .to_mut_sse, .to_sse } },
6091 },
6092 .dst_temps = .{.{ .ref = .src0 }},
6093 .each = .{ .once = &.{
6094 .{ ._, .p_b, .minu, .dst0x, .src1x, ._, ._ },
6095 } },
6096 }, .{
6097 .required_features = .{ .avx2, null, null, null },
6098 .src_constraints = .{
6099 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
6100 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
6101 },
6102 .patterns = &.{
6103 .{ .src = .{ .to_sse, .mem } },
6104 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6105 .{ .src = .{ .to_sse, .to_sse } },
6106 },
6107 .dst_temps = .{.{ .rc = .sse }},
6108 .each = .{ .once = &.{
6109 .{ ._, .vp_b, .minu, .dst0y, .src0y, .src1y, ._ },
6110 } },
6111 }, .{
6112 .required_features = .{ .avx2, null, null, null },
6113 .src_constraints = .{
6114 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
6115 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .byte } },
6116 },
6117 .patterns = &.{
6118 .{ .src = .{ .to_mem, .to_mem } },
55696119 },
55706120 .extra_temps = .{
5571 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5572 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6121 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6122 .{ .type = .vector_32_u8, .kind = .{ .rc = .sse } },
6123 .unused,
6124 .unused,
6125 .unused,
55736126 .unused,
55746127 .unused,
55756128 .unused,
55766129 .unused,
55776130 },
5578 .dst_temps = .{.{ .rc = .general_purpose }},
6131 .dst_temps = .{.mem},
55796132 .clobbers = .{ .eflags = true },
55806133 .each = .{ .once = &.{
5581 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
5582 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
5583 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
5584 .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
5585 .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ },
5586 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
5587 .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
5588 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
6134 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6135 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6136 .{ ._, .vp_b, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
6137 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6138 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
55896139 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5590 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5591 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
5592 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
55936140 } },
55946141 }, .{
5595 .required_features = .{ .@"64bit", .lzcnt, null, null },
5596 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
6142 .required_features = .{ .avx, null, null, null },
6143 .src_constraints = .{
6144 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6145 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6146 },
55976147 .patterns = &.{
5598 .{ .src = .{ .to_mem, .none } },
6148 .{ .src = .{ .to_mem, .to_mem } },
55996149 },
56006150 .extra_temps = .{
5601 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5602 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6151 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6152 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
6153 .unused,
6154 .unused,
6155 .unused,
56036156 .unused,
56046157 .unused,
56056158 .unused,
56066159 .unused,
56076160 },
5608 .dst_temps = .{.{ .rc = .general_purpose }},
6161 .dst_temps = .{.mem},
56096162 .clobbers = .{ .eflags = true },
56106163 .each = .{ .once = &.{
5611 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
5612 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
5613 .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
5614 .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ },
5615 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
5616 .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
5617 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
6164 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6165 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6166 .{ ._, .vp_b, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
6167 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6168 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
56186169 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5619 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5620 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
5621 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
56226170 } },
56236171 }, .{
5624 .required_features = .{ .@"64bit", null, null, null },
5625 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
6172 .required_features = .{ .sse2, null, null, null },
6173 .src_constraints = .{
6174 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6175 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .byte } },
6176 },
56266177 .patterns = &.{
5627 .{ .src = .{ .to_mem, .none } },
6178 .{ .src = .{ .to_mem, .to_mem } },
56286179 },
56296180 .extra_temps = .{
5630 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6181 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6182 .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } },
6183 .unused,
6184 .unused,
56316185 .unused,
56326186 .unused,
56336187 .unused,
56346188 .unused,
56356189 .unused,
56366190 },
5637 .dst_temps = .{.{ .rc = .general_purpose }},
6191 .dst_temps = .{.mem},
56386192 .clobbers = .{ .eflags = true },
56396193 .each = .{ .once = &.{
5640 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
5641 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
5642 .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ },
5643 .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ },
5644 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
5645 .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ },
5646 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
6194 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6195 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6196 .{ ._, .p_b, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6197 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6198 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
56476199 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
5648 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
5649 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
5650 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
56516200 } },
56526201 }, .{
5653 .required_features = .{ .lzcnt, .slow_incdec, null, null },
5654 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
6202 .required_features = .{ .cmov, .slow_incdec, null, null },
6203 .src_constraints = .{
6204 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6205 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6206 },
56556207 .patterns = &.{
5656 .{ .src = .{ .to_mem, .none } },
6208 .{ .src = .{ .to_mem, .to_mem } },
56576209 },
56586210 .extra_temps = .{
56596211 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5660 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6212 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6213 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6214 .unused,
6215 .unused,
56616216 .unused,
56626217 .unused,
56636218 .unused,
......@@ -5666,24 +6221,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56666221 .dst_temps = .{.mem},
56676222 .clobbers = .{ .eflags = true },
56686223 .each = .{ .once = &.{
5669 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5670 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
5671 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5672 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
5673 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
5674 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6224 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6225 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6226 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6227 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
6228 .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ },
6229 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
56756230 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
56766231 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
56776232 } },
56786233 }, .{
5679 .required_features = .{ .lzcnt, null, null, null },
5680 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
6234 .required_features = .{ .cmov, null, null, null },
6235 .src_constraints = .{
6236 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6237 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6238 },
56816239 .patterns = &.{
5682 .{ .src = .{ .to_mem, .none } },
6240 .{ .src = .{ .to_mem, .to_mem } },
56836241 },
56846242 .extra_temps = .{
56856243 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5686 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6244 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6245 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6246 .unused,
6247 .unused,
56876248 .unused,
56886249 .unused,
56896250 .unused,
......@@ -5692,24 +6253,30 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
56926253 .dst_temps = .{.mem},
56936254 .clobbers = .{ .eflags = true },
56946255 .each = .{ .once = &.{
5695 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5696 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
5697 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5698 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
5699 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
5700 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6256 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6257 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6258 .{ ._, ._, .movzx, .tmp2d, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6259 .{ ._, ._, .cmp, .tmp1b, .tmp2b, ._, ._ },
6260 .{ ._, ._ae, .cmov, .tmp1d, .tmp2d, ._, ._ },
6261 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
57016262 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
57026263 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
57036264 } },
57046265 }, .{
5705 .required_features = .{ .lzcnt, .slow_incdec, null, null },
5706 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
6266 .required_features = .{ .slow_incdec, null, null, null },
6267 .src_constraints = .{
6268 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6269 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6270 },
57076271 .patterns = &.{
5708 .{ .src = .{ .to_mem, .none } },
6272 .{ .src = .{ .to_mem, .to_mem } },
57096273 },
57106274 .extra_temps = .{
57116275 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5712 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6276 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6277 .unused,
6278 .unused,
6279 .unused,
57136280 .unused,
57146281 .unused,
57156282 .unused,
......@@ -5718,24 +6285,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57186285 .dst_temps = .{.mem},
57196286 .clobbers = .{ .eflags = true },
57206287 .each = .{ .once = &.{
5721 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5722 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
5723 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5724 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
5725 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
5726 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6288 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6289 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6290 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6291 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
6292 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6293 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
57276294 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
57286295 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
57296296 } },
57306297 }, .{
5731 .required_features = .{ .lzcnt, null, null, null },
5732 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
6298 .src_constraints = .{
6299 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6300 .{ .multiple_scalar_unsigned_int = .{ .of = .byte, .is = .byte } },
6301 },
57336302 .patterns = &.{
5734 .{ .src = .{ .to_mem, .none } },
6303 .{ .src = .{ .to_mem, .to_mem } },
57356304 },
57366305 .extra_temps = .{
57376306 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5738 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6307 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6308 .unused,
6309 .unused,
6310 .unused,
57396311 .unused,
57406312 .unused,
57416313 .unused,
......@@ -5744,24 +6316,90 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57446316 .dst_temps = .{.mem},
57456317 .clobbers = .{ .eflags = true },
57466318 .each = .{ .once = &.{
5747 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5748 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
5749 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5750 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
5751 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
5752 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6319 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6320 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_size), ._, ._ },
6321 .{ ._, ._, .cmp, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6322 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
6323 .{ ._, ._, .mov, .tmp1b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
6324 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_size), .tmp1b, ._, ._ },
57536325 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
57546326 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
57556327 } },
57566328 }, .{
5757 .required_features = .{ .lzcnt, .slow_incdec, null, null },
5758 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
6329 .required_features = .{ .sse, .mmx, null, null },
6330 .src_constraints = .{
6331 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },
6332 .{ .scalar_signed_int = .{ .of = .qword, .is = .word } },
6333 },
57596334 .patterns = &.{
5760 .{ .src = .{ .to_mem, .none } },
6335 .{ .src = .{ .to_mut_mmx, .mem } },
6336 .{ .src = .{ .mem, .to_mut_mmx }, .commute = .{ 0, 1 } },
6337 .{ .src = .{ .to_mut_mmx, .to_mmx } },
6338 },
6339 .dst_temps = .{.{ .ref = .src0 }},
6340 .each = .{ .once = &.{
6341 .{ ._, .p_w, .mins, .dst0q, .src1q, ._, ._ },
6342 } },
6343 }, .{
6344 .required_features = .{ .avx, null, null, null },
6345 .src_constraints = .{
6346 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
6347 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
6348 },
6349 .patterns = &.{
6350 .{ .src = .{ .to_sse, .mem } },
6351 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6352 .{ .src = .{ .to_sse, .to_sse } },
6353 },
6354 .dst_temps = .{.{ .rc = .sse }},
6355 .each = .{ .once = &.{
6356 .{ ._, .vp_w, .mins, .dst0x, .src0x, .src1x, ._ },
6357 } },
6358 }, .{
6359 .required_features = .{ .sse2, null, null, null },
6360 .src_constraints = .{
6361 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
6362 .{ .scalar_signed_int = .{ .of = .xword, .is = .word } },
6363 },
6364 .patterns = &.{
6365 .{ .src = .{ .to_mut_sse, .mem } },
6366 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6367 .{ .src = .{ .to_mut_sse, .to_sse } },
6368 },
6369 .dst_temps = .{.{ .ref = .src0 }},
6370 .each = .{ .once = &.{
6371 .{ ._, .p_w, .mins, .dst0x, .src1x, ._, ._ },
6372 } },
6373 }, .{
6374 .required_features = .{ .avx2, null, null, null },
6375 .src_constraints = .{
6376 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
6377 .{ .scalar_signed_int = .{ .of = .yword, .is = .word } },
6378 },
6379 .patterns = &.{
6380 .{ .src = .{ .to_sse, .mem } },
6381 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6382 .{ .src = .{ .to_sse, .to_sse } },
6383 },
6384 .dst_temps = .{.{ .rc = .sse }},
6385 .each = .{ .once = &.{
6386 .{ ._, .vp_w, .mins, .dst0y, .src0y, .src1y, ._ },
6387 } },
6388 }, .{
6389 .required_features = .{ .avx2, null, null, null },
6390 .src_constraints = .{
6391 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
6392 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } },
6393 },
6394 .patterns = &.{
6395 .{ .src = .{ .to_mem, .to_mem } },
57616396 },
57626397 .extra_temps = .{
57636398 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5764 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6399 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
6400 .unused,
6401 .unused,
6402 .unused,
57656403 .unused,
57666404 .unused,
57676405 .unused,
......@@ -5770,24 +6408,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57706408 .dst_temps = .{.mem},
57716409 .clobbers = .{ .eflags = true },
57726410 .each = .{ .once = &.{
5773 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5774 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
5775 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5776 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
5777 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
5778 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
5779 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6411 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6412 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6413 .{ ._, .vp_w, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
6414 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6415 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
57806416 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
57816417 } },
57826418 }, .{
5783 .required_features = .{ .lzcnt, null, null, null },
5784 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
6419 .required_features = .{ .avx, null, null, null },
6420 .src_constraints = .{
6421 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
6422 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
6423 },
57856424 .patterns = &.{
5786 .{ .src = .{ .to_mem, .none } },
6425 .{ .src = .{ .to_mem, .to_mem } },
57876426 },
57886427 .extra_temps = .{
57896428 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5790 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6429 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
6430 .unused,
6431 .unused,
6432 .unused,
57916433 .unused,
57926434 .unused,
57936435 .unused,
......@@ -5796,24 +6438,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
57966438 .dst_temps = .{.mem},
57976439 .clobbers = .{ .eflags = true },
57986440 .each = .{ .once = &.{
5799 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5800 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
5801 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5802 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
5803 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
5804 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
5805 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5806 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6441 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6442 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6443 .{ ._, .vp_w, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
6444 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6445 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6446 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
58076447 } },
58086448 }, .{
5809 .required_features = .{ .@"64bit", .lzcnt, .slow_incdec, null },
5810 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
6449 .required_features = .{ .sse2, null, null, null },
6450 .src_constraints = .{
6451 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
6452 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } },
6453 },
58116454 .patterns = &.{
5812 .{ .src = .{ .to_mem, .none } },
6455 .{ .src = .{ .to_mem, .to_mem } },
58136456 },
58146457 .extra_temps = .{
58156458 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5816 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6459 .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } },
6460 .unused,
6461 .unused,
6462 .unused,
58176463 .unused,
58186464 .unused,
58196465 .unused,
......@@ -5822,24 +6468,28 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58226468 .dst_temps = .{.mem},
58236469 .clobbers = .{ .eflags = true },
58246470 .each = .{ .once = &.{
5825 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5826 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
5827 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
5828 .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ },
5829 .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ },
5830 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
5831 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6471 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6472 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6473 .{ ._, .p_w, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6474 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6475 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
58326476 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
58336477 } },
58346478 }, .{
5835 .required_features = .{ .@"64bit", .lzcnt, null, null },
5836 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
6479 .required_features = .{ .cmov, null, null, null },
6480 .src_constraints = .{
6481 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
6482 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
6483 },
58376484 .patterns = &.{
5838 .{ .src = .{ .to_mem, .none } },
6485 .{ .src = .{ .to_mem, .to_mem } },
58396486 },
58406487 .extra_temps = .{
58416488 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5842 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6489 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
6490 .unused,
6491 .unused,
6492 .unused,
58436493 .unused,
58446494 .unused,
58456495 .unused,
......@@ -5848,83 +6498,123 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
58486498 .dst_temps = .{.mem},
58496499 .clobbers = .{ .eflags = true },
58506500 .each = .{ .once = &.{
5851 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5852 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
5853 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
5854 .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ },
5855 .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ },
5856 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
5857 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5858 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6501 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6502 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6503 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6504 .{ ._, ._ge, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6505 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
6506 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
6507 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
58596508 } },
58606509 }, .{
5861 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null },
5862 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
6510 .src_constraints = .{
6511 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
6512 .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } },
6513 },
58636514 .patterns = &.{
5864 .{ .src = .{ .to_mem, .none } },
6515 .{ .src = .{ .to_mem, .to_mem } },
58656516 },
58666517 .extra_temps = .{
58676518 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5868 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5869 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5870 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6519 .{ .type = .i16, .kind = .{ .rc = .general_purpose } },
6520 .unused,
6521 .unused,
6522 .unused,
6523 .unused,
6524 .unused,
58716525 .unused,
58726526 .unused,
58736527 },
58746528 .dst_temps = .{.mem},
58756529 .clobbers = .{ .eflags = true },
58766530 .each = .{ .once = &.{
5877 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5878 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
5879 .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
5880 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
5881 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
5882 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
5883 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5884 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
5885 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
5886 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6531 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6532 .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6533 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6534 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
6535 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6536 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
6537 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
58876538 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
58886539 } },
58896540 }, .{
5890 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
5891 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
6541 .required_features = .{ .avx, null, null, null },
6542 .src_constraints = .{
6543 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6544 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6545 },
58926546 .patterns = &.{
5893 .{ .src = .{ .to_mem, .none } },
6547 .{ .src = .{ .to_sse, .mem } },
6548 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6549 .{ .src = .{ .to_sse, .to_sse } },
58946550 },
5895 .extra_temps = .{
5896 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5897 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5898 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5899 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
5900 .unused,
5901 .unused,
6551 .dst_temps = .{.{ .rc = .sse }},
6552 .each = .{ .once = &.{
6553 .{ ._, .vp_w, .minu, .dst0x, .src0x, .src1x, ._ },
6554 } },
6555 }, .{
6556 .required_features = .{ .sse4_1, null, null, null },
6557 .src_constraints = .{
6558 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6559 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
59026560 },
5903 .dst_temps = .{.mem},
5904 .clobbers = .{ .eflags = true },
6561 .patterns = &.{
6562 .{ .src = .{ .to_mut_sse, .mem } },
6563 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6564 .{ .src = .{ .to_mut_sse, .to_sse } },
6565 },
6566 .dst_temps = .{.{ .ref = .src0 }},
59056567 .each = .{ .once = &.{
5906 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5907 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
5908 .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
5909 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
5910 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
5911 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
5912 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5913 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
5914 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
5915 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5916 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6568 .{ ._, .p_w, .minu, .dst0x, .src1x, ._, ._ },
59176569 } },
59186570 }, .{
5919 .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null },
5920 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
6571 .required_features = .{ .sse2, null, null, null },
6572 .src_constraints = .{
6573 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6574 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6575 },
59216576 .patterns = &.{
5922 .{ .src = .{ .to_mem, .none } },
6577 .{ .src = .{ .to_mut_sse, .mem } },
6578 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6579 .{ .src = .{ .to_mut_sse, .to_sse } },
6580 },
6581 .dst_temps = .{.{ .rc = .sse }},
6582 .each = .{ .once = &.{
6583 .{ ._, ._dqa, .mov, .dst0x, .src0x, ._, ._ },
6584 .{ ._, .p_w, .subus, .src0x, .src1x, ._, ._ },
6585 .{ ._, .p_w, .sub, .dst0x, .src0x, ._, ._ },
6586 } },
6587 }, .{
6588 .required_features = .{ .avx2, null, null, null },
6589 .src_constraints = .{
6590 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
6591 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .word } },
6592 },
6593 .patterns = &.{
6594 .{ .src = .{ .to_sse, .mem } },
6595 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6596 .{ .src = .{ .to_sse, .to_sse } },
6597 },
6598 .dst_temps = .{.{ .rc = .sse }},
6599 .each = .{ .once = &.{
6600 .{ ._, .vp_w, .minu, .dst0y, .src0y, .src1y, ._ },
6601 } },
6602 }, .{
6603 .required_features = .{ .avx2, null, null, null },
6604 .src_constraints = .{
6605 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
6606 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .word } },
6607 },
6608 .patterns = &.{
6609 .{ .src = .{ .to_mem, .to_mem } },
59236610 },
59246611 .extra_temps = .{
59256612 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5926 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5927 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6613 .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } },
6614 .unused,
6615 .unused,
6616 .unused,
6617 .unused,
59286618 .unused,
59296619 .unused,
59306620 .unused,
......@@ -5932,28 +6622,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59326622 .dst_temps = .{.mem},
59336623 .clobbers = .{ .eflags = true },
59346624 .each = .{ .once = &.{
5935 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5936 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
5937 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5938 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
5939 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
5940 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
5941 .{ ._, ._c, .st, ._, ._, ._, ._ },
5942 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
5943 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
5944 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6625 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6626 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6627 .{ ._, .vp_w, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
6628 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6629 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
59456630 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
59466631 } },
59476632 }, .{
5948 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
5949 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
6633 .required_features = .{ .avx, null, null, null },
6634 .src_constraints = .{
6635 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6636 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6637 },
59506638 .patterns = &.{
5951 .{ .src = .{ .to_mem, .none } },
6639 .{ .src = .{ .to_mem, .to_mem } },
59526640 },
59536641 .extra_temps = .{
59546642 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5955 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5956 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6643 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
6644 .unused,
6645 .unused,
6646 .unused,
6647 .unused,
59576648 .unused,
59586649 .unused,
59596650 .unused,
......@@ -5961,28 +6652,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59616652 .dst_temps = .{.mem},
59626653 .clobbers = .{ .eflags = true },
59636654 .each = .{ .once = &.{
5964 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5965 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
5966 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5967 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
5968 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
5969 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
5970 .{ ._, ._c, .st, ._, ._, ._, ._ },
5971 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
5972 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
5973 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
5974 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6655 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6656 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6657 .{ ._, .vp_w, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
6658 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6659 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6660 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
59756661 } },
59766662 }, .{
5977 .required_features = .{ .slow_incdec, null, null, null },
5978 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
6663 .required_features = .{ .sse4_1, null, null, null },
6664 .src_constraints = .{
6665 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6666 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6667 },
59796668 .patterns = &.{
5980 .{ .src = .{ .to_mem, .none } },
6669 .{ .src = .{ .to_mem, .to_mem } },
59816670 },
59826671 .extra_temps = .{
59836672 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
5984 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
5985 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6673 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
6674 .unused,
6675 .unused,
6676 .unused,
6677 .unused,
59866678 .unused,
59876679 .unused,
59886680 .unused,
......@@ -5990,26 +6682,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
59906682 .dst_temps = .{.mem},
59916683 .clobbers = .{ .eflags = true },
59926684 .each = .{ .once = &.{
5993 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
5994 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
5995 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
5996 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
5997 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
5998 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
5999 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
6000 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6001 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6685 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6686 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6687 .{ ._, .p_w, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6688 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6689 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
60026690 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
60036691 } },
60046692 }, .{
6005 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
6693 .required_features = .{ .sse2, null, null, null },
6694 .src_constraints = .{
6695 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6696 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .word } },
6697 },
60066698 .patterns = &.{
6007 .{ .src = .{ .to_mem, .none } },
6699 .{ .src = .{ .to_mem, .to_mem } },
60086700 },
60096701 .extra_temps = .{
60106702 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6011 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6012 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6703 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
6704 .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } },
6705 .unused,
6706 .unused,
6707 .unused,
60136708 .unused,
60146709 .unused,
60156710 .unused,
......@@ -6017,85 +6712,157 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
60176712 .dst_temps = .{.mem},
60186713 .clobbers = .{ .eflags = true },
60196714 .each = .{ .once = &.{
6020 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6021 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
6022 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6023 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
6024 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
6025 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6026 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
6027 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6028 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6029 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6715 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6716 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6717 .{ ._, ._dqa, .mov, .tmp2x, .tmp1x, ._, ._ },
6718 .{ ._, .p_w, .subus, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6719 .{ ._, .p_w, .sub, .tmp2x, .tmp1x, ._, ._ },
6720 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
6721 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6722 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
60306723 } },
60316724 }, .{
6032 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null },
6033 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
6725 .required_features = .{ .cmov, null, null, null },
6726 .src_constraints = .{
6727 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
6728 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
6729 },
60346730 .patterns = &.{
6035 .{ .src = .{ .to_mem, .none } },
6731 .{ .src = .{ .to_mem, .to_mem } },
60366732 },
60376733 .extra_temps = .{
60386734 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6039 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6040 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6041 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6735 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
6736 .unused,
6737 .unused,
6738 .unused,
6739 .unused,
6740 .unused,
60426741 .unused,
60436742 .unused,
60446743 },
60456744 .dst_temps = .{.mem},
60466745 .clobbers = .{ .eflags = true },
60476746 .each = .{ .once = &.{
6048 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6049 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
6050 .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
6051 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
6052 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
6053 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
6054 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6055 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
6056 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6057 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6747 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6748 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6749 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6750 .{ ._, ._ae, .cmov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6751 .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
6752 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
60586753 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
60596754 } },
60606755 }, .{
6061 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
6062 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
6756 .src_constraints = .{
6757 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
6758 .{ .multiple_scalar_unsigned_int = .{ .of = .word, .is = .word } },
6759 },
60636760 .patterns = &.{
6064 .{ .src = .{ .to_mem, .none } },
6761 .{ .src = .{ .to_mem, .to_mem } },
60656762 },
60666763 .extra_temps = .{
60676764 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6068 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6069 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6070 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6765 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
6766 .unused,
6767 .unused,
6768 .unused,
6769 .unused,
6770 .unused,
60716771 .unused,
60726772 .unused,
60736773 },
60746774 .dst_temps = .{.mem},
60756775 .clobbers = .{ .eflags = true },
60766776 .each = .{ .once = &.{
6077 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6078 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
6079 .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
6080 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
6081 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
6082 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
6083 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6084 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
6085 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6086 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6087 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6777 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6778 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ },
6779 .{ ._, ._, .cmp, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6780 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
6781 .{ ._, ._, .mov, .tmp1w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
6782 .{ .@"1:", ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ },
6783 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
6784 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
60886785 } },
60896786 }, .{
6090 .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null },
6091 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
6787 .required_features = .{ .avx, null, null, null },
6788 .src_constraints = .{
6789 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6790 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6791 },
60926792 .patterns = &.{
6093 .{ .src = .{ .to_mem, .none } },
6793 .{ .src = .{ .to_sse, .mem } },
6794 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6795 .{ .src = .{ .to_sse, .to_sse } },
6796 },
6797 .dst_temps = .{.{ .rc = .sse }},
6798 .each = .{ .once = &.{
6799 .{ ._, .vp_d, .mins, .dst0x, .src0x, .src1x, ._ },
6800 } },
6801 }, .{
6802 .required_features = .{ .sse4_1, null, null, null },
6803 .src_constraints = .{
6804 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6805 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6806 },
6807 .patterns = &.{
6808 .{ .src = .{ .to_mut_sse, .mem } },
6809 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6810 .{ .src = .{ .to_mut_sse, .to_sse } },
6811 },
6812 .dst_temps = .{.{ .ref = .src0 }},
6813 .each = .{ .once = &.{
6814 .{ ._, .p_d, .mins, .dst0x, .src1x, ._, ._ },
6815 } },
6816 }, .{
6817 .required_features = .{ .sse2, null, null, null },
6818 .src_constraints = .{
6819 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6820 .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } },
6821 },
6822 .patterns = &.{
6823 .{ .src = .{ .to_mut_sse, .mem } },
6824 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
6825 .{ .src = .{ .to_mut_sse, .to_sse } },
6826 },
6827 .dst_temps = .{.{ .rc = .sse }},
6828 .each = .{ .once = &.{
6829 .{ ._, ._dqa, .mov, .dst0x, .src1x, ._, ._ },
6830 .{ ._, .p_d, .cmpgt, .dst0x, .src0x, ._, ._ },
6831 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
6832 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
6833 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
6834 } },
6835 }, .{
6836 .required_features = .{ .avx2, null, null, null },
6837 .src_constraints = .{
6838 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
6839 .{ .scalar_signed_int = .{ .of = .yword, .is = .dword } },
6840 },
6841 .patterns = &.{
6842 .{ .src = .{ .to_sse, .mem } },
6843 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
6844 .{ .src = .{ .to_sse, .to_sse } },
6845 },
6846 .dst_temps = .{.{ .rc = .sse }},
6847 .each = .{ .once = &.{
6848 .{ ._, .vp_d, .mins, .dst0y, .src0y, .src1y, ._ },
6849 } },
6850 }, .{
6851 .required_features = .{ .avx2, null, null, null },
6852 .src_constraints = .{
6853 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
6854 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } },
6855 },
6856 .patterns = &.{
6857 .{ .src = .{ .to_mem, .to_mem } },
60946858 },
60956859 .extra_temps = .{
60966860 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6097 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6098 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6861 .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } },
6862 .unused,
6863 .unused,
6864 .unused,
6865 .unused,
60996866 .unused,
61006867 .unused,
61016868 .unused,
......@@ -6103,28 +6870,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61036870 .dst_temps = .{.mem},
61046871 .clobbers = .{ .eflags = true },
61056872 .each = .{ .once = &.{
6106 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6107 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
6108 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6109 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
6110 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
6111 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
6112 .{ ._, ._c, .st, ._, ._, ._, ._ },
6113 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
6114 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
6115 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6873 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6874 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
6875 .{ ._, .vp_d, .mins, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
6876 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
6877 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
61166878 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
61176879 } },
61186880 }, .{
6119 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
6120 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
6881 .required_features = .{ .avx, null, null, null },
6882 .src_constraints = .{
6883 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6884 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6885 },
61216886 .patterns = &.{
6122 .{ .src = .{ .to_mem, .none } },
6887 .{ .src = .{ .to_mem, .to_mem } },
61236888 },
61246889 .extra_temps = .{
61256890 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6126 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6127 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6891 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
6892 .unused,
6893 .unused,
6894 .unused,
6895 .unused,
61286896 .unused,
61296897 .unused,
61306898 .unused,
......@@ -6132,28 +6900,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61326900 .dst_temps = .{.mem},
61336901 .clobbers = .{ .eflags = true },
61346902 .each = .{ .once = &.{
6135 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6136 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
6137 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6138 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
6139 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
6140 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
6141 .{ ._, ._c, .st, ._, ._, ._, ._ },
6142 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
6143 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
6144 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6145 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6903 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6904 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6905 .{ ._, .vp_d, .mins, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
6906 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6907 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6908 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
61466909 } },
61476910 }, .{
6148 .required_features = .{ .slow_incdec, null, null, null },
6149 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
6911 .required_features = .{ .sse4_1, null, null, null },
6912 .src_constraints = .{
6913 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6914 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6915 },
61506916 .patterns = &.{
6151 .{ .src = .{ .to_mem, .none } },
6917 .{ .src = .{ .to_mem, .to_mem } },
61526918 },
61536919 .extra_temps = .{
61546920 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6155 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6156 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6921 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
6922 .unused,
6923 .unused,
6924 .unused,
6925 .unused,
61576926 .unused,
61586927 .unused,
61596928 .unused,
......@@ -6161,26 +6930,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61616930 .dst_temps = .{.mem},
61626931 .clobbers = .{ .eflags = true },
61636932 .each = .{ .once = &.{
6164 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6165 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
6166 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6167 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
6168 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
6169 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6170 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
6171 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6172 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6933 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6934 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6935 .{ ._, .p_d, .mins, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6936 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6937 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
61736938 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
61746939 } },
61756940 }, .{
6176 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
6941 .required_features = .{ .sse2, null, null, null },
6942 .src_constraints = .{
6943 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6944 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } },
6945 },
61776946 .patterns = &.{
6178 .{ .src = .{ .to_mem, .none } },
6947 .{ .src = .{ .to_mem, .to_mem } },
61796948 },
61806949 .extra_temps = .{
61816950 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6182 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6183 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6951 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
6952 .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } },
6953 .unused,
6954 .unused,
6955 .unused,
61846956 .unused,
61856957 .unused,
61866958 .unused,
......@@ -6188,114 +6960,174 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
61886960 .dst_temps = .{.mem},
61896961 .clobbers = .{ .eflags = true },
61906962 .each = .{ .once = &.{
6191 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6192 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
6193 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6194 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
6195 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
6196 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6197 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
6198 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6199 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6200 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
6963 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6964 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6965 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
6966 .{ ._, .p_d, .cmpgt, .tmp1x, .tmp2x, ._, ._ },
6967 .{ ._, .p_, .@"and", .tmp2x, .tmp1x, ._, ._ },
6968 .{ ._, .p_, .andn, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
6969 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
6970 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
6971 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
6972 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62016973 } },
62026974 }, .{
6203 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null },
6204 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
6975 .required_features = .{ .cmov, null, null, null },
6976 .src_constraints = .{
6977 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
6978 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
6979 },
62056980 .patterns = &.{
6206 .{ .src = .{ .to_mem, .none } },
6981 .{ .src = .{ .to_mem, .to_mem } },
62076982 },
62086983 .extra_temps = .{
62096984 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6210 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6211 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6212 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
6985 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
6986 .unused,
6987 .unused,
6988 .unused,
6989 .unused,
6990 .unused,
62136991 .unused,
62146992 .unused,
62156993 },
62166994 .dst_temps = .{.mem},
62176995 .clobbers = .{ .eflags = true },
62186996 .each = .{ .once = &.{
6219 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6220 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
6221 .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
6222 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
6223 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
6224 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
6225 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6226 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
6227 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6228 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6997 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
6998 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
6999 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7000 .{ ._, ._ge, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7001 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
7002 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
62297003 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62307004 } },
62317005 }, .{
6232 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
6233 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
7006 .src_constraints = .{
7007 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
7008 .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } },
7009 },
62347010 .patterns = &.{
6235 .{ .src = .{ .to_mem, .none } },
7011 .{ .src = .{ .to_mem, .to_mem } },
62367012 },
62377013 .extra_temps = .{
62387014 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6239 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6240 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6241 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7015 .{ .type = .i32, .kind = .{ .rc = .general_purpose } },
7016 .unused,
7017 .unused,
7018 .unused,
7019 .unused,
7020 .unused,
62427021 .unused,
62437022 .unused,
62447023 },
62457024 .dst_temps = .{.mem},
62467025 .clobbers = .{ .eflags = true },
62477026 .each = .{ .once = &.{
6248 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6249 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
6250 .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
6251 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
6252 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
6253 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
6254 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6255 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
6256 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6257 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6258 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7027 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7028 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
7029 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7030 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7031 .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7032 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
7033 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
7034 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
62597035 } },
62607036 }, .{
6261 .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null },
6262 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
7037 .required_features = .{ .avx, null, null, null },
7038 .src_constraints = .{
7039 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7040 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7041 },
62637042 .patterns = &.{
6264 .{ .src = .{ .to_mem, .none } },
7043 .{ .src = .{ .to_sse, .mem } },
7044 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7045 .{ .src = .{ .to_sse, .to_sse } },
7046 },
7047 .dst_temps = .{.{ .rc = .sse }},
7048 .each = .{ .once = &.{
7049 .{ ._, .vp_d, .minu, .dst0x, .src0x, .src1x, ._ },
7050 } },
7051 }, .{
7052 .required_features = .{ .sse4_1, null, null, null },
7053 .src_constraints = .{
7054 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7055 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7056 },
7057 .patterns = &.{
7058 .{ .src = .{ .to_mut_sse, .mem } },
7059 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7060 .{ .src = .{ .to_mut_sse, .to_sse } },
7061 },
7062 .dst_temps = .{.{ .ref = .src0 }},
7063 .each = .{ .once = &.{
7064 .{ ._, .p_d, .minu, .dst0x, .src1x, ._, ._ },
7065 } },
7066 }, .{
7067 .required_features = .{ .sse2, null, null, null },
7068 .src_constraints = .{
7069 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7070 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7071 },
7072 .patterns = &.{
7073 .{ .src = .{ .to_mut_sse, .mem } },
7074 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7075 .{ .src = .{ .to_mut_sse, .to_sse } },
62657076 },
62667077 .extra_temps = .{
6267 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6268 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6269 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7078 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
7079 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
7080 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7081 .unused,
7082 .unused,
7083 .unused,
62707084 .unused,
62717085 .unused,
62727086 .unused,
62737087 },
6274 .dst_temps = .{.mem},
6275 .clobbers = .{ .eflags = true },
7088 .dst_temps = .{.{ .rc = .sse }},
62767089 .each = .{ .once = &.{
6277 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6278 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
6279 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6280 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
6281 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
6282 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
6283 .{ ._, ._c, .st, ._, ._, ._, ._ },
6284 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
6285 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
6286 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6287 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7090 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7091 .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ },
7092 .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ },
7093 .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ },
7094 .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ },
7095 .{ ._, .p_d, .cmpgt, .dst0x, .tmp2x, ._, ._ },
7096 .{ ._, .p_, .@"and", .src0x, .dst0x, ._, ._ },
7097 .{ ._, .p_, .andn, .dst0x, .src1x, ._, ._ },
7098 .{ ._, .p_, .@"or", .dst0x, .src0x, ._, ._ },
62887099 } },
62897100 }, .{
6290 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
6291 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
7101 .required_features = .{ .avx2, null, null, null },
7102 .src_constraints = .{
7103 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
7104 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
7105 },
62927106 .patterns = &.{
6293 .{ .src = .{ .to_mem, .none } },
7107 .{ .src = .{ .to_sse, .mem } },
7108 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7109 .{ .src = .{ .to_sse, .to_sse } },
7110 },
7111 .dst_temps = .{.{ .rc = .sse }},
7112 .each = .{ .once = &.{
7113 .{ ._, .vp_d, .minu, .dst0y, .src0y, .src1y, ._ },
7114 } },
7115 }, .{
7116 .required_features = .{ .avx2, null, null, null },
7117 .src_constraints = .{
7118 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
7119 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .dword } },
7120 },
7121 .patterns = &.{
7122 .{ .src = .{ .to_mem, .to_mem } },
62947123 },
62957124 .extra_temps = .{
62967125 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6297 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6298 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7126 .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } },
7127 .unused,
7128 .unused,
7129 .unused,
7130 .unused,
62997131 .unused,
63007132 .unused,
63017133 .unused,
......@@ -6303,28 +7135,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
63037135 .dst_temps = .{.mem},
63047136 .clobbers = .{ .eflags = true },
63057137 .each = .{ .once = &.{
6306 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6307 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
6308 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6309 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
6310 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
6311 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
6312 .{ ._, ._c, .st, ._, ._, ._, ._ },
6313 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
6314 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
6315 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6316 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7138 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7139 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7140 .{ ._, .vp_d, .minu, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
7141 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
7142 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7143 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
63177144 } },
63187145 }, .{
6319 .required_features = .{ .slow_incdec, null, null, null },
6320 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
7146 .required_features = .{ .avx, null, null, null },
7147 .src_constraints = .{
7148 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7149 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7150 },
63217151 .patterns = &.{
6322 .{ .src = .{ .to_mem, .none } },
7152 .{ .src = .{ .to_mem, .to_mem } },
63237153 },
63247154 .extra_temps = .{
63257155 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6326 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6327 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7156 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7157 .unused,
7158 .unused,
7159 .unused,
7160 .unused,
63287161 .unused,
63297162 .unused,
63307163 .unused,
......@@ -6332,26 +7165,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
63327165 .dst_temps = .{.mem},
63337166 .clobbers = .{ .eflags = true },
63347167 .each = .{ .once = &.{
6335 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6336 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
6337 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6338 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
6339 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
6340 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6341 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
6342 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6343 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7168 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7169 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7170 .{ ._, .vp_d, .minu, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
7171 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7172 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
63447173 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
63457174 } },
63467175 }, .{
6347 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
7176 .required_features = .{ .sse4_1, null, null, null },
7177 .src_constraints = .{
7178 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7179 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7180 },
63487181 .patterns = &.{
6349 .{ .src = .{ .to_mem, .none } },
7182 .{ .src = .{ .to_mem, .to_mem } },
63507183 },
63517184 .extra_temps = .{
63527185 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6353 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6354 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7186 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7187 .unused,
7188 .unused,
7189 .unused,
7190 .unused,
63557191 .unused,
63567192 .unused,
63577193 .unused,
......@@ -6359,85 +7195,99 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
63597195 .dst_temps = .{.mem},
63607196 .clobbers = .{ .eflags = true },
63617197 .each = .{ .once = &.{
6362 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6363 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
6364 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
6365 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
6366 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
6367 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6368 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
6369 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6370 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6371 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7198 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7199 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7200 .{ ._, .p_d, .minu, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7201 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7202 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7203 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
63727204 } },
63737205 }, .{
6374 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec },
6375 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
7206 .required_features = .{ .sse2, null, null, null },
7207 .src_constraints = .{
7208 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7209 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .dword } },
7210 },
63767211 .patterns = &.{
6377 .{ .src = .{ .to_mem, .none } },
7212 .{ .src = .{ .to_mem, .to_mem } },
63787213 },
63797214 .extra_temps = .{
63807215 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6381 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6382 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6383 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7216 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
7217 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7218 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7219 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7220 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
7221 .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } },
63847222 .unused,
63857223 .unused,
63867224 },
63877225 .dst_temps = .{.mem},
63887226 .clobbers = .{ .eflags = true },
63897227 .each = .{ .once = &.{
6390 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6391 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
6392 .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ },
6393 .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
6394 .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ },
6395 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
6396 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6397 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
6398 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6399 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7228 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7229 .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
7230 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7231 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7232 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7233 .{ ._, ._dqa, .mov, .tmp5x, .tmp3x, ._, ._ },
7234 .{ ._, ._dqa, .mov, .tmp6x, .tmp4x, ._, ._ },
7235 .{ ._, .p_, .xor, .tmp5x, .tmp2x, ._, ._ },
7236 .{ ._, .p_, .xor, .tmp6x, .tmp2x, ._, ._ },
7237 .{ ._, .p_d, .cmpgt, .tmp5x, .tmp6x, ._, ._ },
7238 .{ ._, .p_, .@"and", .tmp4x, .tmp5x, ._, ._ },
7239 .{ ._, .p_, .andn, .tmp5x, .tmp3x, ._, ._ },
7240 .{ ._, .p_, .@"or", .tmp4x, .tmp5x, ._, ._ },
7241 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp4x, ._, ._ },
7242 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
64007243 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64017244 } },
64027245 }, .{
6403 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null },
6404 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
7246 .required_features = .{ .cmov, null, null, null },
7247 .src_constraints = .{
7248 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
7249 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
7250 },
64057251 .patterns = &.{
6406 .{ .src = .{ .to_mem, .none } },
7252 .{ .src = .{ .to_mem, .to_mem } },
64077253 },
64087254 .extra_temps = .{
64097255 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
64107256 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6411 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6412 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7257 .unused,
7258 .unused,
7259 .unused,
7260 .unused,
7261 .unused,
64137262 .unused,
64147263 .unused,
64157264 },
64167265 .dst_temps = .{.mem},
64177266 .clobbers = .{ .eflags = true },
64187267 .each = .{ .once = &.{
6419 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6420 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
6421 .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ },
6422 .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
6423 .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ },
6424 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
6425 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6426 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
6427 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6428 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6429 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7268 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7269 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
7270 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7271 .{ ._, ._ae, .cmov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7272 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
7273 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
7274 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64307275 } },
64317276 }, .{
6432 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, .slow_incdec, null },
6433 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
7277 .src_constraints = .{
7278 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
7279 .{ .multiple_scalar_unsigned_int = .{ .of = .dword, .is = .dword } },
7280 },
64347281 .patterns = &.{
6435 .{ .src = .{ .to_mem, .none } },
7282 .{ .src = .{ .to_mem, .to_mem } },
64367283 },
64377284 .extra_temps = .{
64387285 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6439 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6440 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7286 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7287 .unused,
7288 .unused,
7289 .unused,
7290 .unused,
64417291 .unused,
64427292 .unused,
64437293 .unused,
......@@ -6445,57 +7295,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
64457295 .dst_temps = .{.mem},
64467296 .clobbers = .{ .eflags = true },
64477297 .each = .{ .once = &.{
6448 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6449 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
6450 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
6451 .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ },
6452 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
6453 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
6454 .{ ._, ._c, .st, ._, ._, ._, ._ },
6455 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
6456 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
6457 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7298 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7299 .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
7300 .{ ._, ._, .cmp, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7301 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
7302 .{ ._, ._, .mov, .tmp1d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
7303 .{ .@"1:", ._, .mov, .memia(.dst0d, .tmp0, .add_size), .tmp1d, ._, ._ },
7304 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
64587305 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
64597306 } },
64607307 }, .{
6461 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
6462 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
7308 .required_features = .{ .avx, null, null, null },
7309 .src_constraints = .{
7310 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
7311 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
7312 },
64637313 .patterns = &.{
6464 .{ .src = .{ .to_mem, .none } },
7314 .{ .src = .{ .to_sse, .mem } },
7315 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7316 .{ .src = .{ .to_sse, .to_sse } },
7317 },
7318 .dst_temps = .{.{ .rc = .sse }},
7319 .each = .{ .once = &.{
7320 .{ ._, .vp_q, .cmpgt, .dst0x, .src0x, .src1x, ._ },
7321 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },
7322 } },
7323 }, .{
7324 .required_features = .{ .sse4_2, null, null, null },
7325 .src_constraints = .{
7326 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
7327 .{ .scalar_signed_int = .{ .of = .xword, .is = .qword } },
7328 },
7329 .patterns = &.{
7330 .{ .src = .{ .to_mut_sse, .mem } },
7331 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7332 .{ .src = .{ .to_mut_sse, .to_sse } },
64657333 },
64667334 .extra_temps = .{
6467 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6468 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6469 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7335 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
7336 .unused,
7337 .unused,
7338 .unused,
7339 .unused,
7340 .unused,
64707341 .unused,
64717342 .unused,
64727343 .unused,
64737344 },
6474 .dst_temps = .{.mem},
6475 .clobbers = .{ .eflags = true },
7345 .dst_temps = .{.{ .ref = .src0 }},
64767346 .each = .{ .once = &.{
6477 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6478 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
6479 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
6480 .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ },
6481 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
6482 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
6483 .{ ._, ._c, .st, ._, ._, ._, ._ },
6484 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
6485 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
6486 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6487 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7347 .{ ._, ._dqa, .mov, .tmp0x, .src0x, ._, ._ },
7348 .{ ._, .p_q, .cmpgt, .tmp0x, .src1x, ._, ._ },
7349 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp0x, ._ },
64887350 } },
64897351 }, .{
6490 .required_features = .{ .@"64bit", .slow_incdec, null, null },
6491 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
7352 .required_features = .{ .avx2, null, null, null },
7353 .src_constraints = .{
7354 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
7355 .{ .scalar_signed_int = .{ .of = .yword, .is = .qword } },
7356 },
64927357 .patterns = &.{
6493 .{ .src = .{ .to_mem, .none } },
7358 .{ .src = .{ .to_sse, .mem } },
7359 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7360 .{ .src = .{ .to_sse, .to_sse } },
7361 },
7362 .dst_temps = .{.{ .rc = .sse }},
7363 .each = .{ .once = &.{
7364 .{ ._, .vp_q, .cmpgt, .dst0y, .src0y, .src1y, ._ },
7365 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },
7366 } },
7367 }, .{
7368 .required_features = .{ .avx2, null, null, null },
7369 .src_constraints = .{
7370 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
7371 .{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } },
7372 },
7373 .patterns = &.{
7374 .{ .src = .{ .to_mem, .to_mem } },
64947375 },
64957376 .extra_temps = .{
64967377 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6497 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6498 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7378 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
7379 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
7380 .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } },
7381 .unused,
7382 .unused,
64997383 .unused,
65007384 .unused,
65017385 .unused,
......@@ -6503,27 +7387,31 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
65037387 .dst_temps = .{.mem},
65047388 .clobbers = .{ .eflags = true },
65057389 .each = .{ .once = &.{
6506 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6507 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
6508 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
6509 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
6510 .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ },
6511 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6512 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
6513 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6514 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7390 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7391 .{ .@"0:", .v_dqa, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7392 .{ ._, .v_dqa, .mov, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
7393 .{ ._, .vp_q, .cmpgt, .tmp3y, .tmp1y, .tmp2y, ._ },
7394 .{ ._, .vp_b, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y },
7395 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
7396 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
65157397 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
65167398 } },
65177399 }, .{
6518 .required_features = .{ .@"64bit", null, null, null },
6519 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
7400 .required_features = .{ .avx, null, null, null },
7401 .src_constraints = .{
7402 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
7403 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
7404 },
65207405 .patterns = &.{
6521 .{ .src = .{ .to_mem, .none } },
7406 .{ .src = .{ .to_mem, .to_mem } },
65227407 },
65237408 .extra_temps = .{
65247409 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6525 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6526 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7410 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7411 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7412 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7413 .unused,
7414 .unused,
65277415 .unused,
65287416 .unused,
65297417 .unused,
......@@ -6531,895 +7419,7323 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
65317419 .dst_temps = .{.mem},
65327420 .clobbers = .{ .eflags = true },
65337421 .each = .{ .once = &.{
6534 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6535 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
6536 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
6537 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
6538 .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ },
6539 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
6540 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
6541 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
6542 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
6543 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
7422 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7423 .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7424 .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7425 .{ ._, .vp_q, .cmpgt, .tmp3x, .tmp1x, .tmp2x, ._ },
7426 .{ ._, .vp_b, .blendv, .tmp1x, .tmp1x, .tmp2x, .tmp3x },
7427 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7428 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7429 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
65447430 } },
65457431 }, .{
6546 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
6547 .dst_constraints = .{.{ .scalar_int_is = .byte }},
6548 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
7432 .required_features = .{ .sse4_2, null, null, null },
7433 .src_constraints = .{
7434 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
7435 .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } },
7436 },
65497437 .patterns = &.{
6550 .{ .src = .{ .to_mem, .none } },
7438 .{ .src = .{ .to_mem, .to_mem } },
65517439 },
65527440 .extra_temps = .{
65537441 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6554 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6555 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6556 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6557 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7442 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7443 .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } },
7444 .{ .type = .vector_2_i64, .kind = .{ .reg = .xmm0 } },
7445 .unused,
7446 .unused,
7447 .unused,
7448 .unused,
65587449 .unused,
65597450 },
65607451 .dst_temps = .{.mem},
65617452 .clobbers = .{ .eflags = true },
65627453 .each = .{ .once = &.{
6563 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6564 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6565 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
6566 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6567 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6568 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
6569 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
6570 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
6571 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6572 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6573 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6574 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6575 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
6576 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
6577 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6578 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6579 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7454 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7455 .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7456 .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7457 .{ ._, ._dqa, .mov, .tmp3x, .tmp1x, ._, ._ },
7458 .{ ._, .p_q, .cmpgt, .tmp3x, .tmp2x, ._, ._ },
7459 .{ ._, .p_b, .blendv, .tmp1x, .tmp2x, .tmp3x, ._ },
7460 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
7461 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
65807462 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
65817463 } },
65827464 }, .{
6583 .required_features = .{ .@"64bit", .lzcnt, null, null },
6584 .dst_constraints = .{.{ .scalar_int_is = .byte }},
6585 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
7465 .required_features = .{ .@"64bit", .cmov, null, null },
7466 .src_constraints = .{
7467 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
7468 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
7469 },
65867470 .patterns = &.{
6587 .{ .src = .{ .to_mem, .none } },
7471 .{ .src = .{ .to_mem, .to_mem } },
65887472 },
65897473 .extra_temps = .{
65907474 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6591 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6592 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6593 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6594 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7475 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
7476 .unused,
7477 .unused,
7478 .unused,
7479 .unused,
7480 .unused,
7481 .unused,
65957482 .unused,
65967483 },
65977484 .dst_temps = .{.mem},
65987485 .clobbers = .{ .eflags = true },
65997486 .each = .{ .once = &.{
6600 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6601 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6602 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
6603 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6604 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6605 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
6606 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
6607 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6608 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6609 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6610 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6611 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
6612 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
6613 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6614 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6615 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7487 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7488 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7489 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7490 .{ ._, ._ge, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7491 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
7492 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
66167493 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
66177494 } },
66187495 }, .{
66197496 .required_features = .{ .@"64bit", null, null, null },
6620 .dst_constraints = .{.{ .scalar_int_is = .byte }},
6621 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
7497 .src_constraints = .{
7498 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
7499 .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } },
7500 },
66227501 .patterns = &.{
6623 .{ .src = .{ .to_mem, .none } },
7502 .{ .src = .{ .to_mem, .to_mem } },
66247503 },
66257504 .extra_temps = .{
66267505 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6627 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6628 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6629 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7506 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
7507 .unused,
7508 .unused,
7509 .unused,
7510 .unused,
7511 .unused,
66307512 .unused,
66317513 .unused,
66327514 },
66337515 .dst_temps = .{.mem},
66347516 .clobbers = .{ .eflags = true },
66357517 .each = .{ .once = &.{
6636 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6637 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6638 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
6639 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6640 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6641 .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ },
6642 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
6643 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6644 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6645 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6646 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6647 .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ },
6648 .{ ._, ._, .neg, .tmp3b, ._, ._, ._ },
6649 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6650 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6651 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7518 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7519 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7520 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7521 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7522 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7523 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
7524 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
66527525 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
66537526 } },
66547527 }, .{
6655 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
6656 .dst_constraints = .{.{ .scalar_int_is = .byte }},
6657 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
7528 .required_features = .{ .avx, null, null, null },
7529 .src_constraints = .{
7530 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7531 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7532 },
66587533 .patterns = &.{
6659 .{ .src = .{ .to_mem, .none } },
7534 .{ .src = .{ .to_sse, .mem } },
7535 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7536 .{ .src = .{ .to_sse, .to_sse } },
66607537 },
66617538 .extra_temps = .{
6662 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
66637539 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6664 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6665 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6666 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7540 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7541 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7542 .unused,
7543 .unused,
7544 .unused,
7545 .unused,
7546 .unused,
7547 .unused,
7548 },
7549 .dst_temps = .{.{ .rc = .sse }},
7550 .each = .{ .once = &.{
7551 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7552 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
7553 .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ },
7554 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ },
7555 .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ },
7556 .{ ._, .vp_b, .blendv, .dst0x, .src0x, .src1x, .dst0x },
7557 } },
7558 }, .{
7559 .required_features = .{ .sse4_2, null, null, null },
7560 .src_constraints = .{
7561 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7562 .{ .scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7563 },
7564 .patterns = &.{
7565 .{ .src = .{ .to_mut_sse, .mem } },
7566 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
7567 .{ .src = .{ .to_mut_sse, .to_sse } },
7568 },
7569 .extra_temps = .{
7570 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
7571 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7572 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
7573 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7574 .unused,
7575 .unused,
7576 .unused,
7577 .unused,
7578 .unused,
7579 },
7580 .dst_temps = .{.{ .ref = .src0 }},
7581 .each = .{ .once = &.{
7582 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7583 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
7584 .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
7585 .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ },
7586 .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ },
7587 .{ ._, .p_q, .cmpgt, .tmp2x, .tmp3x, ._, ._ },
7588 .{ ._, .p_b, .blendv, .dst0x, .src1x, .tmp2x, ._ },
7589 } },
7590 }, .{
7591 .required_features = .{ .avx2, null, null, null },
7592 .src_constraints = .{
7593 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
7594 .{ .scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
7595 },
7596 .patterns = &.{
7597 .{ .src = .{ .to_sse, .mem } },
7598 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
7599 .{ .src = .{ .to_sse, .to_sse } },
7600 },
7601 .extra_temps = .{
7602 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
7603 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7604 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7605 .unused,
7606 .unused,
7607 .unused,
7608 .unused,
7609 .unused,
7610 .unused,
7611 },
7612 .dst_temps = .{.{ .rc = .sse }},
7613 .each = .{ .once = &.{
7614 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7615 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },
7616 .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ },
7617 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ },
7618 .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ },
7619 .{ ._, .vp_b, .blendv, .dst0y, .src0y, .src1y, .dst0y },
7620 } },
7621 }, .{
7622 .required_features = .{ .avx2, null, null, null },
7623 .src_constraints = .{
7624 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
7625 .{ .multiple_scalar_unsigned_int = .{ .of = .yword, .is = .qword } },
7626 },
7627 .patterns = &.{
7628 .{ .src = .{ .to_mem, .to_mem } },
7629 },
7630 .extra_temps = .{
7631 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7632 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7633 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7634 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7635 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7636 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7637 .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } },
7638 .unused,
66677639 .unused,
66687640 },
66697641 .dst_temps = .{.mem},
66707642 .clobbers = .{ .eflags = true },
66717643 .each = .{ .once = &.{
6672 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6673 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6674 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
6675 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6676 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6677 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
6678 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
6679 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
6680 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6681 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6682 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6683 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6684 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
6685 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
6686 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6687 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6688 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7644 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7645 .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ },
7646 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7647 .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7648 .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ },
7649 .{ ._, .vp_, .xor, .tmp5y, .tmp3y, .tmp2y, ._ },
7650 .{ ._, .vp_, .xor, .tmp6y, .tmp4y, .tmp2y, ._ },
7651 .{ ._, .vp_q, .cmpgt, .tmp5y, .tmp5y, .tmp6y, ._ },
7652 .{ ._, .vp_b, .blendv, .tmp3y, .tmp3y, .tmp4y, .tmp5y },
7653 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
7654 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
66897655 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
66907656 } },
66917657 }, .{
6692 .required_features = .{ .@"64bit", .lzcnt, null, null },
6693 .dst_constraints = .{.{ .scalar_int_is = .byte }},
6694 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
7658 .required_features = .{ .avx, null, null, null },
7659 .src_constraints = .{
7660 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7661 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7662 },
66957663 .patterns = &.{
6696 .{ .src = .{ .to_mem, .none } },
7664 .{ .src = .{ .to_mem, .to_mem } },
66977665 },
66987666 .extra_temps = .{
66997667 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6700 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6701 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6702 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6703 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7668 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7669 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7670 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7671 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7672 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7673 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7674 .unused,
67047675 .unused,
67057676 },
67067677 .dst_temps = .{.mem},
67077678 .clobbers = .{ .eflags = true },
67087679 .each = .{ .once = &.{
6709 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6710 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6711 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
6712 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6713 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6714 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
6715 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
6716 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6717 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6718 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6719 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6720 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
6721 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
6722 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6723 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6724 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7680 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7681 .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
7682 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7683 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7684 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7685 .{ ._, .vp_, .xor, .tmp5x, .tmp3x, .tmp2x, ._ },
7686 .{ ._, .vp_, .xor, .tmp6x, .tmp4x, .tmp2x, ._ },
7687 .{ ._, .vp_q, .cmpgt, .tmp5x, .tmp5x, .tmp6x, ._ },
7688 .{ ._, .vp_b, .blendv, .tmp3x, .tmp3x, .tmp4x, .tmp5x },
7689 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
7690 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
67257691 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
67267692 } },
67277693 }, .{
6728 .required_features = .{ .@"64bit", null, null, null },
6729 .dst_constraints = .{.{ .scalar_int_is = .byte }},
6730 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
7694 .required_features = .{ .sse4_2, null, null, null },
7695 .src_constraints = .{
7696 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7697 .{ .multiple_scalar_unsigned_int = .{ .of = .xword, .is = .qword } },
7698 },
67317699 .patterns = &.{
6732 .{ .src = .{ .to_mem, .none } },
7700 .{ .src = .{ .to_mem, .to_mem } },
67337701 },
67347702 .extra_temps = .{
67357703 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6736 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6737 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6738 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7704 .{ .kind = .{ .smin_mem = .{ .ref = .src0, .vectorize_to = .none } } },
7705 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7706 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7707 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
7708 .{ .type = .vector_2_u64, .kind = .{ .reg = .xmm0 } },
7709 .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } },
67397710 .unused,
67407711 .unused,
67417712 },
67427713 .dst_temps = .{.mem},
67437714 .clobbers = .{ .eflags = true },
67447715 .each = .{ .once = &.{
6745 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6746 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6747 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
6748 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6749 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6750 .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ },
6751 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
6752 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6753 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6754 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6755 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6756 .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ },
6757 .{ ._, ._, .neg, .tmp3b, ._, ._, ._ },
6758 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
6759 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6760 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7716 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
7717 .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ },
7718 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7719 .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ },
7720 .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ },
7721 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7722 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7723 .{ ._, .p_, .xor, .tmp5x, .tmp3x, ._, ._ },
7724 .{ ._, .p_, .xor, .tmp6x, .tmp4x, ._, ._ },
7725 .{ ._, .p_q, .cmpgt, .tmp5x, .tmp6x, ._, ._ },
7726 .{ ._, .p_b, .blendv, .tmp3x, .tmp4x, .tmp5x, ._ },
7727 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
7728 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
67617729 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
67627730 } },
67637731 }, .{
6764 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
6765 .dst_constraints = .{.{ .scalar_int_is = .word }},
6766 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
7732 .required_features = .{ .@"64bit", .cmov, null, null },
7733 .src_constraints = .{
7734 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
7735 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
7736 },
67677737 .patterns = &.{
6768 .{ .src = .{ .to_mem, .none } },
7738 .{ .src = .{ .to_mem, .to_mem } },
67697739 },
67707740 .extra_temps = .{
67717741 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6772 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6773 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6774 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
67757742 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
67767743 .unused,
7744 .unused,
7745 .unused,
7746 .unused,
7747 .unused,
7748 .unused,
7749 .unused,
67777750 },
67787751 .dst_temps = .{.mem},
67797752 .clobbers = .{ .eflags = true },
67807753 .each = .{ .once = &.{
6781 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6782 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6783 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
6784 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6785 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6786 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
6787 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
6788 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
6789 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6790 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6791 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6792 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6793 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
6794 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
6795 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
6796 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6797 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7754 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7755 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7756 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7757 .{ ._, ._ae, .cmov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7758 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
7759 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
67987760 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
67997761 } },
68007762 }, .{
6801 .required_features = .{ .@"64bit", .lzcnt, null, null },
6802 .dst_constraints = .{.{ .scalar_int_is = .word }},
6803 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
7763 .required_features = .{ .@"64bit", null, null, null },
7764 .src_constraints = .{
7765 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
7766 .{ .multiple_scalar_unsigned_int = .{ .of = .qword, .is = .qword } },
7767 },
68047768 .patterns = &.{
6805 .{ .src = .{ .to_mem, .none } },
7769 .{ .src = .{ .to_mem, .to_mem } },
68067770 },
68077771 .extra_temps = .{
68087772 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6809 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6810 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6811 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
68127773 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
68137774 .unused,
7775 .unused,
7776 .unused,
7777 .unused,
7778 .unused,
7779 .unused,
7780 .unused,
68147781 },
68157782 .dst_temps = .{.mem},
68167783 .clobbers = .{ .eflags = true },
68177784 .each = .{ .once = &.{
6818 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6819 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6820 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
6821 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6822 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6823 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
6824 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
6825 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6826 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6827 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6828 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6829 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
6830 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
6831 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
6832 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6833 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7785 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7786 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7787 .{ ._, ._, .cmp, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7788 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
7789 .{ ._, ._, .mov, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7790 .{ .@"1:", ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
7791 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
68347792 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
68357793 } },
68367794 }, .{
6837 .required_features = .{ .@"64bit", null, null, null },
6838 .dst_constraints = .{.{ .scalar_int_is = .word }},
6839 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
7795 .required_features = .{ .@"64bit", .cmov, null, null },
7796 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },
68407797 .patterns = &.{
6841 .{ .src = .{ .to_mem, .none } },
7798 .{ .src = .{ .to_mem, .to_mem } },
68427799 },
68437800 .extra_temps = .{
68447801 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6845 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6846 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6847 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7802 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7803 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7804 .{ .type = .u64, .kind = .{ .reg = .rcx } },
7805 .unused,
7806 .unused,
7807 .unused,
68487808 .unused,
68497809 .unused,
68507810 },
68517811 .dst_temps = .{.mem},
68527812 .clobbers = .{ .eflags = true },
68537813 .each = .{ .once = &.{
6854 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6855 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6856 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
6857 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6858 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6859 .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ },
6860 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
6861 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6862 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6863 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6864 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6865 .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ },
6866 .{ ._, ._, .neg, .tmp3d, ._, ._, ._ },
6867 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
6868 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6869 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7814 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7815 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },
7816 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7817 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7818 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7819 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
7820 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
7821 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
7822 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7823 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7824 .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7825 .{ ._, ._, .lea, .tmp2p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7826 .{ ._, ._ge, .cmov, .tmp1p, .tmp2p, ._, ._ },
7827 .{ ._, ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7828 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7829 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7830 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
68707831 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
68717832 } },
68727833 }, .{
6873 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
6874 .dst_constraints = .{.{ .scalar_int_is = .word }},
6875 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
7834 .required_features = .{ .@"64bit", null, null, null },
7835 .src_constraints = .{ .any_scalar_signed_int, .any_scalar_signed_int },
68767836 .patterns = &.{
6877 .{ .src = .{ .to_mem, .none } },
7837 .{ .src = .{ .to_mem, .to_mem } },
68787838 },
68797839 .extra_temps = .{
68807840 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6881 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6882 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6883 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6884 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7841 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7842 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7843 .{ .type = .u64, .kind = .{ .reg = .rcx } },
7844 .unused,
7845 .unused,
7846 .unused,
7847 .unused,
68857848 .unused,
68867849 },
68877850 .dst_temps = .{.mem},
68887851 .clobbers = .{ .eflags = true },
68897852 .each = .{ .once = &.{
6890 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6891 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6892 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
6893 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6894 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6895 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
6896 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
6897 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
6898 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6899 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6900 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6901 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6902 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
6903 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
6904 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
6905 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6906 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
7853 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7854 .{ .@"0:", ._, .mov, .tmp1d, .sia(-1, .none, .add_src0_elem_size_div_8), ._, ._ },
7855 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7856 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7857 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7858 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
7859 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
7860 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
7861 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7862 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7863 .{ ._, ._, .lea, .tmp1p, .memiad(.src0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7864 .{ ._, ._nge, .j, .@"1f", ._, ._, ._ },
7865 .{ ._, ._, .lea, .tmp1p, .memiad(.src1, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7866 .{ .@"1:", ._, .lea, .tmp2p, .memiad(.dst0, .tmp0, .add_size_sub_elem_size, 8), ._, ._ },
7867 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7868 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7869 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
69077870 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
69087871 } },
69097872 }, .{
6910 .required_features = .{ .@"64bit", .lzcnt, null, null },
6911 .dst_constraints = .{.{ .scalar_int_is = .word }},
6912 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
7873 .required_features = .{ .@"64bit", .cmov, null, null },
7874 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },
69137875 .patterns = &.{
6914 .{ .src = .{ .to_mem, .none } },
7876 .{ .src = .{ .to_mem, .to_mem } },
69157877 },
69167878 .extra_temps = .{
69177879 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6918 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6919 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6920 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
6921 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7880 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7881 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7882 .{ .type = .u64, .kind = .{ .reg = .rcx } },
7883 .unused,
7884 .unused,
7885 .unused,
7886 .unused,
69227887 .unused,
69237888 },
69247889 .dst_temps = .{.mem},
69257890 .clobbers = .{ .eflags = true },
69267891 .each = .{ .once = &.{
6927 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6928 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6929 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
6930 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6931 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6932 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
6933 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
6934 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6935 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6936 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6937 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6938 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
6939 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
6940 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
6941 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6942 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6943 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7892 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7893 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7894 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7895 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7896 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7897 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
7898 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
7899 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
7900 .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ },
7901 .{ ._, ._, .lea, .tmp2p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
7902 .{ ._, ._ae, .cmov, .tmp1p, .tmp2p, ._, ._ },
7903 .{ ._, ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
7904 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7905 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7906 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
7907 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
69447908 } },
69457909 }, .{
69467910 .required_features = .{ .@"64bit", null, null, null },
6947 .dst_constraints = .{.{ .scalar_int_is = .word }},
6948 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
7911 .src_constraints = .{ .any_scalar_unsigned_int, .any_scalar_unsigned_int },
69497912 .patterns = &.{
6950 .{ .src = .{ .to_mem, .none } },
7913 .{ .src = .{ .to_mem, .to_mem } },
69517914 },
69527915 .extra_temps = .{
69537916 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
6954 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
6955 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
6956 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
7917 .{ .type = .isize, .kind = .{ .reg = .rsi } },
7918 .{ .type = .u64, .kind = .{ .reg = .rdi } },
7919 .{ .type = .u64, .kind = .{ .reg = .rcx } },
7920 .unused,
7921 .unused,
7922 .unused,
69577923 .unused,
69587924 .unused,
69597925 },
69607926 .dst_temps = .{.mem},
69617927 .clobbers = .{ .eflags = true },
69627928 .each = .{ .once = &.{
6963 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
6964 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
6965 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
6966 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
6967 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
6968 .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ },
6969 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
6970 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
6971 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
6972 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
6973 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
6974 .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ },
6975 .{ ._, ._, .neg, .tmp3d, ._, ._, ._ },
6976 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
6977 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
6978 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
6979 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7929 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7930 .{ .@"0:", ._, .mov, .tmp1d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7931 .{ ._, ._c, .cl, ._, ._, ._, ._ },
7932 .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
7933 .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
7934 .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ },
7935 .{ ._, ._c, .de, .tmp1d, ._, ._, ._ },
7936 .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
7937 .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ },
7938 .{ ._, ._nae, .j, .@"1f", ._, ._, ._ },
7939 .{ ._, ._, .lea, .tmp1p, .memia(.src1, .tmp0, .add_size_sub_elem_size), ._, ._ },
7940 .{ .@"1:", ._, .lea, .tmp2p, .memia(.dst0, .tmp0, .add_size_sub_elem_size), ._, ._ },
7941 .{ ._, ._, .mov, .tmp3d, .sa(.none, .add_src0_elem_size_div_8), ._, ._ },
7942 .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ },
7943 .{ ._, ._, .@"test", .tmp0p, .tmp0p, ._, ._ },
7944 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
69807945 } },
69817946 } }) catch |err| switch (err) {
6982 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
7947 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
69837948 @tagName(air_tag),
6984 cg.typeOf(ty_op.operand).fmt(pt),
7949 cg.typeOf(bin_op.lhs).fmt(pt),
69857950 ops[0].tracking(cg),
7951 ops[1].tracking(cg),
69867952 }),
69877953 else => |e| return e,
69887954 };
6989 for (ops) |op| for (res) |r| {
6990 if (op.index == r.index) break;
6991 } else try op.die(cg);
6992 try res[0].moveTo(inst, cg);
7955 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
69937956 },
6994
6995 .cmp_vector, .cmp_vector_optimized => |air_tag| if (use_old) try cg.airCmpVector(inst) else fallback: {
6996 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
6997 const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;
6998 switch (extra.compareOperator()) {
6999 .eq, .neq => if (cg.typeOf(extra.lhs).scalarType(zcu).isRuntimeFloat())
7000 break :fallback try cg.airCmpVector(inst),
7001 else => break :fallback try cg.airCmpVector(inst),
7002 }
7003 var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs });
7957 .alloc => if (use_old) try cg.airAlloc(inst) else {
7958 const ty = air_datas[@intFromEnum(inst)].ty;
7959 const slot = try cg.tempInit(ty, .{ .lea_frame = .{
7960 .index = try cg.allocMemPtr(inst),
7961 } });
7962 try slot.finish(inst, &.{}, &.{}, cg);
7963 },
7964 .inferred_alloc, .inferred_alloc_comptime => unreachable,
7965 .ret_ptr => if (use_old) try cg.airRetPtr(inst) else {
7966 const ty = air_datas[@intFromEnum(inst)].ty;
7967 var slot = switch (cg.ret_mcv.long) {
7968 else => unreachable,
7969 .none => try cg.tempInit(ty, .{ .lea_frame = .{
7970 .index = try cg.allocMemPtr(inst),
7971 } }),
7972 .load_frame => slot: {
7973 var slot = try cg.tempInit(ty, cg.ret_mcv.long);
7974 try slot.toOffset(cg.ret_mcv.short.indirect.off, cg);
7975 break :slot slot;
7976 },
7977 };
7978 try slot.finish(inst, &.{}, &.{}, cg);
7979 },
7980 .assembly => try cg.airAsm(inst),
7981 .bit_and, .bit_or, .xor, .bool_and, .bool_or => |air_tag| if (use_old) try cg.airBinOp(inst, air_tag) else {
7982 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
7983 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
70047984 var res: [1]Temp = undefined;
7005 switch (extra.compareOperator()) {
7006 .lt => unreachable,
7007 .lte => unreachable,
7008 .eq, .neq => |cmp_op| cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) {
7009 else => unreachable,
7010 .eq => .e,
7011 .neq => .ne,
7012 })) {
7013 else => unreachable,
7014 inline .e, .ne => |cc| comptime &.{ .{
7015 .required_features = .{ .avx2, null, null, null },
7016 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
7017 .patterns = &.{
7018 .{ .src = .{ .to_ymm, .mem } },
7019 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
7020 .{ .src = .{ .to_ymm, .to_ymm } },
7021 },
7022 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7023 .kind = .all,
7024 .inverted = switch (cc) {
7025 else => unreachable,
7026 .e => false,
7027 .ne => true,
7028 },
7029 .scalar = .byte,
7030 } } }},
7031 .each = .{ .once = &.{
7032 .{ ._, .vp_b, .cmpeq, .dst0y, .src0y, .src1y, ._ },
7985 cg.select(&res, &.{cg.typeOf(bin_op.lhs)}, &ops, switch (@as(Mir.Inst.Tag, switch (air_tag) {
7986 else => unreachable,
7987 .bit_and, .bool_and => .@"and",
7988 .bit_or, .bool_or => .@"or",
7989 .xor => .xor,
7990 })) {
7991 else => unreachable,
7992 inline .@"and", .@"or", .xor => |mir_tag| comptime &.{ .{
7993 .src_constraints = .{ .{ .size = .byte }, .{ .size = .byte } },
7994 .patterns = &.{
7995 .{ .src = .{ .mut_mem, .imm8 } },
7996 .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } },
7997 .{ .src = .{ .to_mut_gpr, .imm8 } },
7998 .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } },
7999 .{ .src = .{ .mut_mem, .to_gpr } },
8000 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
8001 .{ .src = .{ .to_mut_gpr, .mem } },
8002 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
8003 .{ .src = .{ .to_mut_gpr, .to_gpr } },
8004 },
8005 .dst_temps = .{.{ .ref = .src0 }},
8006 .clobbers = .{ .eflags = true },
8007 .each = .{ .once = &.{
8008 .{ ._, ._, mir_tag, .dst0b, .src1b, ._, ._ },
8009 } },
8010 }, .{
8011 .src_constraints = .{ .{ .size = .word }, .{ .size = .word } },
8012 .patterns = &.{
8013 .{ .src = .{ .mut_mem, .imm16 } },
8014 .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } },
8015 .{ .src = .{ .to_mut_gpr, .imm16 } },
8016 .{ .src = .{ .imm16, .to_mut_gpr }, .commute = .{ 0, 1 } },
8017 .{ .src = .{ .mut_mem, .to_gpr } },
8018 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
8019 .{ .src = .{ .to_mut_gpr, .mem } },
8020 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
8021 .{ .src = .{ .to_mut_gpr, .to_gpr } },
8022 },
8023 .dst_temps = .{.{ .ref = .src0 }},
8024 .clobbers = .{ .eflags = true },
8025 .each = .{ .once = &.{
8026 .{ ._, ._, mir_tag, .dst0w, .src1w, ._, ._ },
8027 } },
8028 }, .{
8029 .src_constraints = .{ .{ .size = .dword }, .{ .size = .dword } },
8030 .patterns = &.{
8031 .{ .src = .{ .mut_mem, .imm32 } },
8032 .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } },
8033 .{ .src = .{ .to_mut_gpr, .imm32 } },
8034 .{ .src = .{ .imm32, .to_mut_gpr }, .commute = .{ 0, 1 } },
8035 .{ .src = .{ .mut_mem, .to_gpr } },
8036 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
8037 .{ .src = .{ .to_mut_gpr, .mem } },
8038 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
8039 .{ .src = .{ .to_mut_gpr, .to_gpr } },
8040 },
8041 .dst_temps = .{.{ .ref = .src0 }},
8042 .clobbers = .{ .eflags = true },
8043 .each = .{ .once = &.{
8044 .{ ._, ._, mir_tag, .dst0d, .src1d, ._, ._ },
8045 } },
8046 }, .{
8047 .required_features = .{ .@"64bit", null, null, null },
8048 .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword } },
8049 .patterns = &.{
8050 .{ .src = .{ .mut_mem, .simm32 } },
8051 .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } },
8052 .{ .src = .{ .to_mut_gpr, .simm32 } },
8053 .{ .src = .{ .simm32, .to_mut_gpr }, .commute = .{ 0, 1 } },
8054 .{ .src = .{ .mut_mem, .to_gpr } },
8055 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
8056 .{ .src = .{ .to_mut_gpr, .mem } },
8057 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
8058 .{ .src = .{ .to_mut_gpr, .to_gpr } },
8059 },
8060 .dst_temps = .{.{ .ref = .src0 }},
8061 .clobbers = .{ .eflags = true },
8062 .each = .{ .once = &.{
8063 .{ ._, ._, mir_tag, .dst0q, .src1q, ._, ._ },
8064 } },
8065 }, .{
8066 .required_features = .{ .mmx, null, null, null },
8067 .src_constraints = .{ .{ .size = .qword }, .{ .size = .qword } },
8068 .patterns = &.{
8069 .{ .src = .{ .to_mut_mm, .mem } },
8070 .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } },
8071 .{ .src = .{ .to_mut_mm, .to_mm } },
8072 },
8073 .dst_temps = .{.{ .ref = .src0 }},
8074 .each = .{ .once = &.{
8075 .{ ._, .p_, mir_tag, .dst0q, .src1q, ._, ._ },
8076 } },
8077 }, .{
8078 .required_features = .{ .avx, null, null, null },
8079 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } },
8080 .patterns = &.{
8081 .{ .src = .{ .to_xmm, .mem } },
8082 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
8083 .{ .src = .{ .to_xmm, .to_xmm } },
8084 },
8085 .dst_temps = .{.{ .rc = .sse }},
8086 .each = .{ .once = &.{
8087 .{ ._, .vp_, mir_tag, .dst0x, .src0x, .src1x, ._ },
8088 } },
8089 }, .{
8090 .required_features = .{ .sse2, null, null, null },
8091 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } },
8092 .patterns = &.{
8093 .{ .src = .{ .to_mut_xmm, .mem } },
8094 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
8095 .{ .src = .{ .to_mut_xmm, .to_xmm } },
8096 },
8097 .dst_temps = .{.{ .ref = .src0 }},
8098 .each = .{ .once = &.{
8099 .{ ._, .p_, mir_tag, .dst0x, .src1x, ._, ._ },
8100 } },
8101 }, .{
8102 .required_features = .{ .sse, null, null, null },
8103 .src_constraints = .{ .{ .size = .xword }, .{ .size = .xword } },
8104 .patterns = &.{
8105 .{ .src = .{ .to_mut_xmm, .mem } },
8106 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
8107 .{ .src = .{ .to_mut_xmm, .to_xmm } },
8108 },
8109 .dst_temps = .{.{ .ref = .src0 }},
8110 .each = .{ .once = &.{
8111 .{ ._, ._ps, mir_tag, .dst0x, .src1x, ._, ._ },
8112 } },
8113 }, .{
8114 .required_features = .{ .avx2, null, null, null },
8115 .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword } },
8116 .patterns = &.{
8117 .{ .src = .{ .to_ymm, .mem } },
8118 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
8119 .{ .src = .{ .to_ymm, .to_ymm } },
8120 },
8121 .dst_temps = .{.{ .rc = .sse }},
8122 .each = .{ .once = &.{
8123 .{ ._, .vp_, mir_tag, .dst0y, .src0y, .src1y, ._ },
8124 } },
8125 }, .{
8126 .required_features = .{ .avx, null, null, null },
8127 .src_constraints = .{ .{ .size = .yword }, .{ .size = .yword } },
8128 .patterns = &.{
8129 .{ .src = .{ .to_ymm, .mem } },
8130 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
8131 .{ .src = .{ .to_ymm, .to_ymm } },
8132 },
8133 .dst_temps = .{.{ .rc = .sse }},
8134 .each = .{ .once = &.{
8135 .{ ._, .v_pd, mir_tag, .dst0y, .src0y, .src1y, ._ },
8136 } },
8137 }, .{
8138 .required_features = .{ .avx2, null, null, null },
8139 .src_constraints = .{ .{ .multiple_size = .yword }, .{ .multiple_size = .yword } },
8140 .patterns = &.{
8141 .{ .src = .{ .to_mem, .to_mem } },
8142 },
8143 .extra_temps = .{
8144 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8145 .{ .kind = .{ .rc = .sse } },
8146 .unused,
8147 .unused,
8148 .unused,
8149 .unused,
8150 .unused,
8151 .unused,
8152 .unused,
8153 },
8154 .dst_temps = .{.mem},
8155 .clobbers = .{ .eflags = true },
8156 .each = .{ .once = &.{
8157 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8158 .{ .@"0:", .v_dqu, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
8159 .{ ._, .vp_, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
8160 .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
8161 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8162 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8163 } },
8164 }, .{
8165 .required_features = .{ .avx, null, null, null },
8166 .src_constraints = .{ .{ .multiple_size = .yword }, .{ .multiple_size = .yword } },
8167 .patterns = &.{
8168 .{ .src = .{ .to_mem, .to_mem } },
8169 },
8170 .extra_temps = .{
8171 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8172 .{ .kind = .{ .rc = .sse } },
8173 .unused,
8174 .unused,
8175 .unused,
8176 .unused,
8177 .unused,
8178 .unused,
8179 .unused,
8180 },
8181 .dst_temps = .{.mem},
8182 .clobbers = .{ .eflags = true },
8183 .each = .{ .once = &.{
8184 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8185 .{ .@"0:", .v_pd, .movu, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
8186 .{ ._, .v_pd, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
8187 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
8188 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8189 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8190 } },
8191 }, .{
8192 .required_features = .{ .avx, null, null, null },
8193 .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } },
8194 .patterns = &.{
8195 .{ .src = .{ .to_mem, .to_mem } },
8196 },
8197 .extra_temps = .{
8198 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8199 .{ .kind = .{ .rc = .sse } },
8200 .unused,
8201 .unused,
8202 .unused,
8203 .unused,
8204 .unused,
8205 .unused,
8206 .unused,
8207 },
8208 .dst_temps = .{.mem},
8209 .clobbers = .{ .eflags = true },
8210 .each = .{ .once = &.{
8211 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8212 .{ .@"0:", .v_dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8213 .{ ._, .vp_, mir_tag, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
8214 .{ ._, .v_dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8215 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8216 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8217 } },
8218 }, .{
8219 .required_features = .{ .sse2, null, null, null },
8220 .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } },
8221 .patterns = &.{
8222 .{ .src = .{ .to_mem, .to_mem } },
8223 },
8224 .extra_temps = .{
8225 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8226 .{ .kind = .{ .rc = .sse } },
8227 .unused,
8228 .unused,
8229 .unused,
8230 .unused,
8231 .unused,
8232 .unused,
8233 .unused,
8234 },
8235 .dst_temps = .{.mem},
8236 .clobbers = .{ .eflags = true },
8237 .each = .{ .once = &.{
8238 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8239 .{ .@"0:", ._dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8240 .{ ._, .p_, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8241 .{ ._, ._dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8242 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8243 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8244 } },
8245 }, .{
8246 .required_features = .{ .sse, null, null, null },
8247 .src_constraints = .{ .{ .multiple_size = .xword }, .{ .multiple_size = .xword } },
8248 .patterns = &.{
8249 .{ .src = .{ .to_mem, .to_mem } },
8250 },
8251 .extra_temps = .{
8252 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8253 .{ .kind = .{ .rc = .sse } },
8254 .unused,
8255 .unused,
8256 .unused,
8257 .unused,
8258 .unused,
8259 .unused,
8260 .unused,
8261 },
8262 .dst_temps = .{.mem},
8263 .clobbers = .{ .eflags = true },
8264 .each = .{ .once = &.{
8265 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8266 .{ .@"0:", ._ps, .movu, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8267 .{ ._, ._ps, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8268 .{ ._, ._ps, .movu, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
8269 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8270 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8271 } },
8272 }, .{
8273 .required_features = .{ .mmx, null, null, null },
8274 .src_constraints = .{ .{ .multiple_size = .qword }, .{ .multiple_size = .qword } },
8275 .patterns = &.{
8276 .{ .src = .{ .to_mem, .to_mem } },
8277 },
8278 .extra_temps = .{
8279 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8280 .{ .kind = .{ .rc = .mmx } },
8281 .unused,
8282 .unused,
8283 .unused,
8284 .unused,
8285 .unused,
8286 .unused,
8287 .unused,
8288 },
8289 .dst_temps = .{.mem},
8290 .clobbers = .{ .eflags = true },
8291 .each = .{ .once = &.{
8292 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8293 .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8294 .{ ._, .p_, mir_tag, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8295 .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
8296 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8297 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8298 } },
8299 }, .{
8300 .src_constraints = .{ .{ .multiple_size = .qword }, .{ .multiple_size = .qword } },
8301 .patterns = &.{
8302 .{ .src = .{ .to_mem, .to_mem } },
8303 },
8304 .extra_temps = .{
8305 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8306 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8307 .unused,
8308 .unused,
8309 .unused,
8310 .unused,
8311 .unused,
8312 .unused,
8313 .unused,
8314 },
8315 .dst_temps = .{.mem},
8316 .clobbers = .{ .eflags = true },
8317 .each = .{ .once = &.{
8318 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8319 .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
8320 .{ ._, ._, mir_tag, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
8321 .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
8322 .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
8323 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8324 } },
8325 } },
8326 }) catch |err| switch (err) {
8327 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
8328 @tagName(air_tag),
8329 cg.typeOf(bin_op.lhs).fmt(pt),
8330 ops[0].tracking(cg),
8331 ops[1].tracking(cg),
8332 }),
8333 else => |e| return e,
8334 };
8335 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
8336 },
8337 .not => |air_tag| if (use_old) try cg.airUnOp(inst, air_tag) else {
8338 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
8339 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
8340 var res: [1]Temp = undefined;
8341 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
8342 .src_constraints = .{ .{ .signed_or_exact_int = .byte }, .any },
8343 .patterns = &.{
8344 .{ .src = .{ .mut_mem, .none } },
8345 .{ .src = .{ .to_mut_gpr, .none } },
8346 },
8347 .dst_temps = .{.{ .ref = .src0 }},
8348 .each = .{ .once = &.{
8349 .{ ._, ._, .not, .dst0b, ._, ._, ._ },
8350 } },
8351 }, .{
8352 .src_constraints = .{ .{ .unsigned_int = .byte }, .any },
8353 .patterns = &.{
8354 .{ .src = .{ .mut_mem, .none } },
8355 .{ .src = .{ .to_mut_gpr, .none } },
8356 },
8357 .dst_temps = .{.{ .ref = .src0 }},
8358 .clobbers = .{ .eflags = true },
8359 .each = .{ .once = &.{
8360 .{ ._, ._, .xor, .dst0b, .sa(.src0, .add_umax), ._, ._ },
8361 } },
8362 }, .{
8363 .src_constraints = .{ .{ .signed_or_exact_int = .word }, .any },
8364 .patterns = &.{
8365 .{ .src = .{ .mut_mem, .none } },
8366 .{ .src = .{ .to_mut_gpr, .none } },
8367 },
8368 .dst_temps = .{.{ .ref = .src0 }},
8369 .each = .{ .once = &.{
8370 .{ ._, ._, .not, .dst0w, ._, ._, ._ },
8371 } },
8372 }, .{
8373 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
8374 .patterns = &.{
8375 .{ .src = .{ .mut_mem, .none } },
8376 .{ .src = .{ .to_mut_gpr, .none } },
8377 },
8378 .dst_temps = .{.{ .ref = .src0 }},
8379 .clobbers = .{ .eflags = true },
8380 .each = .{ .once = &.{
8381 .{ ._, ._, .xor, .dst0w, .sa(.src0, .add_umax), ._, ._ },
8382 } },
8383 }, .{
8384 .src_constraints = .{ .{ .signed_or_exact_int = .dword }, .any },
8385 .patterns = &.{
8386 .{ .src = .{ .mut_mem, .none } },
8387 .{ .src = .{ .to_mut_gpr, .none } },
8388 },
8389 .dst_temps = .{.{ .ref = .src0 }},
8390 .each = .{ .once = &.{
8391 .{ ._, ._, .not, .dst0d, ._, ._, ._ },
8392 } },
8393 }, .{
8394 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
8395 .patterns = &.{
8396 .{ .src = .{ .mut_mem, .none } },
8397 .{ .src = .{ .to_mut_gpr, .none } },
8398 },
8399 .dst_temps = .{.{ .ref = .src0 }},
8400 .clobbers = .{ .eflags = true },
8401 .each = .{ .once = &.{
8402 .{ ._, ._, .xor, .dst0d, .sa(.src0, .add_umax), ._, ._ },
8403 } },
8404 }, .{
8405 .required_features = .{ .@"64bit", null, null, null },
8406 .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any },
8407 .patterns = &.{
8408 .{ .src = .{ .mut_mem, .none } },
8409 .{ .src = .{ .to_mut_gpr, .none } },
8410 },
8411 .dst_temps = .{.{ .ref = .src0 }},
8412 .each = .{ .once = &.{
8413 .{ ._, ._, .not, .dst0q, ._, ._, ._ },
8414 } },
8415 }, .{
8416 .required_features = .{ .@"64bit", null, null, null },
8417 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
8418 .patterns = &.{
8419 .{ .src = .{ .mem, .none } },
8420 .{ .src = .{ .to_gpr, .none } },
8421 },
8422 .dst_temps = .{.{ .rc = .general_purpose }},
8423 .each = .{ .once = &.{
8424 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
8425 .{ ._, ._, .xor, .dst0q, .src0q, ._, ._ },
8426 } },
8427 }, .{
8428 .required_features = .{ .mmx, null, null, null },
8429 .src_constraints = .{ .{ .signed_or_exact_int = .qword }, .any },
8430 .patterns = &.{
8431 .{ .src = .{ .mem, .none } },
8432 .{ .src = .{ .to_mm, .none } },
8433 },
8434 .dst_temps = .{.{ .rc = .mmx }},
8435 .each = .{ .once = &.{
8436 .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ },
8437 .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ },
8438 } },
8439 }, .{
8440 .required_features = .{ .mmx, null, null, null },
8441 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
8442 .patterns = &.{
8443 .{ .src = .{ .to_mut_mm, .none } },
8444 },
8445 .extra_temps = .{
8446 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8447 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
8448 .unused,
8449 .unused,
8450 .unused,
8451 .unused,
8452 .unused,
8453 .unused,
8454 .unused,
8455 },
8456 .dst_temps = .{.{ .ref = .src0 }},
8457 .each = .{ .once = &.{
8458 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8459 .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ },
8460 } },
8461 }, .{
8462 .required_features = .{ .avx, null, null, null },
8463 .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any },
8464 .patterns = &.{
8465 .{ .src = .{ .mem, .none } },
8466 .{ .src = .{ .to_xmm, .none } },
8467 },
8468 .dst_temps = .{.{ .rc = .sse }},
8469 .each = .{ .once = &.{
8470 .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ },
8471 .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ },
8472 } },
8473 }, .{
8474 .required_features = .{ .avx, null, null, null },
8475 .src_constraints = .{ .{ .unsigned_int = .xword }, .any },
8476 .patterns = &.{
8477 .{ .src = .{ .to_xmm, .none } },
8478 },
8479 .extra_temps = .{
8480 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8481 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
8482 .unused,
8483 .unused,
8484 .unused,
8485 .unused,
8486 .unused,
8487 .unused,
8488 .unused,
8489 },
8490 .dst_temps = .{.{ .rc = .sse }},
8491 .each = .{ .once = &.{
8492 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8493 .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
8494 } },
8495 }, .{
8496 .required_features = .{ .sse2, null, null, null },
8497 .src_constraints = .{ .{ .signed_or_exact_int = .xword }, .any },
8498 .patterns = &.{
8499 .{ .src = .{ .mem, .none } },
8500 .{ .src = .{ .to_xmm, .none } },
8501 },
8502 .dst_temps = .{.{ .rc = .sse }},
8503 .each = .{ .once = &.{
8504 .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ },
8505 .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ },
8506 } },
8507 }, .{
8508 .required_features = .{ .sse2, null, null, null },
8509 .src_constraints = .{ .{ .unsigned_int = .xword }, .any },
8510 .patterns = &.{
8511 .{ .src = .{ .to_mut_xmm, .none } },
8512 },
8513 .extra_temps = .{
8514 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8515 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
8516 .unused,
8517 .unused,
8518 .unused,
8519 .unused,
8520 .unused,
8521 .unused,
8522 .unused,
8523 },
8524 .dst_temps = .{.{ .ref = .src0 }},
8525 .each = .{ .once = &.{
8526 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8527 .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ },
8528 } },
8529 }, .{
8530 .required_features = .{ .sse, null, null, null },
8531 .src_constraints = .{ .{ .int = .xword }, .any },
8532 .patterns = &.{
8533 .{ .src = .{ .to_mut_xmm, .none } },
8534 },
8535 .extra_temps = .{
8536 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8537 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
8538 .unused,
8539 .unused,
8540 .unused,
8541 .unused,
8542 .unused,
8543 .unused,
8544 .unused,
8545 },
8546 .dst_temps = .{.{ .ref = .src0 }},
8547 .each = .{ .once = &.{
8548 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8549 .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ },
8550 } },
8551 }, .{
8552 .required_features = .{ .avx2, null, null, null },
8553 .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any },
8554 .patterns = &.{
8555 .{ .src = .{ .mem, .none } },
8556 .{ .src = .{ .to_ymm, .none } },
8557 },
8558 .dst_temps = .{.{ .rc = .sse }},
8559 .each = .{ .once = &.{
8560 .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ },
8561 .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ },
8562 } },
8563 }, .{
8564 .required_features = .{ .avx2, null, null, null },
8565 .src_constraints = .{ .{ .unsigned_int = .yword }, .any },
8566 .patterns = &.{
8567 .{ .src = .{ .to_ymm, .none } },
8568 },
8569 .extra_temps = .{
8570 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8571 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
8572 .unused,
8573 .unused,
8574 .unused,
8575 .unused,
8576 .unused,
8577 .unused,
8578 .unused,
8579 },
8580 .dst_temps = .{.{ .rc = .sse }},
8581 .each = .{ .once = &.{
8582 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8583 .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
8584 } },
8585 }, .{
8586 .required_features = .{ .avx, null, null, null },
8587 .src_constraints = .{ .{ .signed_or_exact_int = .yword }, .any },
8588 .patterns = &.{
8589 .{ .src = .{ .mem, .none } },
8590 .{ .src = .{ .to_ymm, .none } },
8591 },
8592 .dst_temps = .{.{ .rc = .sse }},
8593 .each = .{ .once = &.{
8594 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
8595 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
8596 } },
8597 }, .{
8598 .required_features = .{ .avx, null, null, null },
8599 .src_constraints = .{ .{ .unsigned_int = .yword }, .any },
8600 .patterns = &.{
8601 .{ .src = .{ .to_ymm, .none } },
8602 },
8603 .extra_temps = .{
8604 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8605 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
8606 .unused,
8607 .unused,
8608 .unused,
8609 .unused,
8610 .unused,
8611 .unused,
8612 .unused,
8613 },
8614 .dst_temps = .{.{ .rc = .sse }},
8615 .each = .{ .once = &.{
8616 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
8617 .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
8618 } },
8619 }, .{
8620 .required_features = .{ .avx2, null, null, null },
8621 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any },
8622 .patterns = &.{
8623 .{ .src = .{ .to_mem, .none } },
8624 },
8625 .extra_temps = .{
8626 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8627 .{ .kind = .{ .rc = .sse } },
8628 .{ .kind = .{ .rc = .sse } },
8629 .unused,
8630 .unused,
8631 .unused,
8632 .unused,
8633 .unused,
8634 .unused,
8635 },
8636 .dst_temps = .{.mem},
8637 .clobbers = .{ .eflags = true },
8638 .each = .{ .once = &.{
8639 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
8640 .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ },
8641 .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
8642 .{ ._, .v_dqu, .mov, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
8643 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8644 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8645 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ },
8646 .{ ._, .v_dqa, .mov, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ },
8647 } },
8648 }, .{
8649 .required_features = .{ .avx2, null, null, null },
8650 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any },
8651 .patterns = &.{
8652 .{ .src = .{ .to_mem, .none } },
8653 },
8654 .extra_temps = .{
8655 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8656 .{ .kind = .{ .rc = .sse } },
8657 .{ .kind = .{ .rc = .sse } },
8658 .unused,
8659 .unused,
8660 .unused,
8661 .unused,
8662 .unused,
8663 .unused,
8664 },
8665 .dst_temps = .{.mem},
8666 .clobbers = .{ .eflags = true },
8667 .each = .{ .once = &.{
8668 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8669 .{ ._, .vp_q, .cmpeq, .tmp1y, .tmp1y, .tmp1y, ._ },
8670 .{ .@"0:", .vp_, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
8671 .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
8672 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8673 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8674 } },
8675 }, .{
8676 .required_features = .{ .avx, null, null, null },
8677 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .xword } }, .any },
8678 .patterns = &.{
8679 .{ .src = .{ .to_mem, .none } },
8680 },
8681 .extra_temps = .{
8682 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8683 .{ .kind = .{ .rc = .sse } },
8684 .{ .kind = .{ .rc = .sse } },
8685 .unused,
8686 .unused,
8687 .unused,
8688 .unused,
8689 .unused,
8690 .unused,
8691 },
8692 .dst_temps = .{.mem},
8693 .clobbers = .{ .eflags = true },
8694 .each = .{ .once = &.{
8695 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
8696 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
8697 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memiad(.src0y, .tmp0, .add_size, -16), ._ },
8698 .{ ._, .v_pd, .movu, .memiad(.dst0y, .tmp0, .add_size, -16), .tmp2y, ._, ._ },
8699 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8700 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8701 .{ .@"0:", .v_pd, .xor, .tmp2x, .tmp1x, .memad(.src0x, .add_size, -16), ._ },
8702 .{ ._, .v_pd, .mova, .memad(.dst0x, .add_size, -16), .tmp2x, ._, ._ },
8703 } },
8704 }, .{
8705 .required_features = .{ .avx, null, null, null },
8706 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .yword, .is = .yword } }, .any },
8707 .patterns = &.{
8708 .{ .src = .{ .to_mem, .none } },
8709 },
8710 .extra_temps = .{
8711 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8712 .{ .kind = .{ .rc = .sse } },
8713 .{ .kind = .{ .rc = .sse } },
8714 .unused,
8715 .unused,
8716 .unused,
8717 .unused,
8718 .unused,
8719 .unused,
8720 },
8721 .dst_temps = .{.mem},
8722 .clobbers = .{ .eflags = true },
8723 .each = .{ .once = &.{
8724 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8725 .{ ._, .v_pd, .cmp, .tmp1y, .tmp1y, .tmp1y, .ui(0b01111) },
8726 .{ .@"0:", .v_pd, .xor, .tmp2y, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._ },
8727 .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp2y, ._, ._ },
8728 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
8729 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8730 } },
8731 }, .{
8732 .required_features = .{ .avx, null, null, null },
8733 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
8734 .patterns = &.{
8735 .{ .src = .{ .to_mem, .none } },
8736 },
8737 .extra_temps = .{
8738 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8739 .{ .kind = .{ .rc = .sse } },
8740 .{ .kind = .{ .rc = .sse } },
8741 .unused,
8742 .unused,
8743 .unused,
8744 .unused,
8745 .unused,
8746 .unused,
8747 },
8748 .dst_temps = .{.mem},
8749 .clobbers = .{ .eflags = true },
8750 .each = .{ .once = &.{
8751 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8752 .{ ._, .vp_q, .cmpeq, .tmp1x, .tmp1x, .tmp1x, ._ },
8753 .{ .@"0:", .v_, .xor, .tmp2x, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._ },
8754 .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
8755 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8756 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8757 } },
8758 }, .{
8759 .required_features = .{ .sse2, null, null, null },
8760 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
8761 .patterns = &.{
8762 .{ .src = .{ .to_mem, .none } },
8763 },
8764 .extra_temps = .{
8765 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8766 .{ .kind = .{ .rc = .sse } },
8767 .{ .kind = .{ .rc = .sse } },
8768 .unused,
8769 .unused,
8770 .unused,
8771 .unused,
8772 .unused,
8773 .unused,
8774 },
8775 .dst_temps = .{.mem},
8776 .clobbers = .{ .eflags = true },
8777 .each = .{ .once = &.{
8778 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8779 .{ ._, .p_d, .cmpeq, .tmp1x, .tmp1x, ._, ._ },
8780 .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8781 .{ ._, .p_, .xor, .tmp2x, .tmp1x, ._, ._ },
8782 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp2x, ._, ._ },
8783 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8784 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8785 } },
8786 }, .{
8787 .required_features = .{ .@"64bit", null, null, null },
8788 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
8789 .patterns = &.{
8790 .{ .src = .{ .mut_mem, .none } },
8791 },
8792 .extra_temps = .{
8793 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8794 .unused,
8795 .unused,
8796 .unused,
8797 .unused,
8798 .unused,
8799 .unused,
8800 .unused,
8801 .unused,
8802 },
8803 .dst_temps = .{.{ .ref = .src0 }},
8804 .clobbers = .{ .eflags = true },
8805 .each = .{ .once = &.{
8806 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8807 .{ .@"0:", ._, .not, .memia(.dst0q, .tmp0, .add_size), ._, ._, ._ },
8808 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, 8), ._, ._, ._ },
8809 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8810 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8811 } },
8812 }, .{
8813 .required_features = .{ .@"64bit", null, null, null },
8814 .src_constraints = .{ .{ .signed_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
8815 .patterns = &.{
8816 .{ .src = .{ .to_mem, .none } },
8817 },
8818 .extra_temps = .{
8819 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8820 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8821 .unused,
8822 .unused,
8823 .unused,
8824 .unused,
8825 .unused,
8826 .unused,
8827 .unused,
8828 },
8829 .dst_temps = .{.mem},
8830 .clobbers = .{ .eflags = true },
8831 .each = .{ .once = &.{
8832 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8833 .{ .@"0:", ._, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8834 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
8835 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
8836 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8837 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8838 } },
8839 }, .{
8840 .required_features = .{ .@"64bit", null, null, null },
8841 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any },
8842 .patterns = &.{
8843 .{ .src = .{ .mut_mem, .none } },
8844 },
8845 .extra_temps = .{
8846 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8847 .unused,
8848 .unused,
8849 .unused,
8850 .unused,
8851 .unused,
8852 .unused,
8853 .unused,
8854 .unused,
8855 },
8856 .dst_temps = .{.{ .ref = .src0 }},
8857 .clobbers = .{ .eflags = true },
8858 .each = .{ .once = &.{
8859 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
8860 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ },
8861 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ },
8862 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8863 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8864 .{ ._, ._, .not, .memad(.dst0d, .add_size, -16), ._, ._, ._ },
8865 } },
8866 }, .{
8867 .required_features = .{ .@"64bit", null, null, null },
8868 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .xword, .is = .dword } }, .any },
8869 .patterns = &.{
8870 .{ .src = .{ .to_mem, .none } },
8871 },
8872 .extra_temps = .{
8873 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8874 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8875 .unused,
8876 .unused,
8877 .unused,
8878 .unused,
8879 .unused,
8880 .unused,
8881 .unused,
8882 },
8883 .dst_temps = .{.mem},
8884 .clobbers = .{ .eflags = true },
8885 .each = .{ .once = &.{
8886 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
8887 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ },
8888 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
8889 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ },
8890 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8891 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8892 .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ },
8893 .{ ._, ._, .not, .tmp0d, ._, ._, ._ },
8894 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16), .tmp0d, ._, ._ },
8895 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16 + 4), .si(0), ._, ._ },
8896 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16 + 8), .si(0), ._, ._ },
8897 } },
8898 }, .{
8899 .required_features = .{ .@"64bit", null, null, null },
8900 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any },
8901 .patterns = &.{
8902 .{ .src = .{ .mut_mem, .none } },
8903 },
8904 .extra_temps = .{
8905 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8906 .unused,
8907 .unused,
8908 .unused,
8909 .unused,
8910 .unused,
8911 .unused,
8912 .unused,
8913 .unused,
8914 },
8915 .dst_temps = .{.{ .ref = .src0 }},
8916 .clobbers = .{ .eflags = true },
8917 .each = .{ .once = &.{
8918 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
8919 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ },
8920 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ },
8921 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
8922 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8923 .{ ._, ._, .not, .memad(.dst0q, .add_size, -16), ._, ._, ._ },
8924 } },
8925 }, .{
8926 .required_features = .{ .@"64bit", null, null, null },
8927 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .qword, .is = .qword } }, .any },
8928 .patterns = &.{
8929 .{ .src = .{ .to_mem, .none } },
8930 },
8931 .extra_temps = .{
8932 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8933 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8934 .unused,
8935 .unused,
8936 .unused,
8937 .unused,
8938 .unused,
8939 .unused,
8940 .unused,
8941 },
8942 .dst_temps = .{.mem},
8943 .clobbers = .{ .eflags = true },
8944 .each = .{ .once = &.{
8945 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
8946 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ },
8947 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
8948 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ },
8949 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8950 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8951 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
8952 } },
8953 }, .{
8954 .required_features = .{ .@"64bit", null, null, null },
8955 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any },
8956 .patterns = &.{
8957 .{ .src = .{ .mut_mem, .none } },
8958 },
8959 .extra_temps = .{
8960 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8961 .unused,
8962 .unused,
8963 .unused,
8964 .unused,
8965 .unused,
8966 .unused,
8967 .unused,
8968 .unused,
8969 },
8970 .dst_temps = .{.{ .ref = .src0 }},
8971 .clobbers = .{ .eflags = true },
8972 .each = .{ .once = &.{
8973 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
8974 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ },
8975 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8976 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8977 .{ ._, ._, .not, .memad(.dst0d, .add_size, -8), ._, ._, ._ },
8978 } },
8979 }, .{
8980 .required_features = .{ .@"64bit", null, null, null },
8981 .src_constraints = .{ .{ .exact_remainder_int = .{ .of = .dword, .is = .dword } }, .any },
8982 .patterns = &.{
8983 .{ .src = .{ .to_mem, .none } },
8984 },
8985 .extra_temps = .{
8986 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8987 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8988 .unused,
8989 .unused,
8990 .unused,
8991 .unused,
8992 .unused,
8993 .unused,
8994 .unused,
8995 },
8996 .dst_temps = .{.mem},
8997 .clobbers = .{ .eflags = true },
8998 .each = .{ .once = &.{
8999 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
9000 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ },
9001 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
9002 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ },
9003 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9004 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9005 .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ },
9006 .{ ._, ._, .not, .tmp0d, ._, ._, ._ },
9007 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ },
9008 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ },
9009 } },
9010 }, .{
9011 .required_features = .{ .@"64bit", null, null, null },
9012 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any },
9013 .patterns = &.{
9014 .{ .src = .{ .mut_mem, .none } },
9015 },
9016 .extra_temps = .{
9017 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9018 .unused,
9019 .unused,
9020 .unused,
9021 .unused,
9022 .unused,
9023 .unused,
9024 .unused,
9025 .unused,
9026 },
9027 .dst_temps = .{.{ .ref = .src0 }},
9028 .clobbers = .{ .eflags = true },
9029 .each = .{ .once = &.{
9030 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
9031 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ },
9032 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ },
9033 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9034 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9035 .{ ._, ._, .xor, .memad(.dst0d, .add_size, -16), .sa(.src0, .add_umax), ._, ._ },
9036 } },
9037 }, .{
9038 .required_features = .{ .@"64bit", null, null, null },
9039 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .dword } }, .any },
9040 .patterns = &.{
9041 .{ .src = .{ .to_mem, .none } },
9042 },
9043 .extra_temps = .{
9044 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9045 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9046 .unused,
9047 .unused,
9048 .unused,
9049 .unused,
9050 .unused,
9051 .unused,
9052 .unused,
9053 },
9054 .dst_temps = .{.mem},
9055 .clobbers = .{ .eflags = true },
9056 .each = .{ .once = &.{
9057 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
9058 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ },
9059 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
9060 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ },
9061 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9062 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9063 .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -16), ._, ._ },
9064 .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ },
9065 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16), .tmp0d, ._, ._ },
9066 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -16 + 4), .si(0), ._, ._ },
9067 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16 + 8), .si(0), ._, ._ },
9068 } },
9069 }, .{
9070 .required_features = .{ .@"64bit", null, null, null },
9071 .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any },
9072 .patterns = &.{
9073 .{ .src = .{ .mut_mem, .none } },
9074 },
9075 .extra_temps = .{
9076 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9077 .unused,
9078 .unused,
9079 .unused,
9080 .unused,
9081 .unused,
9082 .unused,
9083 .unused,
9084 .unused,
9085 },
9086 .dst_temps = .{.{ .ref = .src0 }},
9087 .clobbers = .{ .eflags = true },
9088 .each = .{ .once = &.{
9089 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
9090 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ },
9091 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9092 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9093 .{ ._, ._, .xor, .memad(.dst0d, .add_size, -8), .sa(.src0, .add_umax), ._, ._ },
9094 } },
9095 }, .{
9096 .required_features = .{ .@"64bit", null, null, null },
9097 .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .dword } }, .any },
9098 .patterns = &.{
9099 .{ .src = .{ .to_mem, .none } },
9100 },
9101 .extra_temps = .{
9102 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9103 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9104 .unused,
9105 .unused,
9106 .unused,
9107 .unused,
9108 .unused,
9109 .unused,
9110 .unused,
9111 },
9112 .dst_temps = .{.mem},
9113 .clobbers = .{ .eflags = true },
9114 .each = .{ .once = &.{
9115 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
9116 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ },
9117 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
9118 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ },
9119 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9120 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9121 .{ ._, ._, .mov, .tmp0d, .memad(.src0d, .add_size, -8), ._, ._ },
9122 .{ ._, ._, .xor, .tmp0d, .sa(.src0, .add_umax), ._, ._ },
9123 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8), .tmp0d, ._, ._ },
9124 .{ ._, ._, .mov, .memad(.dst0d, .add_size, -8 + 4), .si(0), ._, ._ },
9125 } },
9126 }, .{
9127 .required_features = .{ .@"64bit", null, null, null },
9128 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
9129 .patterns = &.{
9130 .{ .src = .{ .mut_mem, .none } },
9131 },
9132 .extra_temps = .{
9133 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9134 .unused,
9135 .unused,
9136 .unused,
9137 .unused,
9138 .unused,
9139 .unused,
9140 .unused,
9141 .unused,
9142 },
9143 .dst_temps = .{.{ .ref = .src0 }},
9144 .clobbers = .{ .eflags = true },
9145 .each = .{ .once = &.{
9146 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
9147 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16), ._, ._, ._ },
9148 .{ ._, ._, .not, .memiad(.dst0q, .tmp0, .add_size, -16 + 8), ._, ._, ._ },
9149 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
9150 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9151 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
9152 .{ ._, ._, .xor, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
9153 } },
9154 }, .{
9155 .required_features = .{ .@"64bit", null, null, null },
9156 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
9157 .patterns = &.{
9158 .{ .src = .{ .to_mem, .none } },
9159 },
9160 .extra_temps = .{
9161 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9162 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9163 .unused,
9164 .unused,
9165 .unused,
9166 .unused,
9167 .unused,
9168 .unused,
9169 .unused,
9170 },
9171 .dst_temps = .{.mem},
9172 .clobbers = .{ .eflags = true },
9173 .each = .{ .once = &.{
9174 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
9175 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -16), ._, ._ },
9176 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
9177 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -16), .tmp1q, ._, ._ },
9178 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9179 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9180 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
9181 .{ ._, ._, .xor, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
9182 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -16), .tmp0q, ._, ._ },
9183 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
9184 } },
9185 }, .{
9186 .required_features = .{ .@"64bit", null, null, null },
9187 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
9188 .patterns = &.{
9189 .{ .src = .{ .mut_mem, .none } },
9190 },
9191 .extra_temps = .{
9192 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9193 .unused,
9194 .unused,
9195 .unused,
9196 .unused,
9197 .unused,
9198 .unused,
9199 .unused,
9200 .unused,
9201 },
9202 .dst_temps = .{.{ .ref = .src0 }},
9203 .clobbers = .{ .eflags = true },
9204 .each = .{ .once = &.{
9205 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
9206 .{ .@"0:", ._, .not, .memiad(.dst0q, .tmp0, .add_size, -8), ._, ._, ._ },
9207 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9208 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9209 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
9210 .{ ._, ._, .xor, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
9211 } },
9212 }, .{
9213 .required_features = .{ .@"64bit", null, null, null },
9214 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
9215 .patterns = &.{
9216 .{ .src = .{ .to_mem, .none } },
9217 },
9218 .extra_temps = .{
9219 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9220 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9221 .unused,
9222 .unused,
9223 .unused,
9224 .unused,
9225 .unused,
9226 .unused,
9227 .unused,
9228 },
9229 .dst_temps = .{.mem},
9230 .clobbers = .{ .eflags = true },
9231 .each = .{ .once = &.{
9232 .{ ._, ._, .mov, .tmp0p, .sia(8, .src0, .sub_size), ._, ._ },
9233 .{ .@"0:", ._, .mov, .tmp1q, .memiad(.src0q, .tmp0, .add_size, -8), ._, ._ },
9234 .{ ._, ._, .not, .tmp1q, ._, ._, ._ },
9235 .{ ._, ._, .mov, .memiad(.dst0q, .tmp0, .add_size, -8), .tmp1q, ._, ._ },
9236 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9237 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9238 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
9239 .{ ._, ._, .xor, .tmp0q, .memad(.src0q, .add_size, -8), ._, ._ },
9240 .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
9241 } },
9242 }, .{
9243 .required_features = .{ .mmx, null, null, null },
9244 .src_constraints = .{ .{ .signed_int_or_full_vec = .qword }, .any },
9245 .patterns = &.{
9246 .{ .src = .{ .mem, .none } },
9247 .{ .src = .{ .to_mm, .none } },
9248 },
9249 .dst_temps = .{.{ .rc = .mmx }},
9250 .each = .{ .once = &.{
9251 .{ ._, .p_d, .cmpeq, .dst0q, .dst0q, ._, ._ },
9252 .{ ._, .p_, .xor, .dst0q, .src0q, ._, ._ },
9253 } },
9254 }, .{
9255 .required_features = .{ .mmx, null, null, null },
9256 .src_constraints = .{ .{ .unsigned_int_vec = .qword }, .any },
9257 .patterns = &.{
9258 .{ .src = .{ .to_mut_mm, .none } },
9259 },
9260 .extra_temps = .{
9261 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9262 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
9263 .unused,
9264 .unused,
9265 .unused,
9266 .unused,
9267 .unused,
9268 .unused,
9269 .unused,
9270 },
9271 .dst_temps = .{.{ .ref = .src0 }},
9272 .each = .{ .once = &.{
9273 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9274 .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ },
9275 } },
9276 }, .{
9277 .required_features = .{ .avx, null, null, null },
9278 .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any },
9279 .patterns = &.{
9280 .{ .src = .{ .mem, .none } },
9281 .{ .src = .{ .to_xmm, .none } },
9282 },
9283 .dst_temps = .{.{ .rc = .sse }},
9284 .each = .{ .once = &.{
9285 .{ ._, .vp_q, .cmpeq, .dst0x, .dst0x, .dst0x, ._ },
9286 .{ ._, .vp_, .xor, .dst0x, .dst0x, .src0x, ._ },
9287 } },
9288 }, .{
9289 .required_features = .{ .avx, null, null, null },
9290 .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any },
9291 .patterns = &.{
9292 .{ .src = .{ .to_xmm, .none } },
9293 },
9294 .extra_temps = .{
9295 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9296 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
9297 .unused,
9298 .unused,
9299 .unused,
9300 .unused,
9301 .unused,
9302 .unused,
9303 .unused,
9304 },
9305 .dst_temps = .{.{ .rc = .sse }},
9306 .each = .{ .once = &.{
9307 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9308 .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
9309 } },
9310 }, .{
9311 .required_features = .{ .sse2, null, null, null },
9312 .src_constraints = .{ .{ .signed_int_or_full_vec = .xword }, .any },
9313 .patterns = &.{
9314 .{ .src = .{ .mem, .none } },
9315 .{ .src = .{ .to_xmm, .none } },
9316 },
9317 .dst_temps = .{.{ .rc = .sse }},
9318 .each = .{ .once = &.{
9319 .{ ._, .p_d, .cmpeq, .dst0x, .dst0x, ._, ._ },
9320 .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ },
9321 } },
9322 }, .{
9323 .required_features = .{ .sse2, null, null, null },
9324 .src_constraints = .{ .{ .unsigned_int_vec = .xword }, .any },
9325 .patterns = &.{
9326 .{ .src = .{ .to_mut_xmm, .none } },
9327 },
9328 .extra_temps = .{
9329 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9330 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
9331 .unused,
9332 .unused,
9333 .unused,
9334 .unused,
9335 .unused,
9336 .unused,
9337 .unused,
9338 },
9339 .dst_temps = .{.{ .ref = .src0 }},
9340 .each = .{ .once = &.{
9341 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9342 .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ },
9343 } },
9344 }, .{
9345 .required_features = .{ .sse, null, null, null },
9346 .src_constraints = .{ .{ .vec = .xword }, .any },
9347 .patterns = &.{
9348 .{ .src = .{ .to_mut_xmm, .none } },
9349 },
9350 .extra_temps = .{
9351 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9352 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
9353 .unused,
9354 .unused,
9355 .unused,
9356 .unused,
9357 .unused,
9358 .unused,
9359 .unused,
9360 },
9361 .dst_temps = .{.{ .ref = .src0 }},
9362 .each = .{ .once = &.{
9363 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9364 .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ },
9365 } },
9366 }, .{
9367 .required_features = .{ .avx2, null, null, null },
9368 .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any },
9369 .patterns = &.{
9370 .{ .src = .{ .mem, .none } },
9371 .{ .src = .{ .to_ymm, .none } },
9372 },
9373 .dst_temps = .{.{ .rc = .sse }},
9374 .each = .{ .once = &.{
9375 .{ ._, .vp_q, .cmpeq, .dst0y, .dst0y, .dst0y, ._ },
9376 .{ ._, .vp_, .xor, .dst0y, .dst0y, .src0y, ._ },
9377 } },
9378 }, .{
9379 .required_features = .{ .avx2, null, null, null },
9380 .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any },
9381 .patterns = &.{
9382 .{ .src = .{ .to_ymm, .none } },
9383 },
9384 .extra_temps = .{
9385 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9386 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
9387 .unused,
9388 .unused,
9389 .unused,
9390 .unused,
9391 .unused,
9392 .unused,
9393 .unused,
9394 },
9395 .dst_temps = .{.{ .rc = .sse }},
9396 .each = .{ .once = &.{
9397 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9398 .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
9399 } },
9400 }, .{
9401 .required_features = .{ .avx, null, null, null },
9402 .src_constraints = .{ .{ .signed_int_or_full_vec = .yword }, .any },
9403 .patterns = &.{
9404 .{ .src = .{ .mem, .none } },
9405 .{ .src = .{ .to_ymm, .none } },
9406 },
9407 .dst_temps = .{.{ .rc = .sse }},
9408 .each = .{ .once = &.{
9409 .{ ._, .v_pd, .cmp, .dst0y, .dst0y, .dst0y, .ui(0b01111) },
9410 .{ ._, .v_pd, .xor, .dst0y, .dst0y, .src0y, ._ },
9411 } },
9412 }, .{
9413 .required_features = .{ .avx, null, null, null },
9414 .src_constraints = .{ .{ .unsigned_int_vec = .yword }, .any },
9415 .patterns = &.{
9416 .{ .src = .{ .to_ymm, .none } },
9417 },
9418 .extra_temps = .{
9419 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9420 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
9421 .unused,
9422 .unused,
9423 .unused,
9424 .unused,
9425 .unused,
9426 .unused,
9427 .unused,
9428 },
9429 .dst_temps = .{.{ .rc = .sse }},
9430 .each = .{ .once = &.{
9431 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9432 .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
9433 } },
9434 }, .{
9435 .required_features = .{ .@"64bit", null, null, null },
9436 .patterns = &.{
9437 .{ .src = .{ .to_mem, .none } },
9438 },
9439 .extra_temps = .{
9440 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9441 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9442 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
9443 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
9444 .unused,
9445 .unused,
9446 .unused,
9447 .unused,
9448 .unused,
9449 },
9450 .dst_temps = .{.mem},
9451 .each = .{ .once = &.{
9452 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },
9453 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
9454 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ },
9455 .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },
9456 .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ },
9457 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
9458 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9459 } },
9460 }, .{
9461 .patterns = &.{
9462 .{ .src = .{ .to_mem, .none } },
9463 },
9464 .extra_temps = .{
9465 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
9466 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9467 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9468 .{ .kind = .{ .umax_mem = .{ .ref = .src0 } } },
9469 .unused,
9470 .unused,
9471 .unused,
9472 .unused,
9473 .unused,
9474 },
9475 .dst_temps = .{.mem},
9476 .each = .{ .once = &.{
9477 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ },
9478 .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ },
9479 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ },
9480 .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ },
9481 .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ },
9482 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
9483 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
9484 } },
9485 } }) catch |err| switch (err) {
9486 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
9487 @tagName(air_tag),
9488 cg.typeOf(ty_op.operand).fmt(pt),
9489 ops[0].tracking(cg),
9490 }),
9491 else => |e| return e,
9492 };
9493 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
9494 },
9495
9496 .block => if (use_old) try cg.airBlock(inst) else {
9497 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
9498 const extra = cg.air.extraData(Air.Block, ty_pl.payload);
9499 try cg.asmPseudo(.pseudo_dbg_enter_block_none);
9500 try cg.lowerBlock(inst, @ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));
9501 try cg.asmPseudo(.pseudo_dbg_leave_block_none);
9502 },
9503 .loop => if (use_old) try cg.airLoop(inst) else {
9504 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
9505 const extra = cg.air.extraData(Air.Block, ty_pl.payload);
9506 cg.scope_generation += 1;
9507 try cg.loops.putNoClobber(cg.gpa, inst, .{
9508 .state = try cg.saveState(),
9509 .target = @intCast(cg.mir_instructions.len),
9510 });
9511 defer assert(cg.loops.remove(inst));
9512 try cg.genBodyBlock(@ptrCast(cg.air.extra[extra.end..][0..extra.data.body_len]));
9513 },
9514 .repeat => if (use_old) try cg.airRepeat(inst) else {
9515 const repeat = air_datas[@intFromEnum(inst)].repeat;
9516 const loop = cg.loops.get(repeat.loop_inst).?;
9517 try cg.restoreState(loop.state, &.{}, .{
9518 .emit_instructions = true,
9519 .update_tracking = false,
9520 .resurrect = false,
9521 .close_scope = true,
9522 });
9523 _ = try cg.asmJmpReloc(loop.target);
9524 },
9525 .br => try cg.airBr(inst),
9526 .trap => try cg.asmOpOnly(.{ ._2, .ud }),
9527 .breakpoint => try cg.asmOpOnly(.{ ._3, .int }),
9528 .ret_addr => if (use_old) try cg.airRetAddr(inst) else {
9529 var slot = try cg.tempInit(.usize, .{ .load_frame = .{
9530 .index = .ret_addr,
9531 } });
9532 while (try slot.toRegClass(true, .general_purpose, cg)) {}
9533 try slot.finish(inst, &.{}, &.{}, cg);
9534 },
9535 .frame_addr => if (use_old) try cg.airFrameAddress(inst) else {
9536 const slot = try cg.tempInit(.usize, .{ .lea_frame = .{
9537 .index = .base_ptr,
9538 } });
9539 try slot.finish(inst, &.{}, &.{}, cg);
9540 },
9541 .call => try cg.airCall(inst, .auto, .{ .safety = true }),
9542 .call_always_tail => try cg.airCall(inst, .always_tail, .{ .safety = true }),
9543 .call_never_tail => try cg.airCall(inst, .never_tail, .{ .safety = true }),
9544 .call_never_inline => try cg.airCall(inst, .never_inline, .{ .safety = true }),
9545
9546 .clz => |air_tag| if (use_old) try cg.airClz(inst) else {
9547 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
9548 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
9549 var res: [1]Temp = undefined;
9550 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
9551 .required_features = .{ .slow_incdec, null, null, null },
9552 .src_constraints = .{ .{ .exact_signed_int = 1 }, .any },
9553 .patterns = &.{
9554 .{ .src = .{ .mut_mem, .none } },
9555 .{ .src = .{ .to_mut_gpr, .none } },
9556 },
9557 .dst_temps = .{.{ .ref = .src0 }},
9558 .clobbers = .{ .eflags = true },
9559 .each = .{ .once = &.{
9560 .{ ._, ._, .add, .dst0b, .si(1), ._, ._ },
9561 } },
9562 }, .{
9563 .src_constraints = .{ .{ .exact_signed_int = 1 }, .any },
9564 .patterns = &.{
9565 .{ .src = .{ .mut_mem, .none } },
9566 .{ .src = .{ .to_mut_gpr, .none } },
9567 },
9568 .dst_temps = .{.{ .ref = .src0 }},
9569 .clobbers = .{ .eflags = true },
9570 .each = .{ .once = &.{
9571 .{ ._, ._c, .in, .dst0b, ._, ._, ._ },
9572 } },
9573 }, .{
9574 .src_constraints = .{ .{ .exact_unsigned_int = 1 }, .any },
9575 .patterns = &.{
9576 .{ .src = .{ .mut_mem, .none } },
9577 .{ .src = .{ .to_mut_gpr, .none } },
9578 },
9579 .dst_temps = .{.{ .ref = .src0 }},
9580 .clobbers = .{ .eflags = true },
9581 .each = .{ .once = &.{
9582 .{ ._, ._, .xor, .dst0b, .si(1), ._, ._ },
9583 } },
9584 }, .{
9585 .required_features = .{ .lzcnt, null, null, null },
9586 .src_constraints = .{ .{ .unsigned_or_exact_int = .byte }, .any },
9587 .patterns = &.{
9588 .{ .src = .{ .mem, .none } },
9589 .{ .src = .{ .to_gpr, .none } },
9590 },
9591 .dst_temps = .{.{ .rc = .general_purpose }},
9592 .clobbers = .{ .eflags = true },
9593 .each = .{ .once = &.{
9594 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
9595 .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ },
9596 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
9597 } },
9598 }, .{
9599 .required_features = .{ .lzcnt, null, null, null },
9600 .src_constraints = .{ .{ .signed_int = .byte }, .any },
9601 .patterns = &.{
9602 .{ .src = .{ .mem, .none } },
9603 .{ .src = .{ .to_gpr, .none } },
9604 },
9605 .dst_temps = .{.{ .rc = .general_purpose }},
9606 .clobbers = .{ .eflags = true },
9607 .each = .{ .once = &.{
9608 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
9609 .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ },
9610 .{ ._, ._, .lzcnt, .dst0d, .dst0d, ._, ._ },
9611 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
9612 } },
9613 }, .{
9614 .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null },
9615 .src_constraints = .{ .{ .exact_int = 16 }, .any },
9616 .patterns = &.{
9617 .{ .src = .{ .to_mut_gpr, .none } },
9618 },
9619 .dst_temps = .{.{ .ref = .src0 }},
9620 .clobbers = .{ .eflags = true },
9621 .each = .{ .once = &.{
9622 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
9623 } },
9624 }, .{
9625 .required_features = .{ .lzcnt, null, null, null },
9626 .src_constraints = .{ .{ .exact_int = 16 }, .any },
9627 .patterns = &.{
9628 .{ .src = .{ .mem, .none } },
9629 .{ .src = .{ .to_gpr, .none } },
9630 },
9631 .dst_temps = .{.{ .rc = .general_purpose }},
9632 .clobbers = .{ .eflags = true },
9633 .each = .{ .once = &.{
9634 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
9635 } },
9636 }, .{
9637 .required_features = .{ .lzcnt, null, null, null },
9638 .src_constraints = .{ .{ .signed_int = .word }, .any },
9639 .patterns = &.{
9640 .{ .src = .{ .to_mut_gpr, .none } },
9641 },
9642 .dst_temps = .{.{ .ref = .src0 }},
9643 .clobbers = .{ .eflags = true },
9644 .each = .{ .once = &.{
9645 .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ },
9646 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
9647 .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ },
9648 } },
9649 }, .{
9650 .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null },
9651 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
9652 .patterns = &.{
9653 .{ .src = .{ .to_mut_gpr, .none } },
9654 },
9655 .dst_temps = .{.{ .ref = .src0 }},
9656 .clobbers = .{ .eflags = true },
9657 .each = .{ .once = &.{
9658 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
9659 .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ },
9660 } },
9661 }, .{
9662 .required_features = .{ .lzcnt, null, null, null },
9663 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
9664 .patterns = &.{
9665 .{ .src = .{ .mem, .none } },
9666 .{ .src = .{ .to_gpr, .none } },
9667 },
9668 .dst_temps = .{.{ .rc = .general_purpose }},
9669 .clobbers = .{ .eflags = true },
9670 .each = .{ .once = &.{
9671 .{ ._, ._, .lzcnt, .dst0w, .src0w, ._, ._ },
9672 .{ ._, ._, .sub, .dst0b, .sia(16, .src0, .sub_bit_size), ._, ._ },
9673 } },
9674 }, .{
9675 .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null },
9676 .src_constraints = .{ .{ .exact_int = 32 }, .any },
9677 .patterns = &.{
9678 .{ .src = .{ .to_mut_gpr, .none } },
9679 },
9680 .dst_temps = .{.{ .ref = .src0 }},
9681 .clobbers = .{ .eflags = true },
9682 .each = .{ .once = &.{
9683 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
9684 } },
9685 }, .{
9686 .required_features = .{ .lzcnt, null, null, null },
9687 .src_constraints = .{ .{ .exact_int = 32 }, .any },
9688 .patterns = &.{
9689 .{ .src = .{ .mem, .none } },
9690 .{ .src = .{ .to_gpr, .none } },
9691 },
9692 .dst_temps = .{.{ .rc = .general_purpose }},
9693 .clobbers = .{ .eflags = true },
9694 .each = .{ .once = &.{
9695 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
9696 } },
9697 }, .{
9698 .required_features = .{ .lzcnt, null, null, null },
9699 .src_constraints = .{ .{ .signed_int = .dword }, .any },
9700 .patterns = &.{
9701 .{ .src = .{ .to_mut_gpr, .none } },
9702 },
9703 .dst_temps = .{.{ .ref = .src0 }},
9704 .clobbers = .{ .eflags = true },
9705 .each = .{ .once = &.{
9706 .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ },
9707 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
9708 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
9709 } },
9710 }, .{
9711 .required_features = .{ .false_deps_lzcnt_tzcnt, .lzcnt, null, null },
9712 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
9713 .patterns = &.{
9714 .{ .src = .{ .to_mut_gpr, .none } },
9715 },
9716 .dst_temps = .{.{ .ref = .src0 }},
9717 .clobbers = .{ .eflags = true },
9718 .each = .{ .once = &.{
9719 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
9720 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
9721 } },
9722 }, .{
9723 .required_features = .{ .lzcnt, null, null, null },
9724 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
9725 .patterns = &.{
9726 .{ .src = .{ .mem, .none } },
9727 .{ .src = .{ .to_gpr, .none } },
9728 },
9729 .dst_temps = .{.{ .rc = .general_purpose }},
9730 .clobbers = .{ .eflags = true },
9731 .each = .{ .once = &.{
9732 .{ ._, ._, .lzcnt, .dst0d, .src0d, ._, ._ },
9733 .{ ._, ._, .sub, .dst0b, .sia(32, .src0, .sub_bit_size), ._, ._ },
9734 } },
9735 }, .{
9736 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
9737 .src_constraints = .{ .{ .exact_int = 64 }, .any },
9738 .patterns = &.{
9739 .{ .src = .{ .to_mut_gpr, .none } },
9740 },
9741 .dst_temps = .{.{ .ref = .src0 }},
9742 .clobbers = .{ .eflags = true },
9743 .each = .{ .once = &.{
9744 .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ },
9745 } },
9746 }, .{
9747 .required_features = .{ .@"64bit", .lzcnt, null, null },
9748 .src_constraints = .{ .{ .exact_int = 64 }, .any },
9749 .patterns = &.{
9750 .{ .src = .{ .mem, .none } },
9751 .{ .src = .{ .to_gpr, .none } },
9752 },
9753 .dst_temps = .{.{ .rc = .general_purpose }},
9754 .clobbers = .{ .eflags = true },
9755 .each = .{ .once = &.{
9756 .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ },
9757 } },
9758 }, .{
9759 .required_features = .{ .@"64bit", .lzcnt, null, null },
9760 .src_constraints = .{ .{ .signed_int = .qword }, .any },
9761 .patterns = &.{
9762 .{ .src = .{ .mem, .none } },
9763 .{ .src = .{ .to_gpr, .none } },
9764 },
9765 .dst_temps = .{.{ .rc = .general_purpose }},
9766 .clobbers = .{ .eflags = true },
9767 .each = .{ .once = &.{
9768 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
9769 .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
9770 .{ ._, ._, .lzcnt, .dst0q, .dst0q, ._, ._ },
9771 .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ },
9772 } },
9773 }, .{
9774 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
9775 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
9776 .patterns = &.{
9777 .{ .src = .{ .to_mut_gpr, .none } },
9778 },
9779 .dst_temps = .{.{ .ref = .src0 }},
9780 .clobbers = .{ .eflags = true },
9781 .each = .{ .once = &.{
9782 .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ },
9783 .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ },
9784 } },
9785 }, .{
9786 .required_features = .{ .@"64bit", .lzcnt, null, null },
9787 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
9788 .patterns = &.{
9789 .{ .src = .{ .mem, .none } },
9790 .{ .src = .{ .to_gpr, .none } },
9791 },
9792 .dst_temps = .{.{ .rc = .general_purpose }},
9793 .clobbers = .{ .eflags = true },
9794 .each = .{ .once = &.{
9795 .{ ._, ._, .lzcnt, .dst0q, .src0q, ._, ._ },
9796 .{ ._, ._, .sub, .dst0b, .sia(64, .src0, .sub_bit_size), ._, ._ },
9797 } },
9798 }, .{
9799 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
9800 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any },
9801 .patterns = &.{
9802 .{ .src = .{ .mem, .none } },
9803 .{ .src = .{ .to_gpr, .none } },
9804 },
9805 .extra_temps = .{
9806 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9807 .unused,
9808 .unused,
9809 .unused,
9810 .unused,
9811 .unused,
9812 .unused,
9813 .unused,
9814 .unused,
9815 },
9816 .dst_temps = .{.{ .rc = .general_purpose }},
9817 .clobbers = .{ .eflags = true },
9818 .each = .{ .once = &.{
9819 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
9820 .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ },
9821 .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
9822 .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ },
9823 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
9824 } },
9825 }, .{
9826 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
9827 .src_constraints = .{ .{ .signed_po2_int = .byte }, .any },
9828 .patterns = &.{
9829 .{ .src = .{ .mem, .none } },
9830 .{ .src = .{ .to_gpr, .none } },
9831 },
9832 .extra_temps = .{
9833 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9834 .unused,
9835 .unused,
9836 .unused,
9837 .unused,
9838 .unused,
9839 .unused,
9840 .unused,
9841 .unused,
9842 },
9843 .dst_temps = .{.{ .rc = .general_purpose }},
9844 .clobbers = .{ .eflags = true },
9845 .each = .{ .once = &.{
9846 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
9847 .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ },
9848 .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ },
9849 .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
9850 .{ ._, ._z, .cmov, .dst0d, .tmp0d, ._, ._ },
9851 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
9852 } },
9853 }, .{
9854 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
9855 .src_constraints = .{ .{ .signed_int = .byte }, .any },
9856 .patterns = &.{
9857 .{ .src = .{ .mem, .none } },
9858 .{ .src = .{ .to_gpr, .none } },
9859 },
9860 .extra_temps = .{
9861 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9862 .unused,
9863 .unused,
9864 .unused,
9865 .unused,
9866 .unused,
9867 .unused,
9868 .unused,
9869 .unused,
9870 },
9871 .dst_temps = .{.{ .rc = .general_purpose }},
9872 .clobbers = .{ .eflags = true },
9873 .each = .{ .once = &.{
9874 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
9875 .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ },
9876 .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ },
9877 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
9878 .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ },
9879 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
9880 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
9881 } },
9882 }, .{
9883 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
9884 .src_constraints = .{ .{ .unsigned_int = .byte }, .any },
9885 .patterns = &.{
9886 .{ .src = .{ .mem, .none } },
9887 .{ .src = .{ .to_gpr, .none } },
9888 },
9889 .extra_temps = .{
9890 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9891 .unused,
9892 .unused,
9893 .unused,
9894 .unused,
9895 .unused,
9896 .unused,
9897 .unused,
9898 .unused,
9899 },
9900 .dst_temps = .{.{ .rc = .general_purpose }},
9901 .clobbers = .{ .eflags = true },
9902 .each = .{ .once = &.{
9903 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
9904 .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ },
9905 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
9906 .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ },
9907 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
9908 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
9909 } },
9910 }, .{
9911 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
9912 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any },
9913 .patterns = &.{
9914 .{ .src = .{ .mem, .none } },
9915 .{ .src = .{ .to_gpr, .none } },
9916 },
9917 .dst_temps = .{.{ .rc = .general_purpose }},
9918 .clobbers = .{ .eflags = true },
9919 .each = .{ .once = &.{
9920 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
9921 .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ },
9922 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
9923 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
9924 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
9925 } },
9926 }, .{
9927 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
9928 .src_constraints = .{ .{ .signed_po2_int = .byte }, .any },
9929 .patterns = &.{
9930 .{ .src = .{ .mem, .none } },
9931 .{ .src = .{ .to_gpr, .none } },
9932 },
9933 .dst_temps = .{.{ .rc = .general_purpose }},
9934 .clobbers = .{ .eflags = true },
9935 .each = .{ .once = &.{
9936 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
9937 .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ },
9938 .{ ._, ._r, .bs, .dst0d, .dst0d, ._, ._ },
9939 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
9940 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
9941 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
9942 } },
9943 }, .{
9944 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
9945 .src_constraints = .{ .{ .signed_int = .byte }, .any },
9946 .patterns = &.{
9947 .{ .src = .{ .mem, .none } },
9948 .{ .src = .{ .to_gpr, .none } },
9949 },
9950 .extra_temps = .{
9951 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9952 .unused,
9953 .unused,
9954 .unused,
9955 .unused,
9956 .unused,
9957 .unused,
9958 .unused,
9959 .unused,
9960 },
9961 .dst_temps = .{.{ .rc = .general_purpose }},
9962 .clobbers = .{ .eflags = true },
9963 .each = .{ .once = &.{
9964 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
9965 .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ },
9966 .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ },
9967 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
9968 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
9969 .{ ._, ._c, .st, ._, ._, ._, ._ },
9970 .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ },
9971 } },
9972 }, .{
9973 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
9974 .src_constraints = .{ .{ .unsigned_int = .byte }, .any },
9975 .patterns = &.{
9976 .{ .src = .{ .mem, .none } },
9977 .{ .src = .{ .to_gpr, .none } },
9978 },
9979 .extra_temps = .{
9980 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
9981 .unused,
9982 .unused,
9983 .unused,
9984 .unused,
9985 .unused,
9986 .unused,
9987 .unused,
9988 .unused,
9989 },
9990 .dst_temps = .{.{ .rc = .general_purpose }},
9991 .clobbers = .{ .eflags = true },
9992 .each = .{ .once = &.{
9993 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
9994 .{ ._, ._r, .bs, .tmp0d, .tmp0d, ._, ._ },
9995 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
9996 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
9997 .{ ._, ._c, .st, ._, ._, ._, ._ },
9998 .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ },
9999 } },
10000 }, .{
10001 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .byte }, .any },
10002 .patterns = &.{
10003 .{ .src = .{ .mem, .none } },
10004 .{ .src = .{ .to_gpr, .none } },
10005 },
10006 .extra_temps = .{
10007 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10008 .unused,
10009 .unused,
10010 .unused,
10011 .unused,
10012 .unused,
10013 .unused,
10014 .unused,
10015 .unused,
10016 },
10017 .dst_temps = .{.{ .rc = .general_purpose }},
10018 .clobbers = .{ .eflags = true },
10019 .each = .{ .once = &.{
10020 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
10021 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10022 .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ },
10023 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10024 } },
10025 }, .{
10026 .src_constraints = .{ .{ .signed_po2_int = .byte }, .any },
10027 .patterns = &.{
10028 .{ .src = .{ .mem, .none } },
10029 .{ .src = .{ .to_gpr, .none } },
10030 },
10031 .extra_temps = .{
10032 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10033 .unused,
10034 .unused,
10035 .unused,
10036 .unused,
10037 .unused,
10038 .unused,
10039 .unused,
10040 .unused,
10041 },
10042 .dst_temps = .{.{ .rc = .general_purpose }},
10043 .clobbers = .{ .eflags = true },
10044 .each = .{ .once = &.{
10045 .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ },
10046 .{ ._, ._, .@"and", .tmp0d, .sa(.src0, .add_umax), ._, ._ },
10047 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10048 .{ ._, ._r, .bs, .dst0d, .tmp0d, ._, ._ },
10049 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10050 } },
10051 }, .{
10052 .src_constraints = .{ .{ .signed_int = .byte }, .any },
10053 .patterns = &.{
10054 .{ .src = .{ .mem, .none } },
10055 .{ .src = .{ .to_gpr, .none } },
10056 },
10057 .extra_temps = .{
10058 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10059 .unused,
10060 .unused,
10061 .unused,
10062 .unused,
10063 .unused,
10064 .unused,
10065 .unused,
10066 .unused,
10067 },
10068 .dst_temps = .{.{ .rc = .general_purpose }},
10069 .clobbers = .{ .eflags = true },
10070 .each = .{ .once = &.{
10071 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
10072 .{ ._, ._, .@"and", .dst0d, .sa(.src0, .add_umax), ._, ._ },
10073 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
10074 .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ },
10075 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10076 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10077 } },
10078 }, .{
10079 .src_constraints = .{ .{ .unsigned_int = .byte }, .any },
10080 .patterns = &.{
10081 .{ .src = .{ .mem, .none } },
10082 .{ .src = .{ .to_gpr, .none } },
10083 },
10084 .extra_temps = .{
10085 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10086 .unused,
10087 .unused,
10088 .unused,
10089 .unused,
10090 .unused,
10091 .unused,
10092 .unused,
10093 .unused,
10094 },
10095 .dst_temps = .{.{ .rc = .general_purpose }},
10096 .clobbers = .{ .eflags = true },
10097 .each = .{ .once = &.{
10098 .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ },
10099 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
10100 .{ ._, ._r, .bs, .tmp0d, .dst0d, ._, ._ },
10101 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10102 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10103 } },
10104 }, .{
10105 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
10106 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any },
10107 .patterns = &.{
10108 .{ .src = .{ .to_mut_gpr, .none } },
10109 },
10110 .dst_temps = .{.{ .rc = .general_purpose }},
10111 .clobbers = .{ .eflags = true },
10112 .each = .{ .once = &.{
10113 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
10114 .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10115 .{ ._, ._nz, .cmov, .dst0w, .src0w, ._, ._ },
10116 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10117 } },
10118 }, .{
10119 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
10120 .src_constraints = .{ .{ .signed_int = .word }, .any },
10121 .patterns = &.{
10122 .{ .src = .{ .to_mut_gpr, .none } },
10123 },
10124 .dst_temps = .{.{ .rc = .general_purpose }},
10125 .clobbers = .{ .eflags = true },
10126 .each = .{ .once = &.{
10127 .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ },
10128 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
10129 .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ },
10130 .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ },
10131 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10132 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
10133 } },
10134 }, .{
10135 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
10136 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
10137 .patterns = &.{
10138 .{ .src = .{ .to_mut_gpr, .none } },
10139 },
10140 .dst_temps = .{.{ .rc = .general_purpose }},
10141 .clobbers = .{ .eflags = true },
10142 .each = .{ .once = &.{
10143 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
10144 .{ ._, ._, .mov, .dst0w, .si(0xff), ._, ._ },
10145 .{ ._, ._z, .cmov, .src0w, .dst0w, ._, ._ },
10146 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10147 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
10148 } },
10149 }, .{
10150 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
10151 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any },
10152 .patterns = &.{
10153 .{ .src = .{ .to_mut_gpr, .none } },
10154 },
10155 .dst_temps = .{.{ .ref = .src0 }},
10156 .clobbers = .{ .eflags = true },
10157 .each = .{ .once = &.{
10158 .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ },
10159 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
10160 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10161 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10162 } },
10163 }, .{
10164 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
10165 .src_constraints = .{ .{ .signed_int = .word }, .any },
10166 .patterns = &.{
10167 .{ .src = .{ .to_mut_gpr, .none } },
10168 },
10169 .dst_temps = .{.{ .rc = .general_purpose }},
10170 .clobbers = .{ .eflags = true },
10171 .each = .{ .once = &.{
10172 .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ },
10173 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
10174 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
10175 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10176 .{ ._, ._c, .st, ._, ._, ._, ._ },
10177 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
10178 } },
10179 }, .{
10180 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
10181 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
10182 .patterns = &.{
10183 .{ .src = .{ .to_mut_gpr, .none } },
10184 },
10185 .dst_temps = .{.{ .rc = .general_purpose }},
10186 .clobbers = .{ .eflags = true },
10187 .each = .{ .once = &.{
10188 .{ ._, ._r, .bs, .src0w, .src0w, ._, ._ },
10189 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
10190 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10191 .{ ._, ._c, .st, ._, ._, ._, ._ },
10192 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
10193 } },
10194 }, .{
10195 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .word }, .any },
10196 .patterns = &.{
10197 .{ .src = .{ .mem, .none } },
10198 .{ .src = .{ .to_gpr, .none } },
10199 },
10200 .dst_temps = .{.{ .rc = .general_purpose }},
10201 .clobbers = .{ .eflags = true },
10202 .each = .{ .once = &.{
10203 .{ ._, ._, .mov, .dst0w, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10204 .{ ._, ._r, .bs, .dst0w, .src0w, ._, ._ },
10205 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10206 } },
10207 }, .{
10208 .src_constraints = .{ .{ .signed_int = .word }, .any },
10209 .patterns = &.{
10210 .{ .src = .{ .to_mut_gpr, .none } },
10211 },
10212 .extra_temps = .{
10213 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
10214 .unused,
10215 .unused,
10216 .unused,
10217 .unused,
10218 .unused,
10219 .unused,
10220 .unused,
10221 .unused,
10222 },
10223 .dst_temps = .{.{ .rc = .general_purpose }},
10224 .clobbers = .{ .eflags = true },
10225 .each = .{ .once = &.{
10226 .{ ._, ._, .@"and", .src0w, .sa(.src0, .add_umax), ._, ._ },
10227 .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ },
10228 .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ },
10229 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10230 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10231 } },
10232 }, .{
10233 .src_constraints = .{ .{ .unsigned_int = .word }, .any },
10234 .patterns = &.{
10235 .{ .src = .{ .mem, .none } },
10236 .{ .src = .{ .to_gpr, .none } },
10237 },
10238 .extra_temps = .{
10239 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
10240 .unused,
10241 .unused,
10242 .unused,
10243 .unused,
10244 .unused,
10245 .unused,
10246 .unused,
10247 .unused,
10248 },
10249 .dst_temps = .{.{ .rc = .general_purpose }},
10250 .clobbers = .{ .eflags = true },
10251 .each = .{ .once = &.{
10252 .{ ._, ._, .mov, .tmp0w, .si(0xff), ._, ._ },
10253 .{ ._, ._r, .bs, .tmp0w, .src0w, ._, ._ },
10254 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10255 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10256 } },
10257 }, .{
10258 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
10259 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any },
10260 .patterns = &.{
10261 .{ .src = .{ .to_mut_gpr, .none } },
10262 },
10263 .dst_temps = .{.{ .rc = .general_purpose }},
10264 .clobbers = .{ .eflags = true },
10265 .each = .{ .once = &.{
10266 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
10267 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10268 .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ },
10269 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10270 } },
10271 }, .{
10272 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
10273 .src_constraints = .{ .{ .signed_int = .dword }, .any },
10274 .patterns = &.{
10275 .{ .src = .{ .to_mut_gpr, .none } },
10276 },
10277 .dst_temps = .{.{ .rc = .general_purpose }},
10278 .clobbers = .{ .eflags = true },
10279 .each = .{ .once = &.{
10280 .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ },
10281 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
10282 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
10283 .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ },
10284 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10285 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
10286 } },
10287 }, .{
10288 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
10289 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
10290 .patterns = &.{
10291 .{ .src = .{ .to_mut_gpr, .none } },
10292 },
10293 .dst_temps = .{.{ .rc = .general_purpose }},
10294 .clobbers = .{ .eflags = true },
10295 .each = .{ .once = &.{
10296 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
10297 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
10298 .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ },
10299 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10300 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
10301 } },
10302 }, .{
10303 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
10304 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any },
10305 .patterns = &.{
10306 .{ .src = .{ .to_mut_gpr, .none } },
10307 },
10308 .dst_temps = .{.{ .ref = .src0 }},
10309 .clobbers = .{ .eflags = true },
10310 .each = .{ .once = &.{
10311 .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ },
10312 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
10313 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10314 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10315 } },
10316 }, .{
10317 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
10318 .src_constraints = .{ .{ .signed_int = .dword }, .any },
10319 .patterns = &.{
10320 .{ .src = .{ .to_mut_gpr, .none } },
10321 },
10322 .dst_temps = .{.{ .rc = .general_purpose }},
10323 .clobbers = .{ .eflags = true },
10324 .each = .{ .once = &.{
10325 .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ },
10326 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
10327 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
10328 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10329 .{ ._, ._c, .st, ._, ._, ._, ._ },
10330 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
10331 } },
10332 }, .{
10333 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
10334 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
10335 .patterns = &.{
10336 .{ .src = .{ .to_mut_gpr, .none } },
10337 },
10338 .dst_temps = .{.{ .rc = .general_purpose }},
10339 .clobbers = .{ .eflags = true },
10340 .each = .{ .once = &.{
10341 .{ ._, ._r, .bs, .src0d, .src0d, ._, ._ },
10342 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
10343 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10344 .{ ._, ._c, .st, ._, ._, ._, ._ },
10345 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
10346 } },
10347 }, .{
10348 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .dword }, .any },
10349 .patterns = &.{
10350 .{ .src = .{ .mem, .none } },
10351 .{ .src = .{ .to_gpr, .none } },
10352 },
10353 .dst_temps = .{.{ .rc = .general_purpose }},
10354 .clobbers = .{ .eflags = true },
10355 .each = .{ .once = &.{
10356 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10357 .{ ._, ._r, .bs, .dst0d, .src0d, ._, ._ },
10358 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10359 } },
10360 }, .{
10361 .src_constraints = .{ .{ .signed_int = .dword }, .any },
10362 .patterns = &.{
10363 .{ .src = .{ .to_mut_gpr, .none } },
10364 },
10365 .extra_temps = .{
10366 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10367 .unused,
10368 .unused,
10369 .unused,
10370 .unused,
10371 .unused,
10372 .unused,
10373 .unused,
10374 .unused,
10375 },
10376 .dst_temps = .{.{ .rc = .general_purpose }},
10377 .clobbers = .{ .eflags = true },
10378 .each = .{ .once = &.{
10379 .{ ._, ._, .@"and", .src0d, .sa(.src0, .add_umax), ._, ._ },
10380 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
10381 .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ },
10382 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10383 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10384 } },
10385 }, .{
10386 .src_constraints = .{ .{ .unsigned_int = .dword }, .any },
10387 .patterns = &.{
10388 .{ .src = .{ .mem, .none } },
10389 .{ .src = .{ .to_gpr, .none } },
10390 },
10391 .extra_temps = .{
10392 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10393 .unused,
10394 .unused,
10395 .unused,
10396 .unused,
10397 .unused,
10398 .unused,
10399 .unused,
10400 .unused,
10401 },
10402 .dst_temps = .{.{ .rc = .general_purpose }},
10403 .clobbers = .{ .eflags = true },
10404 .each = .{ .once = &.{
10405 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
10406 .{ ._, ._r, .bs, .tmp0d, .src0d, ._, ._ },
10407 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10408 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10409 } },
10410 }, .{
10411 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null },
10412 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any },
10413 .patterns = &.{
10414 .{ .src = .{ .to_mut_gpr, .none } },
10415 },
10416 .dst_temps = .{.{ .rc = .general_purpose }},
10417 .clobbers = .{ .eflags = true },
10418 .each = .{ .once = &.{
10419 .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ },
10420 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10421 .{ ._, ._nz, .cmov, .dst0d, .src0d, ._, ._ },
10422 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10423 } },
10424 }, .{
10425 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null },
10426 .src_constraints = .{ .{ .signed_int = .qword }, .any },
10427 .patterns = &.{
10428 .{ .src = .{ .mem, .none } },
10429 .{ .src = .{ .to_gpr, .none } },
10430 },
10431 .extra_temps = .{
10432 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10433 .unused,
10434 .unused,
10435 .unused,
10436 .unused,
10437 .unused,
10438 .unused,
10439 .unused,
10440 .unused,
10441 },
10442 .dst_temps = .{.{ .rc = .general_purpose }},
10443 .clobbers = .{ .eflags = true },
10444 .each = .{ .once = &.{
10445 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
10446 .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ },
10447 .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ },
10448 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
10449 .{ ._, ._z, .cmov, .tmp0d, .dst0d, ._, ._ },
10450 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10451 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10452 } },
10453 }, .{
10454 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null },
10455 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
10456 .patterns = &.{
10457 .{ .src = .{ .to_mut_gpr, .none } },
10458 },
10459 .dst_temps = .{.{ .rc = .general_purpose }},
10460 .clobbers = .{ .eflags = true },
10461 .each = .{ .once = &.{
10462 .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ },
10463 .{ ._, ._, .mov, .dst0d, .si(0xff), ._, ._ },
10464 .{ ._, ._z, .cmov, .src0d, .dst0d, ._, ._ },
10465 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10466 .{ ._, ._, .sub, .dst0b, .src0b, ._, ._ },
10467 } },
10468 }, .{
10469 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
10470 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any },
10471 .patterns = &.{
10472 .{ .src = .{ .to_mut_gpr, .none } },
10473 },
10474 .dst_temps = .{.{ .ref = .src0 }},
10475 .clobbers = .{ .eflags = true },
10476 .each = .{ .once = &.{
10477 .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ },
10478 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
10479 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10480 .{ .@"0:", ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10481 } },
10482 }, .{
10483 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
10484 .src_constraints = .{ .{ .signed_int = .qword }, .any },
10485 .patterns = &.{
10486 .{ .src = .{ .mem, .none } },
10487 .{ .src = .{ .to_gpr, .none } },
10488 },
10489 .extra_temps = .{
10490 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10491 .unused,
10492 .unused,
10493 .unused,
10494 .unused,
10495 .unused,
10496 .unused,
10497 .unused,
10498 .unused,
10499 },
10500 .dst_temps = .{.{ .rc = .general_purpose }},
10501 .clobbers = .{ .eflags = true },
10502 .each = .{ .once = &.{
10503 .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
10504 .{ ._, ._, .@"and", .tmp0q, .src0q, ._, ._ },
10505 .{ ._, ._r, .bs, .tmp0q, .tmp0q, ._, ._ },
10506 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
10507 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10508 .{ ._, ._c, .st, ._, ._, ._, ._ },
10509 .{ ._, ._, .sbb, .dst0b, .tmp0b, ._, ._ },
10510 } },
10511 }, .{
10512 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
10513 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
10514 .patterns = &.{
10515 .{ .src = .{ .to_mut_gpr, .none } },
10516 },
10517 .dst_temps = .{.{ .rc = .general_purpose }},
10518 .clobbers = .{ .eflags = true },
10519 .each = .{ .once = &.{
10520 .{ ._, ._r, .bs, .src0q, .src0q, ._, ._ },
10521 .{ ._, ._, .mov, .dst0b, .sa(.src0, .add_bit_size), ._, ._ },
10522 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
10523 .{ ._, ._c, .st, ._, ._, ._, ._ },
10524 .{ ._, ._, .sbb, .dst0b, .src0b, ._, ._ },
10525 } },
10526 }, .{
10527 .required_features = .{ .@"64bit", null, null, null },
10528 .src_constraints = .{ .{ .unsigned_po2_or_exact_int = .qword }, .any },
10529 .patterns = &.{
10530 .{ .src = .{ .mem, .none } },
10531 .{ .src = .{ .to_gpr, .none } },
10532 },
10533 .dst_temps = .{.{ .rc = .general_purpose }},
10534 .clobbers = .{ .eflags = true },
10535 .each = .{ .once = &.{
10536 .{ ._, ._, .mov, .dst0d, .sia(-1, .src0, .add_2_bit_size), ._, ._ },
10537 .{ ._, ._r, .bs, .dst0q, .src0q, ._, ._ },
10538 .{ ._, ._, .xor, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10539 } },
10540 }, .{
10541 .required_features = .{ .@"64bit", null, null, null },
10542 .src_constraints = .{ .{ .signed_int = .qword }, .any },
10543 .patterns = &.{
10544 .{ .src = .{ .mem, .none } },
10545 .{ .src = .{ .to_gpr, .none } },
10546 },
10547 .extra_temps = .{
10548 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10549 .unused,
10550 .unused,
10551 .unused,
10552 .unused,
10553 .unused,
10554 .unused,
10555 .unused,
10556 .unused,
10557 },
10558 .dst_temps = .{.{ .rc = .general_purpose }},
10559 .clobbers = .{ .eflags = true },
10560 .each = .{ .once = &.{
10561 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
10562 .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
10563 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
10564 .{ ._, ._r, .bs, .tmp0q, .dst0q, ._, ._ },
10565 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10566 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10567 } },
10568 }, .{
10569 .required_features = .{ .@"64bit", null, null, null },
10570 .src_constraints = .{ .{ .unsigned_int = .qword }, .any },
10571 .patterns = &.{
10572 .{ .src = .{ .mem, .none } },
10573 .{ .src = .{ .to_gpr, .none } },
10574 },
10575 .extra_temps = .{
10576 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10577 .unused,
10578 .unused,
10579 .unused,
10580 .unused,
10581 .unused,
10582 .unused,
10583 .unused,
10584 .unused,
10585 },
10586 .dst_temps = .{.{ .rc = .general_purpose }},
10587 .clobbers = .{ .eflags = true },
10588 .each = .{ .once = &.{
10589 .{ ._, ._, .mov, .tmp0d, .si(0xff), ._, ._ },
10590 .{ ._, ._r, .bs, .tmp0q, .src0q, ._, ._ },
10591 .{ ._, ._, .mov, .dst0b, .sia(-1, .src0, .add_bit_size), ._, ._ },
10592 .{ ._, ._, .sub, .dst0b, .tmp0b, ._, ._ },
10593 } },
10594 }, .{
10595 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
10596 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
10597 .patterns = &.{
10598 .{ .src = .{ .to_mem, .none } },
10599 },
10600 .extra_temps = .{
10601 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10602 .unused,
10603 .unused,
10604 .unused,
10605 .unused,
10606 .unused,
10607 .unused,
10608 .unused,
10609 .unused,
10610 },
10611 .dst_temps = .{.{ .rc = .general_purpose }},
10612 .clobbers = .{ .eflags = true },
10613 .each = .{ .once = &.{
10614 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
10615 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
10616 .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10617 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
10618 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10619 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10620 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10621 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
10622 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
10623 } },
10624 }, .{
10625 .required_features = .{ .@"64bit", .lzcnt, null, null },
10626 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
10627 .patterns = &.{
10628 .{ .src = .{ .to_mem, .none } },
10629 },
10630 .extra_temps = .{
10631 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10632 .unused,
10633 .unused,
10634 .unused,
10635 .unused,
10636 .unused,
10637 .unused,
10638 .unused,
10639 .unused,
10640 },
10641 .dst_temps = .{.{ .rc = .general_purpose }},
10642 .clobbers = .{ .eflags = true },
10643 .each = .{ .once = &.{
10644 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
10645 .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10646 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
10647 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10648 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10649 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10650 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
10651 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
10652 } },
10653 }, .{
10654 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
10655 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
10656 .patterns = &.{
10657 .{ .src = .{ .to_mem, .none } },
10658 },
10659 .extra_temps = .{
10660 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10661 .unused,
10662 .unused,
10663 .unused,
10664 .unused,
10665 .unused,
10666 .unused,
10667 .unused,
10668 .unused,
10669 },
10670 .dst_temps = .{.{ .rc = .general_purpose }},
10671 .clobbers = .{ .eflags = true },
10672 .each = .{ .once = &.{
10673 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
10674 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
10675 .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10676 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
10677 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10678 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10679 .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ },
10680 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10681 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
10682 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
10683 } },
10684 }, .{
10685 .required_features = .{ .@"64bit", null, null, null },
10686 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
10687 .patterns = &.{
10688 .{ .src = .{ .to_mem, .none } },
10689 },
10690 .extra_temps = .{
10691 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10692 .unused,
10693 .unused,
10694 .unused,
10695 .unused,
10696 .unused,
10697 .unused,
10698 .unused,
10699 .unused,
10700 },
10701 .dst_temps = .{.{ .rc = .general_purpose }},
10702 .clobbers = .{ .eflags = true },
10703 .each = .{ .once = &.{
10704 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
10705 .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ },
10706 .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10707 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
10708 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10709 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10710 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10711 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
10712 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
10713 } },
10714 }, .{
10715 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
10716 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
10717 .patterns = &.{
10718 .{ .src = .{ .to_mem, .none } },
10719 },
10720 .extra_temps = .{
10721 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10722 .unused,
10723 .unused,
10724 .unused,
10725 .unused,
10726 .unused,
10727 .unused,
10728 .unused,
10729 .unused,
10730 },
10731 .dst_temps = .{.{ .rc = .general_purpose }},
10732 .clobbers = .{ .eflags = true },
10733 .each = .{ .once = &.{
10734 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
10735 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
10736 .{ ._, ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10737 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
10738 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10739 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10740 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10741 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
10742 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
10743 } },
10744 }, .{
10745 .required_features = .{ .@"64bit", .lzcnt, null, null },
10746 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
10747 .patterns = &.{
10748 .{ .src = .{ .to_mem, .none } },
10749 },
10750 .extra_temps = .{
10751 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10752 .unused,
10753 .unused,
10754 .unused,
10755 .unused,
10756 .unused,
10757 .unused,
10758 .unused,
10759 .unused,
10760 },
10761 .dst_temps = .{.{ .rc = .general_purpose }},
10762 .clobbers = .{ .eflags = true },
10763 .each = .{ .once = &.{
10764 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
10765 .{ .@"0:", ._, .lzcnt, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10766 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
10767 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10768 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10769 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10770 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
10771 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
10772 } },
10773 }, .{
10774 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
10775 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
10776 .patterns = &.{
10777 .{ .src = .{ .to_mem, .none } },
10778 },
10779 .extra_temps = .{
10780 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10781 .unused,
10782 .unused,
10783 .unused,
10784 .unused,
10785 .unused,
10786 .unused,
10787 .unused,
10788 .unused,
10789 },
10790 .dst_temps = .{.{ .rc = .general_purpose }},
10791 .clobbers = .{ .eflags = true },
10792 .each = .{ .once = &.{
10793 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
10794 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
10795 .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10796 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
10797 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10798 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10799 .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ },
10800 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10801 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
10802 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
10803 } },
10804 }, .{
10805 .required_features = .{ .@"64bit", null, null, null },
10806 .src_constraints = .{ .{ .unsigned_or_exact_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
10807 .patterns = &.{
10808 .{ .src = .{ .to_mem, .none } },
10809 },
10810 .extra_temps = .{
10811 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10812 .unused,
10813 .unused,
10814 .unused,
10815 .unused,
10816 .unused,
10817 .unused,
10818 .unused,
10819 .unused,
10820 },
10821 .dst_temps = .{.{ .rc = .general_purpose }},
10822 .clobbers = .{ .eflags = true },
10823 .each = .{ .once = &.{
10824 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
10825 .{ .@"0:", ._, .mov, .dst0d, .si(-1), ._, ._ },
10826 .{ ._, ._r, .bs, .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10827 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
10828 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10829 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10830 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10831 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
10832 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
10833 } },
10834 }, .{
10835 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
10836 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
10837 .patterns = &.{
10838 .{ .src = .{ .to_mem, .none } },
10839 },
10840 .extra_temps = .{
10841 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10842 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10843 .unused,
10844 .unused,
10845 .unused,
10846 .unused,
10847 .unused,
10848 .unused,
10849 .unused,
10850 },
10851 .dst_temps = .{.{ .rc = .general_purpose }},
10852 .clobbers = .{ .eflags = true },
10853 .each = .{ .once = &.{
10854 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
10855 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
10856 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
10857 .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
10858 .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ },
10859 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
10860 .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
10861 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10862 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10863 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10864 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
10865 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
10866 } },
10867 }, .{
10868 .required_features = .{ .@"64bit", .lzcnt, null, null },
10869 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
10870 .patterns = &.{
10871 .{ .src = .{ .to_mem, .none } },
10872 },
10873 .extra_temps = .{
10874 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10875 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10876 .unused,
10877 .unused,
10878 .unused,
10879 .unused,
10880 .unused,
10881 .unused,
10882 .unused,
10883 },
10884 .dst_temps = .{.{ .rc = .general_purpose }},
10885 .clobbers = .{ .eflags = true },
10886 .each = .{ .once = &.{
10887 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
10888 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
10889 .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
10890 .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ },
10891 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
10892 .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
10893 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10894 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10895 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10896 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
10897 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
10898 } },
10899 }, .{
10900 .required_features = .{ .@"64bit", null, null, null },
10901 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .qword } }, .any },
10902 .patterns = &.{
10903 .{ .src = .{ .to_mem, .none } },
10904 },
10905 .extra_temps = .{
10906 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10907 .unused,
10908 .unused,
10909 .unused,
10910 .unused,
10911 .unused,
10912 .unused,
10913 .unused,
10914 .unused,
10915 },
10916 .dst_temps = .{.{ .rc = .general_purpose }},
10917 .clobbers = .{ .eflags = true },
10918 .each = .{ .once = &.{
10919 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
10920 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
10921 .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ },
10922 .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ },
10923 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
10924 .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ },
10925 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10926 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10927 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10928 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
10929 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
10930 } },
10931 }, .{
10932 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
10933 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
10934 .patterns = &.{
10935 .{ .src = .{ .to_mem, .none } },
10936 },
10937 .extra_temps = .{
10938 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10939 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10940 .unused,
10941 .unused,
10942 .unused,
10943 .unused,
10944 .unused,
10945 .unused,
10946 .unused,
10947 },
10948 .dst_temps = .{.{ .rc = .general_purpose }},
10949 .clobbers = .{ .eflags = true },
10950 .each = .{ .once = &.{
10951 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
10952 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
10953 .{ .@"0:", ._, .xor, .dst0d, .dst0d, ._, ._ },
10954 .{ ._, ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
10955 .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ },
10956 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
10957 .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
10958 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10959 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10960 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10961 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
10962 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
10963 } },
10964 }, .{
10965 .required_features = .{ .@"64bit", .lzcnt, null, null },
10966 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
10967 .patterns = &.{
10968 .{ .src = .{ .to_mem, .none } },
10969 },
10970 .extra_temps = .{
10971 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10972 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
10973 .unused,
10974 .unused,
10975 .unused,
10976 .unused,
10977 .unused,
10978 .unused,
10979 .unused,
10980 },
10981 .dst_temps = .{.{ .rc = .general_purpose }},
10982 .clobbers = .{ .eflags = true },
10983 .each = .{ .once = &.{
10984 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
10985 .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
10986 .{ .@"0:", ._, .@"and", .tmp1q, .memi(.src0q, .tmp0), ._, ._ },
10987 .{ ._, ._, .lzcnt, .dst0q, .tmp1q, ._, ._ },
10988 .{ ._, ._nc, .j, .@"0f", ._, ._, ._ },
10989 .{ ._, ._, .mov, .tmp1q, .si(-1), ._, ._ },
10990 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
10991 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10992 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
10993 .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ },
10994 .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ },
10995 } },
10996 }, .{
10997 .required_features = .{ .@"64bit", null, null, null },
10998 .src_constraints = .{ .{ .remainder_int = .{ .of = .xword, .is = .xword } }, .any },
10999 .patterns = &.{
11000 .{ .src = .{ .to_mem, .none } },
11001 },
11002 .extra_temps = .{
11003 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11004 .unused,
11005 .unused,
11006 .unused,
11007 .unused,
11008 .unused,
11009 .unused,
11010 .unused,
11011 .unused,
11012 },
11013 .dst_temps = .{.{ .rc = .general_purpose }},
11014 .clobbers = .{ .eflags = true },
11015 .each = .{ .once = &.{
11016 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
11017 .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
11018 .{ .@"0:", ._, .@"and", .dst0q, .memi(.src0q, .tmp0), ._, ._ },
11019 .{ ._, ._r, .bs, .dst0q, .dst0q, ._, ._ },
11020 .{ ._, ._nz, .j, .@"0f", ._, ._, ._ },
11021 .{ ._, ._, .mov, .dst0q, .si(-1), ._, ._ },
11022 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
11023 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11024 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
11025 .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ },
11026 .{ ._, ._, .neg, .dst0d, ._, ._, ._ },
11027 } },
11028 }, .{
11029 .required_features = .{ .lzcnt, .slow_incdec, null, null },
11030 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
11031 .patterns = &.{
11032 .{ .src = .{ .to_mem, .none } },
11033 },
11034 .extra_temps = .{
11035 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11036 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11037 .unused,
11038 .unused,
11039 .unused,
11040 .unused,
11041 .unused,
11042 .unused,
11043 .unused,
11044 },
11045 .dst_temps = .{.mem},
11046 .clobbers = .{ .eflags = true },
11047 .each = .{ .once = &.{
11048 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11049 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
11050 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11051 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
11052 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
11053 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11054 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11055 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11056 } },
11057 }, .{
11058 .required_features = .{ .lzcnt, null, null, null },
11059 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
11060 .patterns = &.{
11061 .{ .src = .{ .to_mem, .none } },
11062 },
11063 .extra_temps = .{
11064 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11065 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11066 .unused,
11067 .unused,
11068 .unused,
11069 .unused,
11070 .unused,
11071 .unused,
11072 .unused,
11073 },
11074 .dst_temps = .{.mem},
11075 .clobbers = .{ .eflags = true },
11076 .each = .{ .once = &.{
11077 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11078 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
11079 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11080 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
11081 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
11082 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11083 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11084 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11085 } },
11086 }, .{
11087 .required_features = .{ .lzcnt, .slow_incdec, null, null },
11088 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
11089 .patterns = &.{
11090 .{ .src = .{ .to_mem, .none } },
11091 },
11092 .extra_temps = .{
11093 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11094 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11095 .unused,
11096 .unused,
11097 .unused,
11098 .unused,
11099 .unused,
11100 .unused,
11101 .unused,
11102 },
11103 .dst_temps = .{.mem},
11104 .clobbers = .{ .eflags = true },
11105 .each = .{ .once = &.{
11106 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11107 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
11108 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11109 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
11110 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
11111 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11112 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11113 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11114 } },
11115 }, .{
11116 .required_features = .{ .lzcnt, null, null, null },
11117 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
11118 .patterns = &.{
11119 .{ .src = .{ .to_mem, .none } },
11120 },
11121 .extra_temps = .{
11122 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11123 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11124 .unused,
11125 .unused,
11126 .unused,
11127 .unused,
11128 .unused,
11129 .unused,
11130 .unused,
11131 },
11132 .dst_temps = .{.mem},
11133 .clobbers = .{ .eflags = true },
11134 .each = .{ .once = &.{
11135 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11136 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
11137 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11138 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
11139 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
11140 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11141 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11142 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11143 } },
11144 }, .{
11145 .required_features = .{ .lzcnt, .slow_incdec, null, null },
11146 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
11147 .patterns = &.{
11148 .{ .src = .{ .to_mem, .none } },
11149 },
11150 .extra_temps = .{
11151 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11152 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11153 .unused,
11154 .unused,
11155 .unused,
11156 .unused,
11157 .unused,
11158 .unused,
11159 .unused,
11160 },
11161 .dst_temps = .{.mem},
11162 .clobbers = .{ .eflags = true },
11163 .each = .{ .once = &.{
11164 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11165 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
11166 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11167 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
11168 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
11169 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11170 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11171 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11172 } },
11173 }, .{
11174 .required_features = .{ .lzcnt, null, null, null },
11175 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
11176 .patterns = &.{
11177 .{ .src = .{ .to_mem, .none } },
11178 },
11179 .extra_temps = .{
11180 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11181 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11182 .unused,
11183 .unused,
11184 .unused,
11185 .unused,
11186 .unused,
11187 .unused,
11188 .unused,
11189 },
11190 .dst_temps = .{.mem},
11191 .clobbers = .{ .eflags = true },
11192 .each = .{ .once = &.{
11193 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11194 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
11195 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11196 .{ ._, ._, .lzcnt, .tmp1d, .tmp1d, ._, ._ },
11197 .{ ._, ._, .sub, .tmp1b, .sia(32, .src0, .sub_bit_size), ._, ._ },
11198 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11199 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11200 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11201 } },
11202 }, .{
11203 .required_features = .{ .@"64bit", .lzcnt, .slow_incdec, null },
11204 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
11205 .patterns = &.{
11206 .{ .src = .{ .to_mem, .none } },
11207 },
11208 .extra_temps = .{
11209 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11210 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11211 .unused,
11212 .unused,
11213 .unused,
11214 .unused,
11215 .unused,
11216 .unused,
11217 .unused,
11218 },
11219 .dst_temps = .{.mem},
11220 .clobbers = .{ .eflags = true },
11221 .each = .{ .once = &.{
11222 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11223 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
11224 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
11225 .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ },
11226 .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ },
11227 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11228 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11229 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11230 } },
11231 }, .{
11232 .required_features = .{ .@"64bit", .lzcnt, null, null },
11233 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
11234 .patterns = &.{
11235 .{ .src = .{ .to_mem, .none } },
11236 },
11237 .extra_temps = .{
11238 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11239 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11240 .unused,
11241 .unused,
11242 .unused,
11243 .unused,
11244 .unused,
11245 .unused,
11246 .unused,
11247 },
11248 .dst_temps = .{.mem},
11249 .clobbers = .{ .eflags = true },
11250 .each = .{ .once = &.{
11251 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11252 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
11253 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
11254 .{ ._, ._, .lzcnt, .tmp1q, .tmp1q, ._, ._ },
11255 .{ ._, ._, .sub, .tmp1b, .sia(64, .src0, .sub_bit_size), ._, ._ },
11256 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11257 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11258 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11259 } },
11260 }, .{
11261 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null },
11262 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
11263 .patterns = &.{
11264 .{ .src = .{ .to_mem, .none } },
11265 },
11266 .extra_temps = .{
11267 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11268 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11269 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11270 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
11271 .unused,
11272 .unused,
11273 .unused,
11274 .unused,
11275 .unused,
11276 },
11277 .dst_temps = .{.mem},
11278 .clobbers = .{ .eflags = true },
11279 .each = .{ .once = &.{
11280 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11281 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
11282 .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
11283 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
11284 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
11285 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
11286 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11287 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
11288 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
11289 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11290 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11291 } },
11292 }, .{
11293 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
11294 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
11295 .patterns = &.{
11296 .{ .src = .{ .to_mem, .none } },
11297 },
11298 .extra_temps = .{
11299 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11300 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11301 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11302 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
11303 .unused,
11304 .unused,
11305 .unused,
11306 .unused,
11307 .unused,
11308 },
11309 .dst_temps = .{.mem},
11310 .clobbers = .{ .eflags = true },
11311 .each = .{ .once = &.{
11312 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11313 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
11314 .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
11315 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
11316 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
11317 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
11318 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11319 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
11320 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
11321 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11322 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11323 } },
11324 }, .{
11325 .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null },
11326 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
11327 .patterns = &.{
11328 .{ .src = .{ .to_mem, .none } },
11329 },
11330 .extra_temps = .{
11331 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11332 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11333 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11334 .unused,
11335 .unused,
11336 .unused,
11337 .unused,
11338 .unused,
11339 .unused,
11340 },
11341 .dst_temps = .{.mem},
11342 .clobbers = .{ .eflags = true },
11343 .each = .{ .once = &.{
11344 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11345 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
11346 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11347 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
11348 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
11349 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
11350 .{ ._, ._c, .st, ._, ._, ._, ._ },
11351 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
11352 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
11353 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11354 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11355 } },
11356 }, .{
11357 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
11358 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
11359 .patterns = &.{
11360 .{ .src = .{ .to_mem, .none } },
11361 },
11362 .extra_temps = .{
11363 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11364 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11365 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11366 .unused,
11367 .unused,
11368 .unused,
11369 .unused,
11370 .unused,
11371 .unused,
11372 },
11373 .dst_temps = .{.mem},
11374 .clobbers = .{ .eflags = true },
11375 .each = .{ .once = &.{
11376 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11377 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
11378 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11379 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
11380 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
11381 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
11382 .{ ._, ._c, .st, ._, ._, ._, ._ },
11383 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
11384 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
11385 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11386 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11387 } },
11388 }, .{
11389 .required_features = .{ .slow_incdec, null, null, null },
11390 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
11391 .patterns = &.{
11392 .{ .src = .{ .to_mem, .none } },
11393 },
11394 .extra_temps = .{
11395 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11396 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11397 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11398 .unused,
11399 .unused,
11400 .unused,
11401 .unused,
11402 .unused,
11403 .unused,
11404 },
11405 .dst_temps = .{.mem},
11406 .clobbers = .{ .eflags = true },
11407 .each = .{ .once = &.{
11408 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11409 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
11410 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11411 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
11412 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
11413 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11414 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
11415 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11416 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11417 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11418 } },
11419 }, .{
11420 .src_constraints = .{ .{ .scalar_int_is = .byte }, .any },
11421 .patterns = &.{
11422 .{ .src = .{ .to_mem, .none } },
11423 },
11424 .extra_temps = .{
11425 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11426 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11427 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11428 .unused,
11429 .unused,
11430 .unused,
11431 .unused,
11432 .unused,
11433 .unused,
11434 },
11435 .dst_temps = .{.mem},
11436 .clobbers = .{ .eflags = true },
11437 .each = .{ .once = &.{
11438 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11439 .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_len), ._, ._ },
11440 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11441 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
11442 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
11443 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11444 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
11445 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11446 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11447 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11448 } },
11449 }, .{
11450 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null },
11451 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
11452 .patterns = &.{
11453 .{ .src = .{ .to_mem, .none } },
11454 },
11455 .extra_temps = .{
11456 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11457 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11458 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11459 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
11460 .unused,
11461 .unused,
11462 .unused,
11463 .unused,
11464 .unused,
11465 },
11466 .dst_temps = .{.mem},
11467 .clobbers = .{ .eflags = true },
11468 .each = .{ .once = &.{
11469 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11470 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
11471 .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
11472 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
11473 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
11474 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
11475 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11476 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
11477 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
11478 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11479 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11480 } },
11481 }, .{
11482 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
11483 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
11484 .patterns = &.{
11485 .{ .src = .{ .to_mem, .none } },
11486 },
11487 .extra_temps = .{
11488 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11489 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11490 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11491 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
11492 .unused,
11493 .unused,
11494 .unused,
11495 .unused,
11496 .unused,
11497 },
11498 .dst_temps = .{.mem},
11499 .clobbers = .{ .eflags = true },
11500 .each = .{ .once = &.{
11501 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11502 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
11503 .{ .@"0:", ._, .movzx, .tmp2d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
11504 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
11505 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
11506 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
11507 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11508 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
11509 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
11510 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11511 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11512 } },
11513 }, .{
11514 .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null },
11515 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
11516 .patterns = &.{
11517 .{ .src = .{ .to_mem, .none } },
11518 },
11519 .extra_temps = .{
11520 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11521 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11522 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11523 .unused,
11524 .unused,
11525 .unused,
11526 .unused,
11527 .unused,
11528 .unused,
11529 },
11530 .dst_temps = .{.mem},
11531 .clobbers = .{ .eflags = true },
11532 .each = .{ .once = &.{
11533 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11534 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
11535 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11536 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
11537 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
11538 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
11539 .{ ._, ._c, .st, ._, ._, ._, ._ },
11540 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
11541 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
11542 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11543 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11544 } },
11545 }, .{
11546 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
11547 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
11548 .patterns = &.{
11549 .{ .src = .{ .to_mem, .none } },
11550 },
11551 .extra_temps = .{
11552 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11553 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11554 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11555 .unused,
11556 .unused,
11557 .unused,
11558 .unused,
11559 .unused,
11560 .unused,
11561 },
11562 .dst_temps = .{.mem},
11563 .clobbers = .{ .eflags = true },
11564 .each = .{ .once = &.{
11565 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11566 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
11567 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11568 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
11569 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
11570 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
11571 .{ ._, ._c, .st, ._, ._, ._, ._ },
11572 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
11573 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
11574 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11575 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11576 } },
11577 }, .{
11578 .required_features = .{ .slow_incdec, null, null, null },
11579 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
11580 .patterns = &.{
11581 .{ .src = .{ .to_mem, .none } },
11582 },
11583 .extra_temps = .{
11584 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11585 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11586 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11587 .unused,
11588 .unused,
11589 .unused,
11590 .unused,
11591 .unused,
11592 .unused,
11593 },
11594 .dst_temps = .{.mem},
11595 .clobbers = .{ .eflags = true },
11596 .each = .{ .once = &.{
11597 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11598 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
11599 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11600 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
11601 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
11602 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11603 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
11604 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11605 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11606 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11607 } },
11608 }, .{
11609 .src_constraints = .{ .{ .scalar_int_is = .word }, .any },
11610 .patterns = &.{
11611 .{ .src = .{ .to_mem, .none } },
11612 },
11613 .extra_temps = .{
11614 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11615 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11616 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11617 .unused,
11618 .unused,
11619 .unused,
11620 .unused,
11621 .unused,
11622 .unused,
11623 },
11624 .dst_temps = .{.mem},
11625 .clobbers = .{ .eflags = true },
11626 .each = .{ .once = &.{
11627 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11628 .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_2_len), ._, ._ },
11629 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11630 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
11631 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
11632 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11633 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
11634 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11635 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11636 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11637 } },
11638 }, .{
11639 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec, null },
11640 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
11641 .patterns = &.{
11642 .{ .src = .{ .to_mem, .none } },
11643 },
11644 .extra_temps = .{
11645 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11646 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11647 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11648 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
11649 .unused,
11650 .unused,
11651 .unused,
11652 .unused,
11653 .unused,
11654 },
11655 .dst_temps = .{.mem},
11656 .clobbers = .{ .eflags = true },
11657 .each = .{ .once = &.{
11658 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11659 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
11660 .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
11661 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
11662 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
11663 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
11664 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11665 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
11666 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
11667 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11668 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11669 } },
11670 }, .{
11671 .required_features = .{ .cmov, .bsf_bsr_0_clobbers_result, null, null },
11672 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
11673 .patterns = &.{
11674 .{ .src = .{ .to_mem, .none } },
11675 },
11676 .extra_temps = .{
11677 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11678 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11679 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11680 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
11681 .unused,
11682 .unused,
11683 .unused,
11684 .unused,
11685 .unused,
11686 },
11687 .dst_temps = .{.mem},
11688 .clobbers = .{ .eflags = true },
11689 .each = .{ .once = &.{
11690 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11691 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
11692 .{ .@"0:", ._, .mov, .tmp2d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
11693 .{ ._, ._, .@"and", .tmp2d, .sa(.src0, .add_umax), ._, ._ },
11694 .{ ._, ._r, .bs, .tmp2d, .tmp2d, ._, ._ },
11695 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
11696 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11697 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
11698 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
11699 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11700 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11701 } },
11702 }, .{
11703 .required_features = .{ .bsf_bsr_0_clobbers_result, .slow_incdec, null, null },
11704 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
11705 .patterns = &.{
11706 .{ .src = .{ .to_mem, .none } },
11707 },
11708 .extra_temps = .{
11709 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11710 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11711 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11712 .unused,
11713 .unused,
11714 .unused,
11715 .unused,
11716 .unused,
11717 .unused,
11718 },
11719 .dst_temps = .{.mem},
11720 .clobbers = .{ .eflags = true },
11721 .each = .{ .once = &.{
11722 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11723 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
11724 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11725 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
11726 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
11727 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
11728 .{ ._, ._c, .st, ._, ._, ._, ._ },
11729 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
11730 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
11731 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11732 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11733 } },
11734 }, .{
11735 .required_features = .{ .bsf_bsr_0_clobbers_result, null, null, null },
11736 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
11737 .patterns = &.{
11738 .{ .src = .{ .to_mem, .none } },
11739 },
11740 .extra_temps = .{
11741 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11742 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11743 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11744 .unused,
11745 .unused,
11746 .unused,
11747 .unused,
11748 .unused,
11749 .unused,
11750 },
11751 .dst_temps = .{.mem},
11752 .clobbers = .{ .eflags = true },
11753 .each = .{ .once = &.{
11754 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11755 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
11756 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11757 .{ ._, ._r, .bs, .tmp1d, .tmp1d, ._, ._ },
11758 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
11759 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
11760 .{ ._, ._c, .st, ._, ._, ._, ._ },
11761 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
11762 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
11763 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11764 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11765 } },
11766 }, .{
11767 .required_features = .{ .slow_incdec, null, null, null },
11768 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
11769 .patterns = &.{
11770 .{ .src = .{ .to_mem, .none } },
11771 },
11772 .extra_temps = .{
11773 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11774 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11775 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11776 .unused,
11777 .unused,
11778 .unused,
11779 .unused,
11780 .unused,
11781 .unused,
11782 },
11783 .dst_temps = .{.mem},
11784 .clobbers = .{ .eflags = true },
11785 .each = .{ .once = &.{
11786 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11787 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
11788 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11789 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
11790 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
11791 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11792 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
11793 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11794 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11795 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11796 } },
11797 }, .{
11798 .src_constraints = .{ .{ .scalar_int_is = .dword }, .any },
11799 .patterns = &.{
11800 .{ .src = .{ .to_mem, .none } },
11801 },
11802 .extra_temps = .{
11803 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11804 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11805 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11806 .unused,
11807 .unused,
11808 .unused,
11809 .unused,
11810 .unused,
11811 .unused,
11812 },
11813 .dst_temps = .{.mem},
11814 .clobbers = .{ .eflags = true },
11815 .each = .{ .once = &.{
11816 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11817 .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_4_len), ._, ._ },
11818 .{ ._, ._, .@"and", .tmp1d, .sa(.src0, .add_umax), ._, ._ },
11819 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
11820 .{ ._, ._r, .bs, .tmp2d, .tmp1d, ._, ._ },
11821 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11822 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
11823 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11824 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11825 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11826 } },
11827 }, .{
11828 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, .slow_incdec },
11829 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
11830 .patterns = &.{
11831 .{ .src = .{ .to_mem, .none } },
11832 },
11833 .extra_temps = .{
11834 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11835 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11836 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11837 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
11838 .unused,
11839 .unused,
11840 .unused,
11841 .unused,
11842 .unused,
11843 },
11844 .dst_temps = .{.mem},
11845 .clobbers = .{ .eflags = true },
11846 .each = .{ .once = &.{
11847 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11848 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
11849 .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ },
11850 .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
11851 .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ },
11852 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
11853 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11854 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
11855 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
11856 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11857 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11858 } },
11859 }, .{
11860 .required_features = .{ .@"64bit", .cmov, .bsf_bsr_0_clobbers_result, null },
11861 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
11862 .patterns = &.{
11863 .{ .src = .{ .to_mem, .none } },
11864 },
11865 .extra_temps = .{
11866 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11867 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11868 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11869 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
11870 .unused,
11871 .unused,
11872 .unused,
11873 .unused,
11874 .unused,
11875 },
11876 .dst_temps = .{.mem},
11877 .clobbers = .{ .eflags = true },
11878 .each = .{ .once = &.{
11879 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11880 .{ ._, ._, .mov, .tmp1d, .si(0xff), ._, ._ },
11881 .{ .@"0:", ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ },
11882 .{ ._, ._, .@"and", .tmp2q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
11883 .{ ._, ._r, .bs, .tmp2q, .tmp2q, ._, ._ },
11884 .{ ._, ._z, .cmov, .tmp2d, .tmp1d, ._, ._ },
11885 .{ ._, ._, .mov, .tmp3b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11886 .{ ._, ._, .sub, .tmp3b, .tmp2b, ._, ._ },
11887 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
11888 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11889 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11890 } },
11891 }, .{
11892 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, .slow_incdec, null },
11893 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
11894 .patterns = &.{
11895 .{ .src = .{ .to_mem, .none } },
11896 },
11897 .extra_temps = .{
11898 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11899 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11900 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11901 .unused,
11902 .unused,
11903 .unused,
11904 .unused,
11905 .unused,
11906 .unused,
11907 },
11908 .dst_temps = .{.mem},
11909 .clobbers = .{ .eflags = true },
11910 .each = .{ .once = &.{
11911 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11912 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
11913 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
11914 .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ },
11915 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
11916 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
11917 .{ ._, ._c, .st, ._, ._, ._, ._ },
11918 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
11919 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
11920 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11921 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11922 } },
11923 }, .{
11924 .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null },
11925 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
11926 .patterns = &.{
11927 .{ .src = .{ .to_mem, .none } },
11928 },
11929 .extra_temps = .{
11930 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11931 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11932 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11933 .unused,
11934 .unused,
11935 .unused,
11936 .unused,
11937 .unused,
11938 .unused,
11939 },
11940 .dst_temps = .{.mem},
11941 .clobbers = .{ .eflags = true },
11942 .each = .{ .once = &.{
11943 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11944 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
11945 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
11946 .{ ._, ._r, .bs, .tmp1q, .tmp1q, ._, ._ },
11947 .{ ._, ._, .mov, .tmp2b, .sa(.src0, .add_bit_size), ._, ._ },
11948 .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
11949 .{ ._, ._c, .st, ._, ._, ._, ._ },
11950 .{ ._, ._, .sbb, .tmp2b, .tmp1b, ._, ._ },
11951 .{ .@"1:", ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp2b, ._, ._ },
11952 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
11953 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
11954 } },
11955 }, .{
11956 .required_features = .{ .@"64bit", .slow_incdec, null, null },
11957 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
11958 .patterns = &.{
11959 .{ .src = .{ .to_mem, .none } },
11960 },
11961 .extra_temps = .{
11962 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11963 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11964 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
11965 .unused,
11966 .unused,
11967 .unused,
11968 .unused,
11969 .unused,
11970 .unused,
11971 },
11972 .dst_temps = .{.mem},
11973 .clobbers = .{ .eflags = true },
11974 .each = .{ .once = &.{
11975 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
11976 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
11977 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
11978 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
11979 .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ },
11980 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
11981 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
11982 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
11983 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
11984 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
11985 } },
11986 }, .{
11987 .required_features = .{ .@"64bit", null, null, null },
11988 .src_constraints = .{ .{ .scalar_int_is = .qword }, .any },
11989 .patterns = &.{
11990 .{ .src = .{ .to_mem, .none } },
11991 },
11992 .extra_temps = .{
11993 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
11994 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11995 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
11996 .unused,
11997 .unused,
11998 .unused,
11999 .unused,
12000 .unused,
12001 .unused,
12002 },
12003 .dst_temps = .{.mem},
12004 .clobbers = .{ .eflags = true },
12005 .each = .{ .once = &.{
12006 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12007 .{ .@"0:", ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ },
12008 .{ ._, ._, .@"and", .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_8_len), ._, ._ },
12009 .{ ._, ._, .mov, .tmp2d, .si(0xff), ._, ._ },
12010 .{ ._, ._r, .bs, .tmp2q, .tmp1q, ._, ._ },
12011 .{ ._, ._, .mov, .tmp1b, .sia(-1, .src0, .add_bit_size), ._, ._ },
12012 .{ ._, ._, .sub, .tmp1b, .tmp2b, ._, ._ },
12013 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp1b, ._, ._ },
12014 .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
12015 .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
12016 } },
12017 }, .{
12018 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
12019 .dst_constraints = .{.{ .scalar_int_is = .byte }},
12020 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
12021 .patterns = &.{
12022 .{ .src = .{ .to_mem, .none } },
12023 },
12024 .extra_temps = .{
12025 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12026 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12027 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12028 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12029 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12030 .unused,
12031 .unused,
12032 .unused,
12033 .unused,
12034 },
12035 .dst_temps = .{.mem},
12036 .clobbers = .{ .eflags = true },
12037 .each = .{ .once = &.{
12038 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12039 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12040 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
12041 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12042 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12043 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
12044 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
12045 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
12046 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12047 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12048 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12049 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12050 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
12051 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
12052 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
12053 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12054 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12055 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12056 } },
12057 }, .{
12058 .required_features = .{ .@"64bit", .lzcnt, null, null },
12059 .dst_constraints = .{.{ .scalar_int_is = .byte }},
12060 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
12061 .patterns = &.{
12062 .{ .src = .{ .to_mem, .none } },
12063 },
12064 .extra_temps = .{
12065 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12066 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12067 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12068 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12069 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12070 .unused,
12071 .unused,
12072 .unused,
12073 .unused,
12074 },
12075 .dst_temps = .{.mem},
12076 .clobbers = .{ .eflags = true },
12077 .each = .{ .once = &.{
12078 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12079 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12080 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
12081 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12082 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12083 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
12084 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
12085 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12086 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12087 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12088 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12089 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
12090 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
12091 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
12092 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12093 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12094 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12095 } },
12096 }, .{
12097 .required_features = .{ .@"64bit", null, null, null },
12098 .dst_constraints = .{.{ .scalar_int_is = .byte }},
12099 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
12100 .patterns = &.{
12101 .{ .src = .{ .to_mem, .none } },
12102 },
12103 .extra_temps = .{
12104 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12105 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12106 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12107 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12108 .unused,
12109 .unused,
12110 .unused,
12111 .unused,
12112 .unused,
12113 },
12114 .dst_temps = .{.mem},
12115 .clobbers = .{ .eflags = true },
12116 .each = .{ .once = &.{
12117 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12118 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12119 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
12120 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12121 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12122 .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ },
12123 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
12124 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12125 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12126 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12127 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12128 .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ },
12129 .{ ._, ._, .neg, .tmp3b, ._, ._, ._ },
12130 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
12131 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12132 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12133 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12134 } },
12135 }, .{
12136 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
12137 .dst_constraints = .{.{ .scalar_int_is = .byte }},
12138 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
12139 .patterns = &.{
12140 .{ .src = .{ .to_mem, .none } },
12141 },
12142 .extra_temps = .{
12143 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12144 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12145 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12146 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12147 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12148 .unused,
12149 .unused,
12150 .unused,
12151 .unused,
12152 },
12153 .dst_temps = .{.mem},
12154 .clobbers = .{ .eflags = true },
12155 .each = .{ .once = &.{
12156 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12157 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12158 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
12159 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12160 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12161 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
12162 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
12163 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
12164 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12165 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12166 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12167 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12168 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
12169 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
12170 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
12171 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12172 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12173 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12174 } },
12175 }, .{
12176 .required_features = .{ .@"64bit", .lzcnt, null, null },
12177 .dst_constraints = .{.{ .scalar_int_is = .byte }},
12178 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
12179 .patterns = &.{
12180 .{ .src = .{ .to_mem, .none } },
12181 },
12182 .extra_temps = .{
12183 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12184 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12185 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12186 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12187 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12188 .unused,
12189 .unused,
12190 .unused,
12191 .unused,
12192 },
12193 .dst_temps = .{.mem},
12194 .clobbers = .{ .eflags = true },
12195 .each = .{ .once = &.{
12196 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12197 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12198 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
12199 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12200 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12201 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
12202 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
12203 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12204 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12205 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12206 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12207 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
12208 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
12209 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
12210 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12211 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12212 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12213 } },
12214 }, .{
12215 .required_features = .{ .@"64bit", null, null, null },
12216 .dst_constraints = .{.{ .scalar_int_is = .byte }},
12217 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
12218 .patterns = &.{
12219 .{ .src = .{ .to_mem, .none } },
12220 },
12221 .extra_temps = .{
12222 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12223 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12224 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12225 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12226 .unused,
12227 .unused,
12228 .unused,
12229 .unused,
12230 .unused,
12231 },
12232 .dst_temps = .{.mem},
12233 .clobbers = .{ .eflags = true },
12234 .each = .{ .once = &.{
12235 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12236 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12237 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
12238 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12239 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12240 .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ },
12241 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
12242 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12243 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12244 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12245 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12246 .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ },
12247 .{ ._, ._, .neg, .tmp3b, ._, ._, ._ },
12248 .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ },
12249 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12250 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12251 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12252 } },
12253 }, .{
12254 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
12255 .dst_constraints = .{.{ .scalar_int_is = .word }},
12256 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
12257 .patterns = &.{
12258 .{ .src = .{ .to_mem, .none } },
12259 },
12260 .extra_temps = .{
12261 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12262 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12263 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12264 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12265 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12266 .unused,
12267 .unused,
12268 .unused,
12269 .unused,
12270 },
12271 .dst_temps = .{.mem},
12272 .clobbers = .{ .eflags = true },
12273 .each = .{ .once = &.{
12274 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12275 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12276 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
12277 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12278 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12279 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
12280 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
12281 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
12282 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12283 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12284 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12285 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12286 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
12287 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
12288 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
12289 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12290 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12291 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12292 } },
12293 }, .{
12294 .required_features = .{ .@"64bit", .lzcnt, null, null },
12295 .dst_constraints = .{.{ .scalar_int_is = .word }},
12296 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
12297 .patterns = &.{
12298 .{ .src = .{ .to_mem, .none } },
12299 },
12300 .extra_temps = .{
12301 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12302 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12303 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12304 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12305 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12306 .unused,
12307 .unused,
12308 .unused,
12309 .unused,
12310 },
12311 .dst_temps = .{.mem},
12312 .clobbers = .{ .eflags = true },
12313 .each = .{ .once = &.{
12314 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12315 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12316 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
12317 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12318 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12319 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
12320 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
12321 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12322 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12323 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12324 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12325 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
12326 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
12327 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
12328 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12329 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12330 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12331 } },
12332 }, .{
12333 .required_features = .{ .@"64bit", null, null, null },
12334 .dst_constraints = .{.{ .scalar_int_is = .word }},
12335 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any },
12336 .patterns = &.{
12337 .{ .src = .{ .to_mem, .none } },
12338 },
12339 .extra_temps = .{
12340 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12341 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12342 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12343 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12344 .unused,
12345 .unused,
12346 .unused,
12347 .unused,
12348 .unused,
12349 },
12350 .dst_temps = .{.mem},
12351 .clobbers = .{ .eflags = true },
12352 .each = .{ .once = &.{
12353 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12354 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12355 .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ },
12356 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12357 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12358 .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ },
12359 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
12360 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12361 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12362 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12363 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12364 .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ },
12365 .{ ._, ._, .neg, .tmp3d, ._, ._, ._ },
12366 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
12367 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12368 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12369 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12370 } },
12371 }, .{
12372 .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null },
12373 .dst_constraints = .{.{ .scalar_int_is = .word }},
12374 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
12375 .patterns = &.{
12376 .{ .src = .{ .to_mem, .none } },
12377 },
12378 .extra_temps = .{
12379 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12380 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12381 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12382 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12383 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12384 .unused,
12385 .unused,
12386 .unused,
12387 .unused,
12388 },
12389 .dst_temps = .{.mem},
12390 .clobbers = .{ .eflags = true },
12391 .each = .{ .once = &.{
12392 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12393 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12394 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
12395 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12396 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12397 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
12398 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
12399 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
12400 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12401 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12402 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12403 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12404 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
12405 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
12406 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
12407 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12408 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12409 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12410 } },
12411 }, .{
12412 .required_features = .{ .@"64bit", .lzcnt, null, null },
12413 .dst_constraints = .{.{ .scalar_int_is = .word }},
12414 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
12415 .patterns = &.{
12416 .{ .src = .{ .to_mem, .none } },
12417 },
12418 .extra_temps = .{
12419 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12420 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12421 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12422 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12423 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12424 .unused,
12425 .unused,
12426 .unused,
12427 .unused,
12428 },
12429 .dst_temps = .{.mem},
12430 .clobbers = .{ .eflags = true },
12431 .each = .{ .once = &.{
12432 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12433 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12434 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
12435 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12436 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12437 .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ },
12438 .{ ._, ._nc, .j, .@"1f", ._, ._, ._ },
12439 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12440 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12441 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12442 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12443 .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ },
12444 .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ },
12445 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
12446 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12447 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12448 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12449 } },
12450 }, .{
12451 .required_features = .{ .@"64bit", null, null, null },
12452 .dst_constraints = .{.{ .scalar_int_is = .word }},
12453 .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any },
12454 .patterns = &.{
12455 .{ .src = .{ .to_mem, .none } },
12456 },
12457 .extra_temps = .{
12458 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12459 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12460 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12461 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
12462 .unused,
12463 .unused,
12464 .unused,
12465 .unused,
12466 .unused,
12467 },
12468 .dst_temps = .{.mem},
12469 .clobbers = .{ .eflags = true },
12470 .each = .{ .once = &.{
12471 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_len), ._, ._ },
12472 .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ },
12473 .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ },
12474 .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ },
12475 .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ },
12476 .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ },
12477 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
12478 .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ },
12479 .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ },
12480 .{ ._, ._nc, .j, .@"1b", ._, ._, ._ },
12481 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
12482 .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ },
12483 .{ ._, ._, .neg, .tmp3d, ._, ._, ._ },
12484 .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ },
12485 .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ },
12486 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
12487 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12488 } },
12489 } }) catch |err| switch (err) {
12490 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
12491 @tagName(air_tag),
12492 cg.typeOf(ty_op.operand).fmt(pt),
12493 ops[0].tracking(cg),
12494 }),
12495 else => |e| return e,
12496 };
12497 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
12498 },
12499
12500 .cmp_vector, .cmp_vector_optimized => |air_tag| if (use_old) try cg.airCmpVector(inst) else fallback: {
12501 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
12502 const extra = cg.air.extraData(Air.VectorCmp, ty_pl.payload).data;
12503 switch (extra.compareOperator()) {
12504 .eq, .neq => {},
12505 else => break :fallback try cg.airCmpVector(inst),
12506 }
12507 var ops = try cg.tempsFromOperands(inst, .{ extra.lhs, extra.rhs });
12508 var res: [1]Temp = undefined;
12509 switch (extra.compareOperator()) {
12510 .lt => unreachable,
12511 .lte => unreachable,
12512 .eq, .neq => |cmp_op| cg.select(&res, &.{ty_pl.ty.toType()}, &ops, switch (@as(Condition, switch (cmp_op) {
12513 else => unreachable,
12514 .eq => .e,
12515 .neq => .ne,
12516 })) {
12517 else => unreachable,
12518 inline .e, .ne => |cc| comptime &.{ .{
12519 .required_features = .{ .avx2, null, null, null },
12520 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
12521 .patterns = &.{
12522 .{ .src = .{ .to_ymm, .mem } },
12523 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
12524 .{ .src = .{ .to_ymm, .to_ymm } },
12525 },
12526 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
12527 .kind = .all,
12528 .inverted = switch (cc) {
12529 else => unreachable,
12530 .e => false,
12531 .ne => true,
12532 },
12533 .scalar = .byte,
12534 } } }},
12535 .each = .{ .once = &.{
12536 .{ ._, .vp_b, .cmpeq, .dst0y, .src0y, .src1y, ._ },
12537 } },
12538 }, .{
12539 .required_features = .{ .avx2, null, null, null },
12540 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
12541 .patterns = &.{
12542 .{ .src = .{ .to_ymm, .mem } },
12543 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
12544 .{ .src = .{ .to_ymm, .to_ymm } },
12545 },
12546 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
12547 .kind = .all,
12548 .inverted = switch (cc) {
12549 else => unreachable,
12550 .e => false,
12551 .ne => true,
12552 },
12553 .scalar = .word,
12554 } } }},
12555 .each = .{ .once = &.{
12556 .{ ._, .vp_w, .cmpeq, .dst0y, .src0y, .src1y, ._ },
12557 } },
12558 }, .{
12559 .required_features = .{ .avx2, null, null, null },
12560 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
12561 .patterns = &.{
12562 .{ .src = .{ .to_ymm, .mem } },
12563 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
12564 .{ .src = .{ .to_ymm, .to_ymm } },
12565 },
12566 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
12567 .kind = .all,
12568 .inverted = switch (cc) {
12569 else => unreachable,
12570 .e => false,
12571 .ne => true,
12572 },
12573 .scalar = .dword,
12574 } } }},
12575 .each = .{ .once = &.{
12576 .{ ._, .vp_d, .cmpeq, .dst0y, .src0y, .src1y, ._ },
12577 } },
12578 }, .{
12579 .required_features = .{ .avx2, null, null, null },
12580 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
12581 .patterns = &.{
12582 .{ .src = .{ .to_ymm, .mem } },
12583 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
12584 .{ .src = .{ .to_ymm, .to_ymm } },
12585 },
12586 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
12587 .kind = .all,
12588 .inverted = switch (cc) {
12589 else => unreachable,
12590 .e => false,
12591 .ne => true,
12592 },
12593 .scalar = .qword,
12594 } } }},
12595 .each = .{ .once = &.{
12596 .{ ._, .vp_q, .cmpeq, .dst0y, .src0y, .src1y, ._ },
12597 } },
12598 }, .{
12599 .required_features = .{ .avx, null, null, null },
12600 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
12601 .patterns = &.{
12602 .{ .src = .{ .to_xmm, .mem } },
12603 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
12604 .{ .src = .{ .to_xmm, .to_xmm } },
12605 },
12606 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
12607 .kind = .all,
12608 .inverted = switch (cc) {
12609 else => unreachable,
12610 .e => false,
12611 .ne => true,
12612 },
12613 .scalar = .byte,
12614 } } }},
12615 .each = .{ .once = &.{
12616 .{ ._, .vp_b, .cmpeq, .dst0x, .src0x, .src1x, ._ },
12617 } },
12618 }, .{
12619 .required_features = .{ .avx, null, null, null },
12620 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
12621 .patterns = &.{
12622 .{ .src = .{ .to_xmm, .mem } },
12623 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
12624 .{ .src = .{ .to_xmm, .to_xmm } },
12625 },
12626 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
12627 .kind = .all,
12628 .inverted = switch (cc) {
12629 else => unreachable,
12630 .e => false,
12631 .ne => true,
12632 },
12633 .scalar = .word,
12634 } } }},
12635 .each = .{ .once = &.{
12636 .{ ._, .vp_w, .cmpeq, .dst0x, .src0x, .src1x, ._ },
12637 } },
12638 }, .{
12639 .required_features = .{ .avx, null, null, null },
12640 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
12641 .patterns = &.{
12642 .{ .src = .{ .to_xmm, .mem } },
12643 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
12644 .{ .src = .{ .to_xmm, .to_xmm } },
12645 },
12646 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
12647 .kind = .all,
12648 .inverted = switch (cc) {
12649 else => unreachable,
12650 .e => false,
12651 .ne => true,
12652 },
12653 .scalar = .dword,
12654 } } }},
12655 .each = .{ .once = &.{
12656 .{ ._, .vp_d, .cmpeq, .dst0x, .src0x, .src1x, ._ },
12657 } },
12658 }, .{
12659 .required_features = .{ .avx, null, null, null },
12660 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
12661 .patterns = &.{
12662 .{ .src = .{ .to_xmm, .mem } },
12663 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
12664 .{ .src = .{ .to_xmm, .to_xmm } },
12665 },
12666 .dst_temps = .{.{ .mut_rc_mask = .{ .ref = .src0, .rc = .sse, .info = .{
12667 .kind = .all,
12668 .inverted = switch (cc) {
12669 else => unreachable,
12670 .e => false,
12671 .ne => true,
12672 },
12673 .scalar = .qword,
12674 } } }},
12675 .each = .{ .once = &.{
12676 .{ ._, .vp_q, .cmpeq, .dst0x, .src0x, .src1x, ._ },
12677 } },
12678 }, .{
12679 .required_features = .{ .sse2, null, null, null },
12680 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
12681 .patterns = &.{
12682 .{ .src = .{ .to_mut_xmm, .mem } },
12683 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
12684 .{ .src = .{ .to_mut_xmm, .to_xmm } },
12685 },
12686 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
12687 .kind = .all,
12688 .inverted = switch (cc) {
12689 else => unreachable,
12690 .e => false,
12691 .ne => true,
12692 },
12693 .scalar = .byte,
12694 } } }},
12695 .each = .{ .once = &.{
12696 .{ ._, .p_b, .cmpeq, .dst0x, .src1x, ._, ._ },
12697 } },
12698 }, .{
12699 .required_features = .{ .sse2, null, null, null },
12700 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
12701 .patterns = &.{
12702 .{ .src = .{ .to_mut_xmm, .mem } },
12703 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
12704 .{ .src = .{ .to_mut_xmm, .to_xmm } },
12705 },
12706 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
12707 .kind = .all,
12708 .inverted = switch (cc) {
12709 else => unreachable,
12710 .e => false,
12711 .ne => true,
12712 },
12713 .scalar = .word,
12714 } } }},
12715 .each = .{ .once = &.{
12716 .{ ._, .p_w, .cmpeq, .dst0x, .src1x, ._, ._ },
12717 } },
12718 }, .{
12719 .required_features = .{ .sse2, null, null, null },
12720 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
12721 .patterns = &.{
12722 .{ .src = .{ .to_mut_xmm, .mem } },
12723 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
12724 .{ .src = .{ .to_mut_xmm, .to_xmm } },
12725 },
12726 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
12727 .kind = .all,
12728 .inverted = switch (cc) {
12729 else => unreachable,
12730 .e => false,
12731 .ne => true,
12732 },
12733 .scalar = .dword,
12734 } } }},
12735 .each = .{ .once = &.{
12736 .{ ._, .p_d, .cmpeq, .dst0x, .src1x, ._, ._ },
12737 } },
12738 }, .{
12739 .required_features = .{ .sse4_1, null, null, null },
12740 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
12741 .patterns = &.{
12742 .{ .src = .{ .to_mut_xmm, .mem } },
12743 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
12744 .{ .src = .{ .to_mut_xmm, .to_xmm } },
12745 },
12746 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
12747 .kind = .all,
12748 .inverted = switch (cc) {
12749 else => unreachable,
12750 .e => false,
12751 .ne => true,
12752 },
12753 .scalar = .qword,
12754 } } }},
12755 .each = .{ .once = &.{
12756 .{ ._, .p_q, .cmpeq, .dst0x, .src1x, ._, ._ },
12757 } },
12758 }, .{
12759 .required_features = .{ .mmx, null, null, null },
12760 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
12761 .patterns = &.{
12762 .{ .src = .{ .to_mut_mm, .mem } },
12763 .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } },
12764 .{ .src = .{ .to_mut_mm, .to_mm } },
12765 },
12766 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
12767 .kind = .all,
12768 .inverted = switch (cc) {
12769 else => unreachable,
12770 .e => false,
12771 .ne => true,
12772 },
12773 .scalar = .byte,
12774 } } }},
12775 .each = .{ .once = &.{
12776 .{ ._, .p_b, .cmpeq, .dst0q, .src1q, ._, ._ },
12777 } },
12778 }, .{
12779 .required_features = .{ .mmx, null, null, null },
12780 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
12781 .patterns = &.{
12782 .{ .src = .{ .to_mut_mm, .mem } },
12783 .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } },
12784 .{ .src = .{ .to_mut_mm, .to_mm } },
12785 },
12786 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
12787 .kind = .all,
12788 .inverted = switch (cc) {
12789 else => unreachable,
12790 .e => false,
12791 .ne => true,
12792 },
12793 .scalar = .word,
12794 } } }},
12795 .each = .{ .once = &.{
12796 .{ ._, .p_w, .cmpeq, .dst0q, .src1q, ._, ._ },
12797 } },
12798 }, .{
12799 .required_features = .{ .mmx, null, null, null },
12800 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
12801 .patterns = &.{
12802 .{ .src = .{ .to_mut_mm, .mem } },
12803 .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } },
12804 .{ .src = .{ .to_mut_mm, .to_mm } },
12805 },
12806 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
12807 .kind = .all,
12808 .inverted = switch (cc) {
12809 else => unreachable,
12810 .e => false,
12811 .ne => true,
12812 },
12813 .scalar = .dword,
12814 } } }},
12815 .each = .{ .once = &.{
12816 .{ ._, .p_d, .cmpeq, .dst0q, .src1q, ._, ._ },
12817 } },
12818 }, .{
12819 .src_constraints = .{ .{ .bool_vec = .byte }, .{ .bool_vec = .byte } },
12820 .patterns = &.{
12821 .{ .src = .{ .mut_mem, .imm8 } },
12822 .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } },
12823 .{ .src = .{ .to_mut_gpr, .imm8 } },
12824 .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } },
12825 .{ .src = .{ .mut_mem, .to_gpr } },
12826 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
12827 .{ .src = .{ .to_mut_gpr, .mem } },
12828 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
12829 .{ .src = .{ .to_mut_gpr, .to_gpr } },
12830 },
12831 .dst_temps = .{.{ .ref = .src0 }},
12832 .clobbers = .{ .eflags = true },
12833 .each = .{ .once = switch (cc) {
12834 else => unreachable,
12835 .e => &.{
12836 .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ },
12837 .{ ._, ._, .not, .dst0b, ._, ._, ._ },
12838 },
12839 .ne => &.{
12840 .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ },
12841 },
12842 } },
12843 }, .{
12844 .src_constraints = .{ .{ .bool_vec = .word }, .{ .bool_vec = .word } },
12845 .patterns = &.{
12846 .{ .src = .{ .mut_mem, .imm16 } },
12847 .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } },
12848 .{ .src = .{ .to_mut_gpr, .imm16 } },
12849 .{ .src = .{ .imm16, .to_mut_gpr }, .commute = .{ 0, 1 } },
12850 .{ .src = .{ .mut_mem, .to_gpr } },
12851 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
12852 .{ .src = .{ .to_mut_gpr, .mem } },
12853 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
12854 .{ .src = .{ .to_mut_gpr, .to_gpr } },
12855 },
12856 .dst_temps = .{.{ .ref = .src0 }},
12857 .clobbers = .{ .eflags = true },
12858 .each = .{ .once = switch (cc) {
12859 else => unreachable,
12860 .e => &.{
12861 .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ },
12862 .{ ._, ._, .not, .dst0w, ._, ._, ._ },
12863 },
12864 .ne => &.{
12865 .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ },
12866 },
12867 } },
12868 }, .{
12869 .src_constraints = .{ .{ .bool_vec = .dword }, .{ .bool_vec = .dword } },
12870 .patterns = &.{
12871 .{ .src = .{ .mut_mem, .imm32 } },
12872 .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } },
12873 .{ .src = .{ .to_mut_gpr, .imm32 } },
12874 .{ .src = .{ .imm32, .to_mut_gpr }, .commute = .{ 0, 1 } },
12875 .{ .src = .{ .mut_mem, .to_gpr } },
12876 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
12877 .{ .src = .{ .to_mut_gpr, .mem } },
12878 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
12879 .{ .src = .{ .to_mut_gpr, .to_gpr } },
12880 },
12881 .dst_temps = .{.{ .ref = .src0 }},
12882 .clobbers = .{ .eflags = true },
12883 .each = .{ .once = switch (cc) {
12884 else => unreachable,
12885 .e => &.{
12886 .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ },
12887 .{ ._, ._, .not, .dst0d, ._, ._, ._ },
12888 },
12889 .ne => &.{
12890 .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ },
12891 },
12892 } },
12893 }, .{
12894 .required_features = .{ .@"64bit", null, null, null },
12895 .src_constraints = .{ .{ .bool_vec = .qword }, .{ .bool_vec = .qword } },
12896 .patterns = &.{
12897 .{ .src = .{ .mut_mem, .simm32 } },
12898 .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } },
12899 .{ .src = .{ .to_mut_gpr, .simm32 } },
12900 .{ .src = .{ .simm32, .to_mut_gpr }, .commute = .{ 0, 1 } },
12901 .{ .src = .{ .mut_mem, .to_gpr } },
12902 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
12903 .{ .src = .{ .to_mut_gpr, .mem } },
12904 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
12905 .{ .src = .{ .to_mut_gpr, .to_gpr } },
12906 },
12907 .dst_temps = .{.{ .ref = .src0 }},
12908 .clobbers = .{ .eflags = true },
12909 .each = .{ .once = switch (cc) {
12910 else => unreachable,
12911 .e => &.{
12912 .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ },
12913 .{ ._, ._, .not, .dst0q, ._, ._, ._ },
12914 },
12915 .ne => &.{
12916 .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ },
12917 },
12918 } },
12919 }, .{
12920 .src_constraints = .{ .any_bool_vec, .any_bool_vec },
12921 .patterns = &.{
12922 .{ .src = .{ .to_mem, .to_mem } },
12923 },
12924 .extra_temps = .{
12925 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12926 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
12927 .unused,
12928 .unused,
12929 .unused,
12930 .unused,
12931 .unused,
12932 .unused,
12933 .unused,
12934 },
12935 .dst_temps = .{.mem},
12936 .clobbers = .{ .eflags = true },
12937 .each = .{ .once = switch (cc) {
12938 else => unreachable,
12939 .e => &.{
12940 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12941 .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
12942 .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
12943 .{ ._, ._, .not, .tmp1p, ._, ._, ._ },
12944 .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
12945 .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
12946 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12947 },
12948 .ne => &.{
12949 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12950 .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
12951 .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
12952 .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
12953 .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
12954 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12955 },
12956 } },
12957 }, .{
12958 .required_features = .{ .avx2, null, null, null },
12959 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
12960 .patterns = &.{
12961 .{ .src = .{ .to_mem, .to_mem } },
12962 },
12963 .extra_temps = .{
12964 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
12965 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12966 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
12967 .{ .kind = .{ .rc = .sse } },
12968 .unused,
12969 .unused,
12970 .unused,
12971 .unused,
12972 .unused,
12973 },
12974 .dst_temps = .{.mem},
12975 .clobbers = .{ .eflags = true },
12976 .each = .{ .once = switch (cc) {
12977 else => unreachable,
12978 .e => &.{
12979 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12980 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
12981 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
12982 .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
12983 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
12984 .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
12985 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
12986 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
12987 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
12988 },
12989 .ne => &.{
12990 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
12991 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
12992 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
12993 .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
12994 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
12995 .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
12996 .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
12997 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
12998 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
12999 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13000 },
13001 } },
13002 }, .{
13003 .required_features = .{ .avx2, null, null, null },
13004 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
13005 .patterns = &.{
13006 .{ .src = .{ .to_mem, .to_mem } },
13007 },
13008 .extra_temps = .{
13009 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13010 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13011 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
13012 .{ .kind = .{ .rc = .sse } },
13013 .unused,
13014 .unused,
13015 .unused,
13016 .unused,
13017 .unused,
13018 },
13019 .dst_temps = .{.mem},
13020 .clobbers = .{ .eflags = true },
13021 .each = .{ .once = switch (cc) {
13022 else => unreachable,
13023 .e => &.{
13024 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13025 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13026 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
13027 .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
13028 .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
13029 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
13030 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
13031 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13032 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
13033 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13034 },
13035 .ne => &.{
13036 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13037 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13038 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
13039 .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
13040 .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
13041 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
13042 .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
13043 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
13044 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13045 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
13046 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13047 },
13048 } },
13049 }, .{
13050 .required_features = .{ .avx2, null, null, null },
13051 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
13052 .patterns = &.{
13053 .{ .src = .{ .to_mem, .to_mem } },
13054 },
13055 .extra_temps = .{
13056 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13057 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13058 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13059 .{ .kind = .{ .rc = .sse } },
13060 .unused,
13061 .unused,
13062 .unused,
13063 .unused,
13064 .unused,
13065 },
13066 .dst_temps = .{.mem},
13067 .clobbers = .{ .eflags = true },
13068 .each = .{ .once = switch (cc) {
13069 else => unreachable,
13070 .e => &.{
13071 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13072 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13073 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
13074 .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
13075 .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
13076 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
13077 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
13078 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
13079 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13080 },
13081 .ne => &.{
13082 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13083 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13084 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
13085 .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
13086 .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
13087 .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
13088 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
13089 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
13090 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
13091 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13092 },
13093 } },
13094 }, .{
13095 .required_features = .{ .avx2, null, null, null },
13096 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
13097 .patterns = &.{
13098 .{ .src = .{ .to_mem, .to_mem } },
13099 },
13100 .extra_temps = .{
13101 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13102 .{ .type = .u32, .kind = .{ .reg = .rcx } },
13103 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13104 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13105 .{ .kind = .{ .rc = .sse } },
13106 .unused,
13107 .unused,
13108 .unused,
13109 .unused,
13110 },
13111 .dst_temps = .{.mem},
13112 .clobbers = .{ .eflags = true },
13113 .each = .{ .once = switch (cc) {
13114 else => unreachable,
13115 .e => &.{
13116 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13117 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13118 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13119 .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
13120 .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
13121 .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
13122 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13123 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13124 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
13125 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13126 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13127 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13128 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13129 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13130 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13131 .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
13132 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13133 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13134 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13135 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13136 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13137 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13138 },
13139 .ne => &.{
13140 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13141 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13142 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13143 .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
13144 .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
13145 .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
13146 .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
13147 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13148 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13149 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
13150 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13151 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13152 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13153 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13154 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13155 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13156 .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
13157 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13158 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13159 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13160 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13161 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13162 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13163 },
13164 } },
13165 }, .{
13166 .required_features = .{ .avx, null, null, null },
13167 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
13168 .patterns = &.{
13169 .{ .src = .{ .to_mem, .to_mem } },
13170 },
13171 .extra_temps = .{
13172 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13173 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13174 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
13175 .{ .kind = .{ .rc = .sse } },
13176 .unused,
13177 .unused,
13178 .unused,
13179 .unused,
13180 .unused,
13181 },
13182 .dst_temps = .{.mem},
13183 .clobbers = .{ .eflags = true },
13184 .each = .{ .once = switch (cc) {
13185 else => unreachable,
13186 .e => &.{
13187 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13188 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13189 .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13190 .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
13191 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
13192 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
13193 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13194 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13195 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13196 },
13197 .ne => &.{
13198 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13199 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13200 .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13201 .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
13202 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
13203 .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
13204 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
13205 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13206 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13207 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13208 },
13209 } },
13210 }, .{
13211 .required_features = .{ .avx, null, null, null },
13212 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
13213 .patterns = &.{
13214 .{ .src = .{ .to_mem, .to_mem } },
13215 },
13216 .extra_temps = .{
13217 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13218 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13219 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13220 .{ .kind = .{ .rc = .sse } },
13221 .unused,
13222 .unused,
13223 .unused,
13224 .unused,
13225 .unused,
13226 },
13227 .dst_temps = .{.mem},
13228 .clobbers = .{ .eflags = true },
13229 .each = .{ .once = switch (cc) {
13230 else => unreachable,
13231 .e => &.{
13232 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13233 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13234 .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13235 .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
13236 .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
13237 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
13238 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
13239 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
13240 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13241 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13242 },
13243 .ne => &.{
13244 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13245 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13246 .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13247 .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
13248 .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
13249 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
13250 .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
13251 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
13252 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
13253 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13254 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13255 },
13256 } },
13257 }, .{
13258 .required_features = .{ .avx, null, null, null },
13259 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
13260 .patterns = &.{
13261 .{ .src = .{ .to_mem, .to_mem } },
13262 },
13263 .extra_temps = .{
13264 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13265 .{ .type = .u32, .kind = .{ .reg = .rcx } },
13266 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13267 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13268 .{ .kind = .{ .rc = .sse } },
13269 .unused,
13270 .unused,
13271 .unused,
13272 .unused,
13273 },
13274 .dst_temps = .{.mem},
13275 .clobbers = .{ .eflags = true },
13276 .each = .{ .once = switch (cc) {
13277 else => unreachable,
13278 .e => &.{
13279 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13280 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13281 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13282 .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13283 .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
13284 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
13285 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13286 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13287 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
13288 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13289 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13290 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13291 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13292 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13293 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13294 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
13295 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13296 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13297 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13298 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13299 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13300 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13301 },
13302 .ne => &.{
13303 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13304 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13305 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13306 .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13307 .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
13308 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
13309 .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
13310 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13311 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13312 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
13313 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13314 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13315 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13316 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13317 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13318 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13319 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
13320 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13321 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13322 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13323 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13324 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13325 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13326 },
13327 } },
13328 }, .{
13329 .required_features = .{ .avx, null, null, null },
13330 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
13331 .patterns = &.{
13332 .{ .src = .{ .to_mem, .to_mem } },
13333 },
13334 .extra_temps = .{
13335 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13336 .{ .type = .u32, .kind = .{ .reg = .rcx } },
13337 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13338 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13339 .{ .kind = .{ .rc = .sse } },
13340 .unused,
13341 .unused,
13342 .unused,
13343 .unused,
13344 },
13345 .dst_temps = .{.mem},
13346 .clobbers = .{ .eflags = true },
13347 .each = .{ .once = switch (cc) {
13348 else => unreachable,
13349 .e => &.{
13350 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13351 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13352 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13353 .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13354 .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
13355 .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
13356 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13357 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13358 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13359 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13360 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13361 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13362 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13363 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13364 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13365 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
13366 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13367 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13368 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13369 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13370 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13371 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13372 },
13373 .ne => &.{
13374 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13375 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13376 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13377 .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13378 .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
13379 .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
13380 .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ },
13381 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13382 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13383 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13384 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13385 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13386 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13387 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13388 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13389 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13390 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
13391 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13392 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13393 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13394 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13395 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13396 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13397 },
13398 } },
13399 }, .{
13400 .required_features = .{ .sse2, null, null, null },
13401 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
13402 .patterns = &.{
13403 .{ .src = .{ .to_mem, .to_mem } },
13404 },
13405 .extra_temps = .{
13406 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13407 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13408 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
13409 .{ .kind = .{ .rc = .sse } },
13410 .unused,
13411 .unused,
13412 .unused,
13413 .unused,
13414 .unused,
13415 },
13416 .dst_temps = .{.mem},
13417 .clobbers = .{ .eflags = true },
13418 .each = .{ .once = switch (cc) {
13419 else => unreachable,
13420 .e => &.{
13421 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13422 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13423 .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13424 .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
13425 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
13426 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
13427 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13428 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13429 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13430 },
13431 .ne => &.{
13432 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13433 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13434 .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13435 .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
13436 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
13437 .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
13438 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
13439 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13440 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13441 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13442 },
13443 } },
13444 }, .{
13445 .required_features = .{ .sse2, null, null, null },
13446 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
13447 .patterns = &.{
13448 .{ .src = .{ .to_mem, .to_mem } },
13449 },
13450 .extra_temps = .{
13451 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13452 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13453 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13454 .{ .kind = .{ .rc = .sse } },
13455 .unused,
13456 .unused,
13457 .unused,
13458 .unused,
13459 .unused,
13460 },
13461 .dst_temps = .{.mem},
13462 .clobbers = .{ .eflags = true },
13463 .each = .{ .once = switch (cc) {
13464 else => unreachable,
13465 .e => &.{
13466 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13467 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13468 .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13469 .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
13470 .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
13471 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
13472 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
13473 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
13474 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13475 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13476 },
13477 .ne => &.{
13478 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13479 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13480 .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13481 .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
13482 .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
13483 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
13484 .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
13485 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
13486 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
13487 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
13488 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13489 },
13490 } },
13491 }, .{
13492 .required_features = .{ .sse2, null, null, null },
13493 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
13494 .patterns = &.{
13495 .{ .src = .{ .to_mem, .to_mem } },
13496 },
13497 .extra_temps = .{
13498 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13499 .{ .type = .u32, .kind = .{ .reg = .rcx } },
13500 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13501 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13502 .{ .kind = .{ .rc = .sse } },
13503 .unused,
13504 .unused,
13505 .unused,
13506 .unused,
13507 },
13508 .dst_temps = .{.mem},
13509 .clobbers = .{ .eflags = true },
13510 .each = .{ .once = switch (cc) {
13511 else => unreachable,
13512 .e => &.{
13513 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13514 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13515 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13516 .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13517 .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
13518 .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
13519 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13520 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13521 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
13522 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13523 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13524 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13525 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13526 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13527 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13528 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
13529 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13530 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13531 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13532 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13533 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13534 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13535 },
13536 .ne => &.{
13537 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13538 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13539 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13540 .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13541 .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
13542 .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
13543 .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
13544 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13545 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13546 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
13547 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13548 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13549 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13550 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13551 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13552 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13553 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
13554 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13555 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13556 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13557 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13558 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13559 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13560 },
13561 } },
13562 }, .{
13563 .required_features = .{ .sse4_1, null, null, null },
13564 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
13565 .patterns = &.{
13566 .{ .src = .{ .to_mem, .to_mem } },
13567 },
13568 .extra_temps = .{
13569 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13570 .{ .type = .u32, .kind = .{ .reg = .rcx } },
13571 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13572 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13573 .{ .kind = .{ .rc = .sse } },
13574 .unused,
13575 .unused,
13576 .unused,
13577 .unused,
13578 },
13579 .dst_temps = .{.mem},
13580 .clobbers = .{ .eflags = true },
13581 .each = .{ .once = switch (cc) {
13582 else => unreachable,
13583 .e => &.{
13584 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13585 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13586 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13587 .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13588 .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
13589 .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
13590 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13591 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13592 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13593 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13594 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13595 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13596 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13597 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13598 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13599 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
13600 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13601 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13602 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13603 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13604 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13605 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13606 },
13607 .ne => &.{
13608 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13609 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13610 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13611 .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
13612 .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
13613 .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
13614 .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ },
13615 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
13616 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
13617 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13618 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13619 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13620 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13621 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13622 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
13623 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13624 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
13625 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13626 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13627 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13628 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
13629 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
13630 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
13631 },
13632 } },
13633 }, .{
13634 .required_features = .{ .sse, .mmx, null, null },
13635 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
13636 .patterns = &.{
13637 .{ .src = .{ .to_mem, .to_mem } },
13638 },
13639 .extra_temps = .{
13640 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13641 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13642 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13643 .{ .kind = .{ .rc = .mmx } },
13644 .unused,
13645 .unused,
13646 .unused,
13647 .unused,
13648 .unused,
13649 },
13650 .dst_temps = .{.mem},
13651 .clobbers = .{ .eflags = true },
13652 .each = .{ .once = switch (cc) {
13653 else => unreachable,
13654 .e => &.{
13655 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13656 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13657 .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
13658 .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13659 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
13660 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
13661 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
13662 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
13663 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13664 },
13665 .ne => &.{
13666 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13667 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13668 .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
13669 .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13670 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
13671 .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
13672 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
13673 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
13674 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
13675 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13676 },
13677 } },
13678 }, .{
13679 .required_features = .{ .sse, .mmx, null, null },
13680 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
13681 .patterns = &.{
13682 .{ .src = .{ .to_mem, .to_mem } },
13683 },
13684 .extra_temps = .{
13685 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13686 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13687 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13688 .{ .kind = .{ .rc = .mmx } },
13689 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13690 .{ .kind = .{ .rc = .mmx } },
13691 .unused,
13692 .unused,
13693 .unused,
13694 },
13695 .dst_temps = .{.mem},
13696 .clobbers = .{ .eflags = true },
13697 .each = .{ .once = switch (cc) {
13698 else => unreachable,
13699 .e => &.{
13700 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13701 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13702 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13703 .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
13704 .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
13705 .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13706 .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
13707 .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
13708 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
13709 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
13710 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
13711 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13712 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13713 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
13714 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
13715 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
13716 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13717 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
13718 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13719 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13720 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13721 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
13722 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
13723 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
13724 },
13725 .ne => &.{
13726 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13727 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13728 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13729 .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
13730 .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
13731 .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13732 .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
13733 .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
13734 .{ ._, ._, .xor, .tmp4b, .si(0b1111), ._, ._ },
13735 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
13736 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
13737 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
13738 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13739 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13740 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
13741 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
13742 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
13743 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13744 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
13745 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13746 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13747 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13748 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
13749 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
13750 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
13751 },
13752 } },
13753 }, .{
13754 .required_features = .{ .sse, .mmx, null, null },
13755 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
13756 .patterns = &.{
13757 .{ .src = .{ .to_mem, .to_mem } },
13758 },
13759 .extra_temps = .{
13760 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13761 .{ .type = .u32, .kind = .{ .reg = .rcx } },
13762 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13763 .{ .kind = .{ .rc = .mmx } },
13764 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13765 .{ .kind = .{ .rc = .mmx } },
13766 .unused,
13767 .unused,
13768 .unused,
13769 },
13770 .dst_temps = .{.mem},
13771 .clobbers = .{ .eflags = true },
13772 .each = .{ .once = switch (cc) {
13773 else => unreachable,
13774 .e => &.{
13775 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13776 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13777 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13778 .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
13779 .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
13780 .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13781 .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
13782 .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
13783 .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
13784 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
13785 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
13786 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13787 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13788 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13789 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
13790 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
13791 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
13792 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13793 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
13794 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13795 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13796 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13797 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
13798 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
13799 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
13800 },
13801 .ne => &.{
13802 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13803 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
13804 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13805 .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
13806 .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
13807 .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13808 .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
13809 .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
13810 .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
13811 .{ ._, ._, .xor, .tmp4b, .si(0b11), ._, ._ },
13812 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
13813 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
13814 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
13815 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13816 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
13817 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
13818 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
13819 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
13820 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
13821 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
13822 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13823 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
13824 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
13825 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
13826 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
13827 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
13828 },
13829 } },
13830 }, .{
13831 .dst_constraints = .{.{ .bool_vec = .byte }},
13832 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
13833 .patterns = &.{
13834 .{ .src = .{ .to_mem, .to_mem } },
13835 },
13836 .extra_temps = .{
13837 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13838 .{ .type = .u8, .kind = .{ .reg = .cl } },
13839 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
13840 .unused,
13841 .unused,
13842 .unused,
13843 .unused,
13844 .unused,
13845 .unused,
13846 },
13847 .dst_temps = .{.{ .rc = .general_purpose }},
13848 .clobbers = .{ .eflags = true },
13849 .each = .{ .once = &.{
13850 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
13851 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13852 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13853 .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
13854 .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
13855 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
13856 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
13857 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
13858 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
13859 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
13860 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13861 } },
13862 }, .{
13863 .dst_constraints = .{.{ .bool_vec = .byte }},
13864 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
13865 .patterns = &.{
13866 .{ .src = .{ .to_mem, .to_mem } },
13867 },
13868 .extra_temps = .{
13869 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13870 .{ .type = .u8, .kind = .{ .reg = .cl } },
13871 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
13872 .unused,
13873 .unused,
13874 .unused,
13875 .unused,
13876 .unused,
13877 .unused,
13878 },
13879 .dst_temps = .{.{ .rc = .general_purpose }},
13880 .clobbers = .{ .eflags = true },
13881 .each = .{ .once = &.{
13882 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
13883 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13884 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13885 .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
13886 .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
13887 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
13888 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
13889 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
13890 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
13891 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
13892 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13893 } },
13894 }, .{
13895 .dst_constraints = .{.{ .bool_vec = .byte }},
13896 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
13897 .patterns = &.{
13898 .{ .src = .{ .to_mem, .to_mem } },
13899 },
13900 .extra_temps = .{
13901 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13902 .{ .type = .u8, .kind = .{ .reg = .cl } },
13903 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13904 .unused,
13905 .unused,
13906 .unused,
13907 .unused,
13908 .unused,
13909 .unused,
13910 },
13911 .dst_temps = .{.{ .rc = .general_purpose }},
13912 .clobbers = .{ .eflags = true },
13913 .each = .{ .once = &.{
13914 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
13915 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13916 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13917 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
13918 .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
13919 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
13920 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
13921 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
13922 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
13923 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
13924 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13925 } },
13926 }, .{
13927 .required_features = .{ .@"64bit", null, null, null },
13928 .dst_constraints = .{.{ .bool_vec = .byte }},
13929 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
13930 .patterns = &.{
13931 .{ .src = .{ .to_mem, .to_mem } },
13932 },
13933 .extra_temps = .{
13934 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
13935 .{ .type = .u8, .kind = .{ .reg = .cl } },
13936 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
13937 .unused,
13938 .unused,
13939 .unused,
13940 .unused,
13941 .unused,
13942 .unused,
13943 },
13944 .dst_temps = .{.{ .rc = .general_purpose }},
13945 .clobbers = .{ .eflags = true },
13946 .each = .{ .once = &.{
13947 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
13948 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
13949 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13950 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
13951 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
13952 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
13953 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
13954 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
13955 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
13956 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
13957 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
13958 } },
13959 }, .{
13960 .dst_constraints = .{.{ .bool_vec = .byte }},
13961 .src_constraints = .{ .any_scalar_int, .any_scalar_int },
13962 .patterns = &.{
13963 .{ .src = .{ .to_mem, .to_mem } },
13964 },
13965 .extra_temps = .{
13966 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
13967 .{ .type = .u8, .kind = .{ .reg = .cl } },
13968 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
13969 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
13970 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
13971 .unused,
13972 .unused,
13973 .unused,
13974 .unused,
13975 },
13976 .dst_temps = .{.{ .rc = .general_purpose }},
13977 .clobbers = .{ .eflags = true },
13978 .each = .{ .once = &.{
13979 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
13980 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
13981 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
13982 .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
13983 .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
13984 .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
13985 .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
13986 .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
13987 .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
13988 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
13989 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
13990 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
13991 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
13992 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
13993 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
13994 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
13995 .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
13996 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
13997 } },
13998 }, .{
13999 .dst_constraints = .{.{ .bool_vec = .dword }},
14000 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
14001 .patterns = &.{
14002 .{ .src = .{ .to_mem, .to_mem } },
14003 },
14004 .extra_temps = .{
14005 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14006 .{ .type = .u8, .kind = .{ .reg = .cl } },
14007 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14008 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
14009 .unused,
14010 .unused,
14011 .unused,
14012 .unused,
14013 .unused,
14014 },
14015 .dst_temps = .{.{ .rc = .general_purpose }},
14016 .clobbers = .{ .eflags = true },
14017 .each = .{ .once = &.{
14018 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14019 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14020 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14021 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14022 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
14023 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14024 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14025 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14026 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14027 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14028 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
14029 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
14030 } },
14031 }, .{
14032 .dst_constraints = .{.{ .bool_vec = .dword }},
14033 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
14034 .patterns = &.{
14035 .{ .src = .{ .to_mem, .to_mem } },
14036 },
14037 .extra_temps = .{
14038 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14039 .{ .type = .u8, .kind = .{ .reg = .cl } },
14040 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14041 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
14042 .unused,
14043 .unused,
14044 .unused,
14045 .unused,
14046 .unused,
14047 },
14048 .dst_temps = .{.{ .rc = .general_purpose }},
14049 .clobbers = .{ .eflags = true },
14050 .each = .{ .once = &.{
14051 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14052 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14053 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14054 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14055 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
14056 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
14057 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14058 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14059 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14060 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14061 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
14062 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
14063 } },
14064 }, .{
14065 .dst_constraints = .{.{ .bool_vec = .dword }},
14066 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
14067 .patterns = &.{
14068 .{ .src = .{ .to_mem, .to_mem } },
14069 },
14070 .extra_temps = .{
14071 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14072 .{ .type = .u8, .kind = .{ .reg = .cl } },
14073 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14074 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14075 .unused,
14076 .unused,
14077 .unused,
14078 .unused,
14079 .unused,
14080 },
14081 .dst_temps = .{.{ .rc = .general_purpose }},
14082 .clobbers = .{ .eflags = true },
14083 .each = .{ .once = &.{
14084 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14085 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14086 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14087 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14088 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
14089 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
14090 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14091 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14092 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14093 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14094 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
14095 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
14096 } },
14097 }, .{
14098 .required_features = .{ .@"64bit", null, null, null },
14099 .dst_constraints = .{.{ .bool_vec = .dword }},
14100 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
14101 .patterns = &.{
14102 .{ .src = .{ .to_mem, .to_mem } },
14103 },
14104 .extra_temps = .{
14105 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14106 .{ .type = .u8, .kind = .{ .reg = .cl } },
14107 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14108 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
14109 .unused,
14110 .unused,
14111 .unused,
14112 .unused,
14113 .unused,
14114 },
14115 .dst_temps = .{.{ .rc = .general_purpose }},
14116 .clobbers = .{ .eflags = true },
14117 .each = .{ .once = &.{
14118 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14119 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14120 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14121 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14122 .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
14123 .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
14124 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14125 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14126 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14127 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14128 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
14129 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
14130 } },
14131 }, .{
14132 .dst_constraints = .{.{ .bool_vec = .dword }},
14133 .src_constraints = .{ .any_scalar_int, .any_scalar_int },
14134 .patterns = &.{
14135 .{ .src = .{ .to_mem, .to_mem } },
14136 },
14137 .extra_temps = .{
14138 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14139 .{ .type = .u8, .kind = .{ .reg = .cl } },
14140 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14141 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14142 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14143 .unused,
14144 .unused,
14145 .unused,
14146 .unused,
14147 },
14148 .dst_temps = .{.{ .rc = .general_purpose }},
14149 .clobbers = .{ .eflags = true },
14150 .each = .{ .once = &.{
14151 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14152 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
14153 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14154 .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
14155 .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
14156 .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
14157 .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
14158 .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
14159 .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
14160 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
14161 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
14162 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14163 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
14164 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14165 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
14166 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
14167 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14168 .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
14169 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
703314170 } },
703414171 }, .{
7035 .required_features = .{ .avx2, null, null, null },
14172 .required_features = .{ .@"64bit", null, null, null },
14173 .dst_constraints = .{.{ .bool_vec = .qword }},
14174 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
14175 .patterns = &.{
14176 .{ .src = .{ .to_mem, .to_mem } },
14177 },
14178 .extra_temps = .{
14179 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14180 .{ .type = .u8, .kind = .{ .reg = .cl } },
14181 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
14182 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
14183 .unused,
14184 .unused,
14185 .unused,
14186 .unused,
14187 .unused,
14188 },
14189 .dst_temps = .{.{ .rc = .general_purpose }},
14190 .clobbers = .{ .eflags = true },
14191 .each = .{ .once = &.{
14192 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14193 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14194 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14195 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14196 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
14197 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14198 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14199 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14200 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14201 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14202 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
14203 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
14204 } },
14205 }, .{
14206 .required_features = .{ .@"64bit", null, null, null },
14207 .dst_constraints = .{.{ .bool_vec = .qword }},
703614208 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
703714209 .patterns = &.{
7038 .{ .src = .{ .to_ymm, .mem } },
7039 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
7040 .{ .src = .{ .to_ymm, .to_ymm } },
14210 .{ .src = .{ .to_mem, .to_mem } },
704114211 },
7042 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7043 .kind = .all,
7044 .inverted = switch (cc) {
7045 else => unreachable,
7046 .e => false,
7047 .ne => true,
7048 },
7049 .scalar = .word,
7050 } } }},
14212 .extra_temps = .{
14213 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14214 .{ .type = .u8, .kind = .{ .reg = .cl } },
14215 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
14216 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
14217 .unused,
14218 .unused,
14219 .unused,
14220 .unused,
14221 .unused,
14222 },
14223 .dst_temps = .{.{ .rc = .general_purpose }},
14224 .clobbers = .{ .eflags = true },
705114225 .each = .{ .once = &.{
7052 .{ ._, .vp_w, .cmpeq, .dst0y, .src0y, .src1y, ._ },
14226 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14227 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14228 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14229 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
14230 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
14231 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14232 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14233 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14234 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14235 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
14236 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
705314237 } },
705414238 }, .{
7055 .required_features = .{ .avx2, null, null, null },
14239 .required_features = .{ .@"64bit", null, null, null },
14240 .dst_constraints = .{.{ .bool_vec = .qword }},
705614241 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
705714242 .patterns = &.{
7058 .{ .src = .{ .to_ymm, .mem } },
7059 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
7060 .{ .src = .{ .to_ymm, .to_ymm } },
14243 .{ .src = .{ .to_mem, .to_mem } },
706114244 },
7062 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7063 .kind = .all,
7064 .inverted = switch (cc) {
7065 else => unreachable,
7066 .e => false,
7067 .ne => true,
7068 },
7069 .scalar = .dword,
7070 } } }},
14245 .extra_temps = .{
14246 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14247 .{ .type = .u8, .kind = .{ .reg = .cl } },
14248 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
14249 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14250 .unused,
14251 .unused,
14252 .unused,
14253 .unused,
14254 .unused,
14255 },
14256 .dst_temps = .{.{ .rc = .general_purpose }},
14257 .clobbers = .{ .eflags = true },
707114258 .each = .{ .once = &.{
7072 .{ ._, .vp_d, .cmpeq, .dst0y, .src0y, .src1y, ._ },
14259 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14260 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14261 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14262 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14263 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
14264 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
14265 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14266 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14267 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14268 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14269 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
14270 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
707314271 } },
707414272 }, .{
7075 .required_features = .{ .avx2, null, null, null },
14273 .required_features = .{ .@"64bit", null, null, null },
14274 .dst_constraints = .{.{ .bool_vec = .qword }},
707614275 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
707714276 .patterns = &.{
7078 .{ .src = .{ .to_ymm, .mem } },
7079 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
7080 .{ .src = .{ .to_ymm, .to_ymm } },
14277 .{ .src = .{ .to_mem, .to_mem } },
708114278 },
7082 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7083 .kind = .all,
7084 .inverted = switch (cc) {
7085 else => unreachable,
7086 .e => false,
7087 .ne => true,
7088 },
7089 .scalar = .qword,
7090 } } }},
14279 .extra_temps = .{
14280 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14281 .{ .type = .u8, .kind = .{ .reg = .cl } },
14282 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
14283 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
14284 .unused,
14285 .unused,
14286 .unused,
14287 .unused,
14288 .unused,
14289 },
14290 .dst_temps = .{.{ .rc = .general_purpose }},
14291 .clobbers = .{ .eflags = true },
709114292 .each = .{ .once = &.{
7092 .{ ._, .vp_q, .cmpeq, .dst0y, .src0y, .src1y, ._ },
14293 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14294 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14295 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14296 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14297 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
14298 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
14299 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14300 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14301 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14302 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14303 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
14304 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
709314305 } },
709414306 }, .{
7095 .required_features = .{ .avx, null, null, null },
7096 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
14307 .required_features = .{ .@"64bit", null, null, null },
14308 .dst_constraints = .{.{ .bool_vec = .qword }},
14309 .src_constraints = .{ .any_scalar_int, .any_scalar_int },
709714310 .patterns = &.{
7098 .{ .src = .{ .to_xmm, .mem } },
7099 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
7100 .{ .src = .{ .to_xmm, .to_xmm } },
14311 .{ .src = .{ .to_mem, .to_mem } },
710114312 },
7102 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7103 .kind = .all,
7104 .inverted = switch (cc) {
7105 else => unreachable,
7106 .e => false,
7107 .ne => true,
7108 },
7109 .scalar = .byte,
7110 } } }},
14313 .extra_temps = .{
14314 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14315 .{ .type = .u8, .kind = .{ .reg = .cl } },
14316 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14317 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14318 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14319 .unused,
14320 .unused,
14321 .unused,
14322 .unused,
14323 },
14324 .dst_temps = .{.{ .rc = .general_purpose }},
14325 .clobbers = .{ .eflags = true },
711114326 .each = .{ .once = &.{
7112 .{ ._, .vp_b, .cmpeq, .dst0x, .src0x, .src1x, ._ },
14327 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14328 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
14329 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
14330 .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
14331 .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
14332 .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
14333 .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
14334 .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
14335 .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
14336 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
14337 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
14338 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14339 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
14340 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
14341 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
14342 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
14343 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
14344 .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
14345 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
711314346 } },
711414347 }, .{
7115 .required_features = .{ .avx, null, null, null },
7116 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
14348 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
711714349 .patterns = &.{
7118 .{ .src = .{ .to_xmm, .mem } },
7119 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
7120 .{ .src = .{ .to_xmm, .to_xmm } },
14350 .{ .src = .{ .to_mem, .to_mem } },
712114351 },
7122 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7123 .kind = .all,
7124 .inverted = switch (cc) {
7125 else => unreachable,
7126 .e => false,
7127 .ne => true,
7128 },
7129 .scalar = .word,
7130 } } }},
14352 .extra_temps = .{
14353 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
14354 .{ .type = .u32, .kind = .{ .reg = .ecx } },
14355 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14356 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14357 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
14358 .unused,
14359 .unused,
14360 .unused,
14361 .unused,
14362 },
14363 .dst_temps = .{.mem},
14364 .clobbers = .{ .eflags = true },
713114365 .each = .{ .once = &.{
7132 .{ ._, .vp_w, .cmpeq, .dst0x, .src0x, .src1x, ._ },
14366 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14367 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
14368 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14369 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
14370 .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
14371 .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
14372 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
14373 .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
14374 .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
14375 .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
14376 .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
14377 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
14378 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
14379 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
14380 .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
14381 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
14382 .{ .@"1:", ._, .add, .tmp0p, .si(1), ._, ._ },
14383 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
14384 .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
14385 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
14386 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
14387 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
14388 .{ ._, ._, .mov, .memi(.dst0p, .tmp3), .tmp2p, ._, ._ },
713314389 } },
713414390 }, .{
7135 .required_features = .{ .avx, null, null, null },
7136 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
14391 .required_features = .{ .f16c, null, null, null },
14392 .src_constraints = .{
14393 .{ .scalar_float = .{ .of = .word, .is = .word } },
14394 .{ .scalar_float = .{ .of = .word, .is = .word } },
14395 },
713714396 .patterns = &.{
7138 .{ .src = .{ .to_xmm, .mem } },
7139 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
7140 .{ .src = .{ .to_xmm, .to_xmm } },
14397 .{ .src = .{ .to_sse, .to_sse } },
714114398 },
7142 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7143 .kind = .all,
7144 .inverted = switch (cc) {
7145 else => unreachable,
7146 .e => false,
7147 .ne => true,
7148 },
7149 .scalar = .dword,
7150 } } }},
14399 .extra_temps = .{
14400 .{ .kind = .{ .rc = .sse } },
14401 .unused,
14402 .unused,
14403 .unused,
14404 .unused,
14405 .unused,
14406 .unused,
14407 .unused,
14408 .unused,
14409 },
14410 .dst_temps = .{.{ .mut_rc_mask = .{
14411 .ref = .src0,
14412 .rc = .sse,
14413 .info = .{ .kind = .all, .scalar = .dword },
14414 } }},
715114415 .each = .{ .once = &.{
7152 .{ ._, .vp_d, .cmpeq, .dst0x, .src0x, .src1x, ._ },
14416 .{ ._, .v_ps, .cvtph2, .dst0x, .src0x, ._, ._ },
14417 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1x, ._, ._ },
14418 .{ ._, .v_ss, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {
14419 else => unreachable,
14420 .e => 0b00000,
14421 .ne => 0b00100,
14422 }) },
715314423 } },
715414424 }, .{
7155 .required_features = .{ .avx, null, null, null },
7156 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
14425 .required_features = .{ .f16c, null, null, null },
14426 .src_constraints = .{
14427 .{ .scalar_float = .{ .of = .qword, .is = .word } },
14428 .{ .scalar_float = .{ .of = .qword, .is = .word } },
14429 },
715714430 .patterns = &.{
7158 .{ .src = .{ .to_xmm, .mem } },
7159 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
7160 .{ .src = .{ .to_xmm, .to_xmm } },
14431 .{ .src = .{ .mem, .mem } },
14432 .{ .src = .{ .sse, .mem } },
14433 .{ .src = .{ .mem, .sse } },
14434 .{ .src = .{ .to_sse, .to_sse } },
716114435 },
7162 .dst_temps = .{.{ .rc_mask = .{ .rc = .sse, .info = .{
7163 .kind = .all,
7164 .inverted = switch (cc) {
7165 else => unreachable,
7166 .e => false,
7167 .ne => true,
7168 },
7169 .scalar = .qword,
7170 } } }},
14436 .extra_temps = .{
14437 .{ .kind = .{ .rc = .sse } },
14438 .unused,
14439 .unused,
14440 .unused,
14441 .unused,
14442 .unused,
14443 .unused,
14444 .unused,
14445 .unused,
14446 },
14447 .dst_temps = .{.{ .mut_rc_mask = .{
14448 .ref = .src0,
14449 .rc = .sse,
14450 .info = .{ .kind = .all, .scalar = .dword },
14451 } }},
717114452 .each = .{ .once = &.{
7172 .{ ._, .vp_q, .cmpeq, .dst0x, .src0x, .src1x, ._ },
14453 .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ },
14454 .{ ._, .v_ps, .cvtph2, .tmp0x, .src1q, ._, ._ },
14455 .{ ._, .v_ps, .cmp, .dst0x, .dst0x, .tmp0x, .ui(switch (cc) {
14456 else => unreachable,
14457 .e => 0b00000,
14458 .ne => 0b00100,
14459 }) },
717314460 } },
717414461 }, .{
7175 .required_features = .{ .sse2, null, null, null },
7176 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
14462 .required_features = .{ .f16c, null, null, null },
14463 .src_constraints = .{
14464 .{ .scalar_float = .{ .of = .xword, .is = .word } },
14465 .{ .scalar_float = .{ .of = .xword, .is = .word } },
14466 },
717714467 .patterns = &.{
7178 .{ .src = .{ .to_mut_xmm, .mem } },
7179 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
7180 .{ .src = .{ .to_mut_xmm, .to_xmm } },
14468 .{ .src = .{ .mem, .mem } },
14469 .{ .src = .{ .to_sse, .mem } },
14470 .{ .src = .{ .mem, .to_sse } },
14471 .{ .src = .{ .to_sse, .to_sse } },
718114472 },
7182 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
7183 .kind = .all,
7184 .inverted = switch (cc) {
7185 else => unreachable,
7186 .e => false,
7187 .ne => true,
7188 },
7189 .scalar = .byte,
7190 } } }},
14473 .extra_temps = .{
14474 .{ .kind = .{ .rc = .sse } },
14475 .unused,
14476 .unused,
14477 .unused,
14478 .unused,
14479 .unused,
14480 .unused,
14481 .unused,
14482 .unused,
14483 },
14484 .dst_temps = .{.{ .mut_rc_mask = .{
14485 .ref = .src0,
14486 .rc = .sse,
14487 .info = .{ .kind = .all, .scalar = .dword },
14488 } }},
719114489 .each = .{ .once = &.{
7192 .{ ._, .p_b, .cmpeq, .dst0x, .src1x, ._, ._ },
14490 .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ },
14491 .{ ._, .v_ps, .cvtph2, .tmp0y, .src1x, ._, ._ },
14492 .{ ._, .v_ps, .cmp, .dst0y, .dst0y, .tmp0y, .ui(switch (cc) {
14493 else => unreachable,
14494 .e => 0b00000,
14495 .ne => 0b00100,
14496 }) },
719314497 } },
719414498 }, .{
7195 .required_features = .{ .sse2, null, null, null },
7196 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
14499 .required_features = .{ .avx, null, null, null },
14500 .src_constraints = .{
14501 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
14502 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
14503 },
719714504 .patterns = &.{
7198 .{ .src = .{ .to_mut_xmm, .mem } },
7199 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
7200 .{ .src = .{ .to_mut_xmm, .to_xmm } },
14505 .{ .src = .{ .to_sse, .mem } },
14506 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
14507 .{ .src = .{ .to_sse, .to_sse } },
720114508 },
7202 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
7203 .kind = .all,
7204 .inverted = switch (cc) {
7205 else => unreachable,
7206 .e => false,
7207 .ne => true,
7208 },
7209 .scalar = .word,
7210 } } }},
14509 .dst_temps = .{.{ .mut_rc_mask = .{
14510 .ref = .src0,
14511 .rc = .sse,
14512 .info = .{ .kind = .all, .scalar = .dword },
14513 } }},
721114514 .each = .{ .once = &.{
7212 .{ ._, .p_w, .cmpeq, .dst0x, .src1x, ._, ._ },
14515 .{ ._, .v_ss, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
14516 else => unreachable,
14517 .e => 0b00000,
14518 .ne => 0b00100,
14519 }) },
721314520 } },
721414521 }, .{
7215 .required_features = .{ .sse2, null, null, null },
7216 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
14522 .required_features = .{ .sse, null, null, null },
14523 .src_constraints = .{
14524 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
14525 .{ .scalar_float = .{ .of = .dword, .is = .dword } },
14526 },
721714527 .patterns = &.{
7218 .{ .src = .{ .to_mut_xmm, .mem } },
7219 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
7220 .{ .src = .{ .to_mut_xmm, .to_xmm } },
14528 .{ .src = .{ .to_mut_sse, .mem } },
14529 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
14530 .{ .src = .{ .to_mut_sse, .to_sse } },
722114531 },
7222 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
7223 .kind = .all,
7224 .inverted = switch (cc) {
7225 else => unreachable,
7226 .e => false,
7227 .ne => true,
7228 },
7229 .scalar = .dword,
7230 } } }},
14532 .dst_temps = .{.{ .ref_mask = .{
14533 .ref = .src0,
14534 .info = .{ .kind = .all, .scalar = .dword },
14535 } }},
723114536 .each = .{ .once = &.{
7232 .{ ._, .p_d, .cmpeq, .dst0x, .src1x, ._, ._ },
14537 .{ ._, ._ss, .cmp, .dst0x, .src1x, .ui(switch (cc) {
14538 else => unreachable,
14539 .e => 0b00000,
14540 .ne => 0b00100,
14541 }), ._ },
723314542 } },
723414543 }, .{
7235 .required_features = .{ .sse4_1, null, null, null },
7236 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
14544 .required_features = .{ .avx, null, null, null },
14545 .src_constraints = .{
14546 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
14547 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
14548 },
723714549 .patterns = &.{
7238 .{ .src = .{ .to_mut_xmm, .mem } },
7239 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
7240 .{ .src = .{ .to_mut_xmm, .to_xmm } },
14550 .{ .src = .{ .to_sse, .mem } },
14551 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
14552 .{ .src = .{ .to_sse, .to_sse } },
724114553 },
7242 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
7243 .kind = .all,
7244 .inverted = switch (cc) {
7245 else => unreachable,
7246 .e => false,
7247 .ne => true,
7248 },
7249 .scalar = .qword,
7250 } } }},
14554 .dst_temps = .{.{ .mut_rc_mask = .{
14555 .ref = .src0,
14556 .rc = .sse,
14557 .info = .{ .kind = .all, .scalar = .dword },
14558 } }},
725114559 .each = .{ .once = &.{
7252 .{ ._, .p_q, .cmpeq, .dst0x, .src1x, ._, ._ },
14560 .{ ._, .v_ps, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
14561 else => unreachable,
14562 .e => 0b00000,
14563 .ne => 0b00100,
14564 }) },
725314565 } },
725414566 }, .{
7255 .required_features = .{ .mmx, null, null, null },
7256 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
14567 .required_features = .{ .sse, null, null, null },
14568 .src_constraints = .{
14569 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
14570 .{ .scalar_float = .{ .of = .xword, .is = .dword } },
14571 },
725714572 .patterns = &.{
7258 .{ .src = .{ .to_mut_mm, .mem } },
7259 .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } },
7260 .{ .src = .{ .to_mut_mm, .to_mm } },
14573 .{ .src = .{ .to_mut_sse, .mem } },
14574 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
14575 .{ .src = .{ .to_mut_sse, .to_sse } },
726114576 },
7262 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
7263 .kind = .all,
7264 .inverted = switch (cc) {
7265 else => unreachable,
7266 .e => false,
7267 .ne => true,
7268 },
7269 .scalar = .byte,
7270 } } }},
14577 .dst_temps = .{.{ .ref_mask = .{
14578 .ref = .src0,
14579 .info = .{ .kind = .all, .scalar = .dword },
14580 } }},
727114581 .each = .{ .once = &.{
7272 .{ ._, .p_b, .cmpeq, .dst0q, .src1q, ._, ._ },
14582 .{ ._, ._ps, .cmp, .dst0x, .src1x, .ui(switch (cc) {
14583 else => unreachable,
14584 .e => 0b00000,
14585 .ne => 0b00100,
14586 }), ._ },
727314587 } },
727414588 }, .{
7275 .required_features = .{ .mmx, null, null, null },
7276 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
14589 .required_features = .{ .avx, null, null, null },
14590 .src_constraints = .{
14591 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
14592 .{ .scalar_float = .{ .of = .yword, .is = .dword } },
14593 },
727714594 .patterns = &.{
7278 .{ .src = .{ .to_mut_mm, .mem } },
7279 .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } },
7280 .{ .src = .{ .to_mut_mm, .to_mm } },
14595 .{ .src = .{ .to_sse, .mem } },
14596 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
14597 .{ .src = .{ .to_sse, .to_sse } },
728114598 },
7282 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
7283 .kind = .all,
7284 .inverted = switch (cc) {
7285 else => unreachable,
7286 .e => false,
7287 .ne => true,
7288 },
7289 .scalar = .word,
7290 } } }},
14599 .dst_temps = .{.{ .mut_rc_mask = .{
14600 .ref = .src0,
14601 .rc = .sse,
14602 .info = .{ .kind = .all, .scalar = .dword },
14603 } }},
729114604 .each = .{ .once = &.{
7292 .{ ._, .p_w, .cmpeq, .dst0q, .src1q, ._, ._ },
14605 .{ ._, .v_ps, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {
14606 else => unreachable,
14607 .e => 0b00000,
14608 .ne => 0b00100,
14609 }) },
729314610 } },
729414611 }, .{
7295 .required_features = .{ .mmx, null, null, null },
7296 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
14612 .required_features = .{ .avx, null, null, null },
14613 .src_constraints = .{
14614 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
14615 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
14616 },
729714617 .patterns = &.{
7298 .{ .src = .{ .to_mut_mm, .mem } },
7299 .{ .src = .{ .mem, .to_mut_mm }, .commute = .{ 0, 1 } },
7300 .{ .src = .{ .to_mut_mm, .to_mm } },
14618 .{ .src = .{ .to_sse, .mem } },
14619 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
14620 .{ .src = .{ .to_sse, .to_sse } },
730114621 },
7302 .dst_temps = .{.{ .ref_mask = .{ .ref = .src0, .info = .{
7303 .kind = .all,
7304 .inverted = switch (cc) {
7305 else => unreachable,
7306 .e => false,
7307 .ne => true,
7308 },
7309 .scalar = .dword,
7310 } } }},
14622 .dst_temps = .{.{ .mut_rc_mask = .{
14623 .ref = .src0,
14624 .rc = .sse,
14625 .info = .{ .kind = .all, .scalar = .qword },
14626 } }},
731114627 .each = .{ .once = &.{
7312 .{ ._, .p_d, .cmpeq, .dst0q, .src1q, ._, ._ },
14628 .{ ._, .v_sd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
14629 else => unreachable,
14630 .e => 0b00000,
14631 .ne => 0b00100,
14632 }) },
731314633 } },
731414634 }, .{
7315 .src_constraints = .{ .{ .bool_vec = .byte }, .{ .bool_vec = .byte } },
14635 .required_features = .{ .sse2, null, null, null },
14636 .src_constraints = .{
14637 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
14638 .{ .scalar_float = .{ .of = .qword, .is = .qword } },
14639 },
731614640 .patterns = &.{
7317 .{ .src = .{ .mut_mem, .imm8 } },
7318 .{ .src = .{ .imm8, .mut_mem }, .commute = .{ 0, 1 } },
7319 .{ .src = .{ .to_mut_gpr, .imm8 } },
7320 .{ .src = .{ .imm8, .to_mut_gpr }, .commute = .{ 0, 1 } },
7321 .{ .src = .{ .mut_mem, .to_gpr } },
7322 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
7323 .{ .src = .{ .to_mut_gpr, .mem } },
7324 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
7325 .{ .src = .{ .to_mut_gpr, .to_gpr } },
14641 .{ .src = .{ .to_mut_sse, .mem } },
14642 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
14643 .{ .src = .{ .to_mut_sse, .to_sse } },
732614644 },
7327 .dst_temps = .{.{ .ref = .src0 }},
7328 .clobbers = .{ .eflags = true },
7329 .each = .{ .once = switch (cc) {
7330 else => unreachable,
7331 .e => &.{
7332 .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ },
7333 .{ ._, ._, .not, .dst0b, ._, ._, ._ },
7334 },
7335 .ne => &.{
7336 .{ ._, ._, .xor, .dst0b, .src1b, ._, ._ },
7337 },
14645 .dst_temps = .{.{ .ref_mask = .{
14646 .ref = .src0,
14647 .info = .{ .kind = .all, .scalar = .qword },
14648 } }},
14649 .each = .{ .once = &.{
14650 .{ ._, ._sd, .cmp, .dst0x, .src1x, .ui(switch (cc) {
14651 else => unreachable,
14652 .e => 0b00000,
14653 .ne => 0b00100,
14654 }), ._ },
733814655 } },
733914656 }, .{
7340 .src_constraints = .{ .{ .bool_vec = .word }, .{ .bool_vec = .word } },
14657 .required_features = .{ .avx, null, null, null },
14658 .src_constraints = .{
14659 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
14660 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
14661 },
734114662 .patterns = &.{
7342 .{ .src = .{ .mut_mem, .imm16 } },
7343 .{ .src = .{ .imm16, .mut_mem }, .commute = .{ 0, 1 } },
7344 .{ .src = .{ .to_mut_gpr, .imm16 } },
7345 .{ .src = .{ .imm16, .to_mut_gpr }, .commute = .{ 0, 1 } },
7346 .{ .src = .{ .mut_mem, .to_gpr } },
7347 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
7348 .{ .src = .{ .to_mut_gpr, .mem } },
7349 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
7350 .{ .src = .{ .to_mut_gpr, .to_gpr } },
14663 .{ .src = .{ .to_sse, .mem } },
14664 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
14665 .{ .src = .{ .to_sse, .to_sse } },
735114666 },
7352 .dst_temps = .{.{ .ref = .src0 }},
7353 .clobbers = .{ .eflags = true },
7354 .each = .{ .once = switch (cc) {
7355 else => unreachable,
7356 .e => &.{
7357 .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ },
7358 .{ ._, ._, .not, .dst0w, ._, ._, ._ },
7359 },
7360 .ne => &.{
7361 .{ ._, ._, .xor, .dst0w, .src1w, ._, ._ },
7362 },
14667 .dst_temps = .{.{ .mut_rc_mask = .{
14668 .ref = .src0,
14669 .rc = .sse,
14670 .info = .{ .kind = .all, .scalar = .qword },
14671 } }},
14672 .each = .{ .once = &.{
14673 .{ ._, .v_pd, .cmp, .dst0x, .src0x, .src1x, .ui(switch (cc) {
14674 else => unreachable,
14675 .e => 0b00000,
14676 .ne => 0b00100,
14677 }) },
736314678 } },
736414679 }, .{
7365 .src_constraints = .{ .{ .bool_vec = .dword }, .{ .bool_vec = .dword } },
14680 .required_features = .{ .sse2, null, null, null },
14681 .src_constraints = .{
14682 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
14683 .{ .scalar_float = .{ .of = .xword, .is = .qword } },
14684 },
736614685 .patterns = &.{
7367 .{ .src = .{ .mut_mem, .imm32 } },
7368 .{ .src = .{ .imm32, .mut_mem }, .commute = .{ 0, 1 } },
7369 .{ .src = .{ .to_mut_gpr, .imm32 } },
7370 .{ .src = .{ .imm32, .to_mut_gpr }, .commute = .{ 0, 1 } },
7371 .{ .src = .{ .mut_mem, .to_gpr } },
7372 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
7373 .{ .src = .{ .to_mut_gpr, .mem } },
7374 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
7375 .{ .src = .{ .to_mut_gpr, .to_gpr } },
14686 .{ .src = .{ .to_mut_sse, .mem } },
14687 .{ .src = .{ .mem, .to_mut_sse }, .commute = .{ 0, 1 } },
14688 .{ .src = .{ .to_mut_sse, .to_sse } },
737614689 },
7377 .dst_temps = .{.{ .ref = .src0 }},
7378 .clobbers = .{ .eflags = true },
7379 .each = .{ .once = switch (cc) {
7380 else => unreachable,
7381 .e => &.{
7382 .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ },
7383 .{ ._, ._, .not, .dst0d, ._, ._, ._ },
7384 },
7385 .ne => &.{
7386 .{ ._, ._, .xor, .dst0d, .src1d, ._, ._ },
7387 },
14690 .dst_temps = .{.{ .ref_mask = .{
14691 .ref = .src0,
14692 .info = .{ .kind = .all, .scalar = .qword },
14693 } }},
14694 .each = .{ .once = &.{
14695 .{ ._, ._pd, .cmp, .dst0x, .src1x, .ui(switch (cc) {
14696 else => unreachable,
14697 .e => 0b00000,
14698 .ne => 0b00100,
14699 }), ._ },
738814700 } },
738914701 }, .{
7390 .required_features = .{ .@"64bit", null, null, null },
7391 .src_constraints = .{ .{ .bool_vec = .qword }, .{ .bool_vec = .qword } },
14702 .required_features = .{ .avx, null, null, null },
14703 .src_constraints = .{
14704 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
14705 .{ .scalar_float = .{ .of = .yword, .is = .qword } },
14706 },
739214707 .patterns = &.{
7393 .{ .src = .{ .mut_mem, .simm32 } },
7394 .{ .src = .{ .simm32, .mut_mem }, .commute = .{ 0, 1 } },
7395 .{ .src = .{ .to_mut_gpr, .simm32 } },
7396 .{ .src = .{ .simm32, .to_mut_gpr }, .commute = .{ 0, 1 } },
7397 .{ .src = .{ .mut_mem, .to_gpr } },
7398 .{ .src = .{ .to_gpr, .mut_mem }, .commute = .{ 0, 1 } },
7399 .{ .src = .{ .to_mut_gpr, .mem } },
7400 .{ .src = .{ .mem, .to_mut_gpr }, .commute = .{ 0, 1 } },
7401 .{ .src = .{ .to_mut_gpr, .to_gpr } },
14708 .{ .src = .{ .to_sse, .mem } },
14709 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
14710 .{ .src = .{ .to_sse, .to_sse } },
740214711 },
7403 .dst_temps = .{.{ .ref = .src0 }},
7404 .clobbers = .{ .eflags = true },
7405 .each = .{ .once = switch (cc) {
7406 else => unreachable,
7407 .e => &.{
7408 .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ },
7409 .{ ._, ._, .not, .dst0q, ._, ._, ._ },
7410 },
7411 .ne => &.{
7412 .{ ._, ._, .xor, .dst0q, .src1q, ._, ._ },
7413 },
14712 .dst_temps = .{.{ .mut_rc_mask = .{
14713 .ref = .src0,
14714 .rc = .sse,
14715 .info = .{ .kind = .all, .scalar = .qword },
14716 } }},
14717 .each = .{ .once = &.{
14718 .{ ._, .v_pd, .cmp, .dst0y, .src0y, .src1y, .ui(switch (cc) {
14719 else => unreachable,
14720 .e => 0b00000,
14721 .ne => 0b00100,
14722 }) },
741414723 } },
741514724 }, .{
7416 .src_constraints = .{ .any_bool_vec, .any_bool_vec },
14725 .required_features = .{ .f16c, .slow_incdec, null, null },
14726 .src_constraints = .{
14727 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
14728 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
14729 },
741714730 .patterns = &.{
741814731 .{ .src = .{ .to_mem, .to_mem } },
741914732 },
742014733 .extra_temps = .{
742114734 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
742214735 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14736 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
14737 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
14738 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
742314739 .unused,
742414740 .unused,
742514741 .unused,
......@@ -7427,1367 +14743,2028 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
742714743 },
742814744 .dst_temps = .{.mem},
742914745 .clobbers = .{ .eflags = true },
7430 .each = .{ .once = switch (cc) {
7431 else => unreachable,
7432 .e => &.{
7433 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7434 .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
7435 .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
7436 .{ ._, ._, .not, .tmp1p, ._, ._, ._ },
7437 .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
7438 .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
7439 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7440 },
7441 .ne => &.{
7442 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7443 .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
7444 .{ ._, ._, .xor, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
7445 .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
7446 .{ ._, ._, .add, .tmp0p, .sa(.tmp1, .add_size), ._, ._ },
7447 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7448 },
14746 .each = .{ .once = &.{
14747 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14748 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
14749 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
14750 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
14751 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) {
14752 else => unreachable,
14753 .e => 0b00000,
14754 .ne => 0b00100,
14755 }) },
14756 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
14757 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
14758 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
14759 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
14760 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
744914761 } },
745014762 }, .{
7451 .required_features = .{ .avx2, null, null, null },
7452 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
14763 .required_features = .{ .f16c, null, null, null },
14764 .src_constraints = .{
14765 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
14766 .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } },
14767 },
745314768 .patterns = &.{
745414769 .{ .src = .{ .to_mem, .to_mem } },
745514770 },
745614771 .extra_temps = .{
745714772 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7458 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7459 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7460 .{ .kind = .{ .rc = .sse } },
14773 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
14774 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
14775 .{ .type = .vector_8_f16, .kind = .{ .rc = .sse } },
14776 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
14777 .unused,
14778 .unused,
746114779 .unused,
746214780 .unused,
746314781 },
746414782 .dst_temps = .{.mem},
746514783 .clobbers = .{ .eflags = true },
7466 .each = .{ .once = switch (cc) {
7467 else => unreachable,
7468 .e => &.{
7469 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7470 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7471 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7472 .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
7473 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
7474 .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
7475 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
7476 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7477 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7478 },
7479 .ne => &.{
7480 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7481 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7482 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7483 .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
7484 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
7485 .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
7486 .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
7487 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
7488 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7489 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7490 },
14784 .each = .{ .once = &.{
14785 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
14786 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
14787 .{ .@"0:", .v_ps, .cvtph2, .tmp2y, .memia(.src0x, .tmp0, .add_size), ._, ._ },
14788 .{ ._, .v_ps, .cvtph2, .tmp3y, .memia(.src1x, .tmp0, .add_size), ._, ._ },
14789 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .tmp3y, .ui(switch (cc) {
14790 else => unreachable,
14791 .e => 0b00000,
14792 .ne => 0b00100,
14793 }) },
14794 .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ },
14795 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
14796 .{ ._, ._c, .in, .tmp1p, ._, ._, ._ },
14797 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
14798 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
749114799 } },
749214800 }, .{
7493 .required_features = .{ .avx2, null, null, null },
7494 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
14801 .required_features = .{ .avx, .slow_incdec, null, null },
14802 .dst_constraints = .{.{ .bool_vec = .dword }},
14803 .src_constraints = .{
14804 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14805 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14806 },
749514807 .patterns = &.{
749614808 .{ .src = .{ .to_mem, .to_mem } },
749714809 },
14810 .call_frame = .{ .alignment = .@"16" },
749814811 .extra_temps = .{
7499 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
750014812 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7501 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
7502 .{ .kind = .{ .rc = .sse } },
14813 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
14814 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
14815 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
14816 else => unreachable,
14817 .e => "__eqhf2",
14818 .ne => "__nehf2",
14819 } } } },
14820 .{ .type = .i32, .kind = .{ .reg = .eax } },
14821 .{ .type = .u8, .kind = .{ .reg = .cl } },
14822 .{ .type = .u32, .kind = .{ .reg = .edx } },
750314823 .unused,
750414824 .unused,
750514825 },
7506 .dst_temps = .{.mem},
7507 .clobbers = .{ .eflags = true },
7508 .each = .{ .once = switch (cc) {
7509 else => unreachable,
7510 .e => &.{
7511 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7512 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7513 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7514 .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
7515 .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
7516 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
7517 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
7518 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
7519 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7520 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7521 },
7522 .ne => &.{
7523 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7524 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7525 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7526 .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
7527 .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
7528 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
7529 .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
7530 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
7531 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
7532 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7533 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7534 },
14826 .dst_temps = .{.{ .rc = .general_purpose }},
14827 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
14828 .each = .{ .once = &.{
14829 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14830 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
14831 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
14832 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
14833 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
14834 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
14835 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
14836 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14837 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
14838 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
14839 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
14840 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
14841 .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
14842 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
14843 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
753514844 } },
753614845 }, .{
7537 .required_features = .{ .avx2, null, null, null },
7538 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
14846 .required_features = .{ .avx, null, null, null },
14847 .dst_constraints = .{.{ .bool_vec = .dword }},
14848 .src_constraints = .{
14849 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14850 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14851 },
753914852 .patterns = &.{
754014853 .{ .src = .{ .to_mem, .to_mem } },
754114854 },
14855 .call_frame = .{ .alignment = .@"16" },
754214856 .extra_temps = .{
7543 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
754414857 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7545 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7546 .{ .kind = .{ .rc = .sse } },
14858 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
14859 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
14860 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
14861 else => unreachable,
14862 .e => "__eqhf2",
14863 .ne => "__nehf2",
14864 } } } },
14865 .{ .type = .i32, .kind = .{ .reg = .eax } },
14866 .{ .type = .u8, .kind = .{ .reg = .cl } },
14867 .{ .type = .u32, .kind = .{ .reg = .edx } },
754714868 .unused,
754814869 .unused,
754914870 },
7550 .dst_temps = .{.mem},
7551 .clobbers = .{ .eflags = true },
7552 .each = .{ .once = switch (cc) {
7553 else => unreachable,
7554 .e => &.{
7555 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7556 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7557 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7558 .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
7559 .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
7560 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
7561 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
7562 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7563 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7564 },
7565 .ne => &.{
7566 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7567 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7568 .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7569 .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
7570 .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
7571 .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
7572 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
7573 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
7574 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
7575 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7576 },
14871 .dst_temps = .{.{ .rc = .general_purpose }},
14872 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
14873 .each = .{ .once = &.{
14874 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14875 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
14876 .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
14877 .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
14878 .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
14879 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
14880 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
14881 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14882 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
14883 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
14884 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
14885 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
14886 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
14887 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
14888 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
757714889 } },
757814890 }, .{
7579 .required_features = .{ .avx2, null, null, null },
7580 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
14891 .required_features = .{ .sse2, .slow_incdec, null, null },
14892 .dst_constraints = .{.{ .bool_vec = .dword }},
14893 .src_constraints = .{
14894 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14895 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14896 },
758114897 .patterns = &.{
758214898 .{ .src = .{ .to_mem, .to_mem } },
758314899 },
14900 .call_frame = .{ .alignment = .@"16" },
758414901 .extra_temps = .{
7585 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7586 .{ .type = .u32, .kind = .{ .reg = .rcx } },
7587 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7588 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7589 .{ .kind = .{ .rc = .sse } },
14902 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14903 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
14904 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
14905 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
14906 else => unreachable,
14907 .e => "__eqhf2",
14908 .ne => "__nehf2",
14909 } } } },
14910 .{ .type = .i32, .kind = .{ .reg = .eax } },
14911 .{ .type = .u8, .kind = .{ .reg = .cl } },
14912 .{ .type = .u32, .kind = .{ .reg = .edx } },
14913 .unused,
759014914 .unused,
759114915 },
7592 .dst_temps = .{.mem},
7593 .clobbers = .{ .eflags = true },
7594 .each = .{ .once = switch (cc) {
7595 else => unreachable,
7596 .e => &.{
7597 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7598 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7599 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7600 .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7601 .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
7602 .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
7603 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
7604 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
7605 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
7606 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7607 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
7608 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7609 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7610 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
7611 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7612 .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
7613 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7614 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7615 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
7616 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7617 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7618 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
7619 },
7620 .ne => &.{
7621 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7622 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7623 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7624 .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
7625 .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
7626 .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
7627 .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
7628 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
7629 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
7630 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
7631 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7632 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
7633 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7634 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7635 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
7636 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7637 .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
7638 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7639 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7640 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
7641 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7642 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7643 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
7644 },
14916 .dst_temps = .{.{ .rc = .general_purpose }},
14917 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
14918 .each = .{ .once = &.{
14919 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14920 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
14921 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
14922 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
14923 .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
14924 .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
14925 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
14926 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
14927 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14928 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
14929 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
14930 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
14931 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
14932 .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
14933 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
14934 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
764514935 } },
764614936 }, .{
7647 .required_features = .{ .avx, null, null, null },
7648 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
14937 .required_features = .{ .sse2, null, null, null },
14938 .dst_constraints = .{.{ .bool_vec = .dword }},
14939 .src_constraints = .{
14940 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14941 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14942 },
764914943 .patterns = &.{
765014944 .{ .src = .{ .to_mem, .to_mem } },
765114945 },
14946 .call_frame = .{ .alignment = .@"16" },
765214947 .extra_temps = .{
7653 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
765414948 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7655 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
7656 .{ .kind = .{ .rc = .sse } },
14949 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
14950 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
14951 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
14952 else => unreachable,
14953 .e => "__eqhf2",
14954 .ne => "__nehf2",
14955 } } } },
14956 .{ .type = .i32, .kind = .{ .reg = .eax } },
14957 .{ .type = .u8, .kind = .{ .reg = .cl } },
14958 .{ .type = .u32, .kind = .{ .reg = .edx } },
14959 .unused,
14960 .unused,
14961 },
14962 .dst_temps = .{.{ .rc = .general_purpose }},
14963 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
14964 .each = .{ .once = &.{
14965 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
14966 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
14967 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
14968 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
14969 .{ ._, .p_w, .insr, .tmp1x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
14970 .{ ._, .p_w, .insr, .tmp2x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
14971 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
14972 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
14973 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
14974 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
14975 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
14976 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
14977 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
14978 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
14979 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
14980 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
14981 } },
14982 }, .{
14983 .required_features = .{ .sse, .slow_incdec, null, null },
14984 .dst_constraints = .{.{ .bool_vec = .dword }},
14985 .src_constraints = .{
14986 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14987 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
14988 },
14989 .patterns = &.{
14990 .{ .src = .{ .to_mem, .to_mem } },
14991 },
14992 .call_frame = .{ .alignment = .@"16" },
14993 .extra_temps = .{
14994 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
14995 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
14996 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
14997 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
14998 else => unreachable,
14999 .e => "__eqhf2",
15000 .ne => "__nehf2",
15001 } } } },
15002 .{ .type = .i32, .kind = .{ .reg = .eax } },
15003 .{ .type = .u8, .kind = .{ .reg = .cl } },
15004 .{ .type = .u32, .kind = .{ .reg = .edx } },
15005 .{ .type = .vector_8_f16, .kind = .mem },
15006 .unused,
15007 },
15008 .dst_temps = .{.{ .rc = .general_purpose }},
15009 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
15010 .each = .{ .once = &.{
15011 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
15012 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15013 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
15014 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15015 .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ },
15016 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
15017 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15018 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ },
15019 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
15020 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
15021 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
15022 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
15023 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15024 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
15025 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
15026 .{ ._, ._, .add, .tmp0d, .si(1), ._, ._ },
15027 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
15028 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
15029 } },
15030 }, .{
15031 .required_features = .{ .sse, null, null, null },
15032 .dst_constraints = .{.{ .bool_vec = .dword }},
15033 .src_constraints = .{
15034 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15035 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15036 },
15037 .patterns = &.{
15038 .{ .src = .{ .to_mem, .to_mem } },
15039 },
15040 .call_frame = .{ .alignment = .@"16" },
15041 .extra_temps = .{
15042 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15043 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
15044 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
15045 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
15046 else => unreachable,
15047 .e => "__eqhf2",
15048 .ne => "__nehf2",
15049 } } } },
15050 .{ .type = .i32, .kind = .{ .reg = .eax } },
15051 .{ .type = .u8, .kind = .{ .reg = .cl } },
15052 .{ .type = .u32, .kind = .{ .reg = .edx } },
15053 .{ .type = .vector_8_f16, .kind = .mem },
765715054 .unused,
15055 },
15056 .dst_temps = .{.{ .rc = .general_purpose }},
15057 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
15058 .each = .{ .once = &.{
15059 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
15060 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15061 .{ .@"0:", ._, .movzx, .tmp4d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
15062 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15063 .{ ._, ._ps, .mova, .tmp1x, .mem(.tmp7x), ._, ._ },
15064 .{ ._, ._, .movzx, .tmp4d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
15065 .{ ._, ._, .mov, .mem(.tmp7d), .tmp4d, ._, ._ },
15066 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp7x), ._, ._ },
15067 .{ ._, ._, .call, .tmp3d, ._, ._, ._ },
15068 .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
15069 .{ ._, ._, .@"test", .tmp4d, .tmp4d, ._, ._ },
15070 .{ ._, .fromCondition(cc), .set, .tmp6b, ._, ._, ._ },
15071 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15072 .{ ._, ._l, .sh, .tmp6d, .tmp5b, ._, ._ },
15073 .{ ._, ._, .@"or", .dst0d, .tmp6d, ._, ._ },
15074 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
15075 .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
15076 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
15077 } },
15078 }, .{
15079 .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
15080 .src_constraints = .{
15081 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15082 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15083 },
15084 .patterns = &.{
15085 .{ .src = .{ .to_mem, .to_mem } },
15086 },
15087 .call_frame = .{ .alignment = .@"16" },
15088 .extra_temps = .{
15089 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15090 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
15091 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
15092 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
15093 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
15094 else => unreachable,
15095 .e => "__eqhf2",
15096 .ne => "__nehf2",
15097 } } } },
15098 .{ .type = .i32, .kind = .{ .reg = .eax } },
15099 .{ .type = .u8, .kind = .{ .reg = .cl } },
15100 .{ .type = .u64, .kind = .{ .reg = .rdx } },
765815101 .unused,
765915102 },
766015103 .dst_temps = .{.mem},
7661 .clobbers = .{ .eflags = true },
7662 .each = .{ .once = switch (cc) {
7663 else => unreachable,
7664 .e => &.{
7665 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7666 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7667 .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7668 .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
7669 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
7670 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
7671 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
7672 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7673 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7674 },
7675 .ne => &.{
7676 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7677 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7678 .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7679 .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
7680 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
7681 .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
7682 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
7683 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
7684 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7685 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7686 },
15104 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
15105 .each = .{ .once = &.{
15106 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15107 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15108 .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
15109 .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
15110 .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
15111 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15112 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15113 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15114 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
15115 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15116 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15117 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
15118 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ },
15119 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15120 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15121 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15122 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
15123 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
15124 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15125 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
15126 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
15127 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15128 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15129 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15130 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
15131 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
768715132 } },
768815133 }, .{
7689 .required_features = .{ .avx, null, null, null },
7690 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
15134 .required_features = .{ .@"64bit", .avx, null, null },
15135 .src_constraints = .{
15136 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15137 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15138 },
769115139 .patterns = &.{
769215140 .{ .src = .{ .to_mem, .to_mem } },
769315141 },
15142 .call_frame = .{ .alignment = .@"16" },
769415143 .extra_temps = .{
7695 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
769615144 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7697 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7698 .{ .kind = .{ .rc = .sse } },
15145 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
15146 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
15147 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
15148 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
15149 else => unreachable,
15150 .e => "__eqhf2",
15151 .ne => "__nehf2",
15152 } } } },
15153 .{ .type = .i32, .kind = .{ .reg = .eax } },
15154 .{ .type = .u8, .kind = .{ .reg = .cl } },
15155 .{ .type = .u64, .kind = .{ .reg = .rdx } },
769915156 .unused,
15157 },
15158 .dst_temps = .{.mem},
15159 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
15160 .each = .{ .once = &.{
15161 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15162 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15163 .{ .@"0:", .vp_, .xor, .tmp3x, .tmp3x, .tmp3x, ._ },
15164 .{ ._, .vp_w, .insr, .tmp2x, .tmp3x, .memsi(.src0w, .@"2", .tmp0), .ui(0) },
15165 .{ ._, .vp_w, .insr, .tmp3x, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0) },
15166 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15167 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15168 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15169 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
15170 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15171 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15172 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
15173 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
15174 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15175 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15176 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15177 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
15178 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
15179 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15180 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
15181 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
15182 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15183 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15184 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15185 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
15186 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
15187 } },
15188 }, .{
15189 .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
15190 .src_constraints = .{
15191 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15192 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15193 },
15194 .patterns = &.{
15195 .{ .src = .{ .to_mem, .to_mem } },
15196 },
15197 .call_frame = .{ .alignment = .@"16" },
15198 .extra_temps = .{
15199 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15200 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
15201 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
15202 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
15203 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
15204 else => unreachable,
15205 .e => "__eqhf2",
15206 .ne => "__nehf2",
15207 } } } },
15208 .{ .type = .i32, .kind = .{ .reg = .eax } },
15209 .{ .type = .u8, .kind = .{ .reg = .cl } },
15210 .{ .type = .u64, .kind = .{ .reg = .rdx } },
770015211 .unused,
770115212 },
770215213 .dst_temps = .{.mem},
7703 .clobbers = .{ .eflags = true },
7704 .each = .{ .once = switch (cc) {
7705 else => unreachable,
7706 .e => &.{
7707 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7708 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7709 .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7710 .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
7711 .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
7712 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
7713 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
7714 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
7715 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7716 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7717 },
7718 .ne => &.{
7719 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7720 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7721 .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7722 .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
7723 .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
7724 .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
7725 .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
7726 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
7727 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
7728 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7729 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7730 },
15214 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
15215 .each = .{ .once = &.{
15216 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15217 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15218 .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
15219 .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
15220 .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
15221 .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
15222 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15223 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15224 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15225 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
15226 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15227 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15228 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
15229 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ },
15230 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15231 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15232 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15233 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
15234 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
15235 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15236 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
15237 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
15238 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15239 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15240 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15241 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
15242 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
773115243 } },
773215244 }, .{
7733 .required_features = .{ .avx, null, null, null },
7734 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
15245 .required_features = .{ .@"64bit", .sse2, null, null },
15246 .src_constraints = .{
15247 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15248 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15249 },
773515250 .patterns = &.{
773615251 .{ .src = .{ .to_mem, .to_mem } },
773715252 },
15253 .call_frame = .{ .alignment = .@"16" },
773815254 .extra_temps = .{
7739 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7740 .{ .type = .u32, .kind = .{ .reg = .rcx } },
7741 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7742 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7743 .{ .kind = .{ .rc = .sse } },
15255 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15256 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
15257 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
15258 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
15259 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
15260 else => unreachable,
15261 .e => "__eqhf2",
15262 .ne => "__nehf2",
15263 } } } },
15264 .{ .type = .i32, .kind = .{ .reg = .eax } },
15265 .{ .type = .u8, .kind = .{ .reg = .cl } },
15266 .{ .type = .u64, .kind = .{ .reg = .rdx } },
774415267 .unused,
774515268 },
774615269 .dst_temps = .{.mem},
7747 .clobbers = .{ .eflags = true },
7748 .each = .{ .once = switch (cc) {
7749 else => unreachable,
7750 .e => &.{
7751 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7752 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7753 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7754 .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7755 .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
7756 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
7757 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
7758 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
7759 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
7760 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7761 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
7762 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7763 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7764 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
7765 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7766 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
7767 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7768 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7769 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
7770 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7771 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7772 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
7773 },
7774 .ne => &.{
7775 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7776 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7777 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7778 .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7779 .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
7780 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
7781 .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
7782 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
7783 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
7784 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
7785 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7786 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
7787 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7788 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7789 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
7790 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7791 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
7792 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7793 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7794 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
7795 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7796 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7797 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
7798 },
15270 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
15271 .each = .{ .once = &.{
15272 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15273 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15274 .{ .@"0:", .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
15275 .{ ._, .p_w, .insr, .tmp2x, .memsi(.src0w, .@"2", .tmp0), .ui(0), ._ },
15276 .{ ._, .p_, .xor, .tmp3x, .tmp3x, ._, ._ },
15277 .{ ._, .p_w, .insr, .tmp3x, .memsi(.src1w, .@"2", .tmp0), .ui(0), ._ },
15278 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15279 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15280 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15281 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
15282 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15283 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15284 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
15285 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
15286 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15287 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15288 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15289 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
15290 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
15291 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15292 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
15293 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
15294 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15295 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15296 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15297 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
15298 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
15299 } },
15300 }, .{
15301 .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
15302 .src_constraints = .{
15303 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15304 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15305 },
15306 .patterns = &.{
15307 .{ .src = .{ .to_mem, .to_mem } },
15308 },
15309 .call_frame = .{ .alignment = .@"16" },
15310 .extra_temps = .{
15311 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15312 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
15313 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
15314 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
15315 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
15316 else => unreachable,
15317 .e => "__eqhf2",
15318 .ne => "__nehf2",
15319 } } } },
15320 .{ .type = .i32, .kind = .{ .reg = .eax } },
15321 .{ .type = .u8, .kind = .{ .reg = .cl } },
15322 .{ .type = .u64, .kind = .{ .reg = .rdx } },
15323 .{ .type = .vector_8_f16, .kind = .mem },
15324 },
15325 .dst_temps = .{.mem},
15326 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
15327 .each = .{ .once = &.{
15328 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15329 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15330 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
15331 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15332 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ },
15333 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
15334 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15335 .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ },
15336 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15337 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15338 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15339 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
15340 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15341 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15342 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
15343 .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ },
15344 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15345 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15346 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15347 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
15348 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
15349 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15350 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
15351 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
15352 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15353 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15354 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15355 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
15356 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
779915357 } },
780015358 }, .{
7801 .required_features = .{ .avx, null, null, null },
7802 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
15359 .required_features = .{ .@"64bit", .sse, null, null },
15360 .src_constraints = .{
15361 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15362 .{ .multiple_scalar_float = .{ .of = .word, .is = .word } },
15363 },
15364 .patterns = &.{
15365 .{ .src = .{ .to_mem, .to_mem } },
15366 },
15367 .call_frame = .{ .alignment = .@"16" },
15368 .extra_temps = .{
15369 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15370 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
15371 .{ .type = .f16, .kind = .{ .reg = .xmm0 } },
15372 .{ .type = .f16, .kind = .{ .reg = .xmm1 } },
15373 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
15374 else => unreachable,
15375 .e => "__eqhf2",
15376 .ne => "__nehf2",
15377 } } } },
15378 .{ .type = .i32, .kind = .{ .reg = .eax } },
15379 .{ .type = .u8, .kind = .{ .reg = .cl } },
15380 .{ .type = .u64, .kind = .{ .reg = .rdx } },
15381 .{ .type = .vector_8_f16, .kind = .mem },
15382 },
15383 .dst_temps = .{.mem},
15384 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
15385 .each = .{ .once = &.{
15386 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
15387 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15388 .{ .@"0:", ._, .movzx, .tmp5d, .memsi(.src0w, .@"2", .tmp0), ._, ._ },
15389 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15390 .{ ._, ._ps, .mova, .tmp2x, .mem(.tmp8x), ._, ._ },
15391 .{ ._, ._, .movzx, .tmp5d, .memsi(.src1w, .@"2", .tmp0), ._, ._ },
15392 .{ ._, ._, .mov, .mem(.tmp8d), .tmp5d, ._, ._ },
15393 .{ ._, ._ps, .mova, .tmp3x, .mem(.tmp8x), ._, ._ },
15394 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
15395 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
15396 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
15397 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
15398 .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ },
15399 .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ },
15400 .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ },
15401 .{ ._, ._c, .in, .tmp0d, ._, ._, ._ },
15402 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15403 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15404 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15405 .{ ._, ._r, .sh, .tmp5d, .ui(3), ._, ._ },
15406 .{ ._, ._, .mov, .memid(.dst0q, .tmp5, -8), .tmp1q, ._, ._ },
15407 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15408 .{ .@"1:", ._, .cmp, .tmp0d, .sa(.src0, .add_len), ._, ._ },
15409 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
15410 .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ },
15411 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15412 .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
15413 .{ ._, ._r, .sh, .tmp5d, .si(9), ._, ._ },
15414 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp5), .tmp1q, ._, ._ },
15415 } },
15416 }, .{
15417 .required_features = .{ .avx, .slow_incdec, null, null },
15418 .src_constraints = .{
15419 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
15420 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
15421 },
780315422 .patterns = &.{
780415423 .{ .src = .{ .to_mem, .to_mem } },
780515424 },
780615425 .extra_temps = .{
780715426 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7808 .{ .type = .u32, .kind = .{ .reg = .rcx } },
7809 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
15427 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
15428 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
781015429 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7811 .{ .kind = .{ .rc = .sse } },
15430 .unused,
15431 .unused,
15432 .unused,
15433 .unused,
781215434 .unused,
781315435 },
781415436 .dst_temps = .{.mem},
781515437 .clobbers = .{ .eflags = true },
7816 .each = .{ .once = switch (cc) {
7817 else => unreachable,
7818 .e => &.{
7819 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7820 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7821 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7822 .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7823 .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
7824 .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
7825 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
7826 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
7827 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
7828 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7829 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
7830 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7831 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7832 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
7833 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7834 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
7835 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7836 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7837 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
7838 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7839 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7840 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
7841 },
7842 .ne => &.{
7843 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7844 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7845 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7846 .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7847 .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
7848 .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
7849 .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ },
7850 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
7851 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
7852 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
7853 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7854 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
7855 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7856 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7857 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
7858 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7859 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
7860 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7861 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7862 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
7863 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7864 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7865 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
7866 },
15438 .each = .{ .once = &.{
15439 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15440 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15441 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15442 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
15443 else => unreachable,
15444 .e => 0b00000,
15445 .ne => 0b00100,
15446 }) },
15447 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
15448 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
15449 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
15450 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
15451 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
786715452 } },
786815453 }, .{
7869 .required_features = .{ .sse2, null, null, null },
7870 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
15454 .required_features = .{ .avx, null, null, null },
15455 .src_constraints = .{
15456 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
15457 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
15458 },
787115459 .patterns = &.{
787215460 .{ .src = .{ .to_mem, .to_mem } },
787315461 },
787415462 .extra_temps = .{
787515463 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7876 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
7877 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
7878 .{ .kind = .{ .rc = .sse } },
15464 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
15465 .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } },
15466 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
15467 .unused,
15468 .unused,
15469 .unused,
787915470 .unused,
788015471 .unused,
788115472 },
788215473 .dst_temps = .{.mem},
788315474 .clobbers = .{ .eflags = true },
7884 .each = .{ .once = switch (cc) {
7885 else => unreachable,
7886 .e => &.{
7887 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7888 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7889 .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7890 .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7891 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
7892 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
7893 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
7894 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7895 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7896 },
7897 .ne => &.{
7898 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7899 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7900 .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7901 .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7902 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
7903 .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
7904 .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
7905 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
7906 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7907 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7908 },
15475 .each = .{ .once = &.{
15476 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15477 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15478 .{ .@"0:", .v_ps, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15479 .{ ._, .v_ps, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
15480 else => unreachable,
15481 .e => 0b00000,
15482 .ne => 0b00100,
15483 }) },
15484 .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ },
15485 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
15486 .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
15487 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
15488 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
790915489 } },
791015490 }, .{
791115491 .required_features = .{ .sse2, null, null, null },
7912 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
15492 .src_constraints = .{
15493 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
15494 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
15495 },
791315496 .patterns = &.{
791415497 .{ .src = .{ .to_mem, .to_mem } },
791515498 },
791615499 .extra_temps = .{
791715500 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7918 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15501 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
15502 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
15503 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
791915504 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7920 .{ .kind = .{ .rc = .sse } },
15505 .unused,
15506 .unused,
792115507 .unused,
792215508 .unused,
792315509 },
792415510 .dst_temps = .{.mem},
792515511 .clobbers = .{ .eflags = true },
7926 .each = .{ .once = switch (cc) {
7927 else => unreachable,
7928 .e => &.{
7929 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7930 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7931 .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7932 .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7933 .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
7934 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
7935 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
7936 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
7937 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7938 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7939 },
7940 .ne => &.{
7941 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7942 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7943 .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7944 .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7945 .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
7946 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
7947 .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
7948 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
7949 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
7950 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
7951 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7952 },
15512 .each = .{ .once = &.{
15513 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15514 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15515 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15516 .{ ._, ._ps, .mova, .tmp3x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
15517 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
15518 else => unreachable,
15519 .e => 0b00000,
15520 .ne => 0b00100,
15521 }), ._ },
15522 .{ ._, ._ps, .cmp, .tmp3x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) {
15523 else => unreachable,
15524 .e => 0b00000,
15525 .ne => 0b00100,
15526 }), ._ },
15527 .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ },
15528 .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ },
15529 .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ },
15530 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
15531 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
15532 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
15533 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
795315534 } },
795415535 }, .{
7955 .required_features = .{ .sse2, null, null, null },
7956 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
15536 .required_features = .{ .sse, null, null, null },
15537 .src_constraints = .{
15538 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
15539 .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } },
15540 },
795715541 .patterns = &.{
795815542 .{ .src = .{ .to_mem, .to_mem } },
795915543 },
796015544 .extra_temps = .{
796115545 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
7962 .{ .type = .u32, .kind = .{ .reg = .rcx } },
15546 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
15547 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
796315548 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
796415549 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
7965 .{ .kind = .{ .rc = .sse } },
15550 .unused,
15551 .unused,
15552 .unused,
796615553 .unused,
796715554 },
796815555 .dst_temps = .{.mem},
796915556 .clobbers = .{ .eflags = true },
7970 .each = .{ .once = switch (cc) {
7971 else => unreachable,
7972 .e => &.{
7973 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7974 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7975 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7976 .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
7977 .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
7978 .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
7979 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
7980 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
7981 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
7982 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7983 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
7984 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7985 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7986 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
7987 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
7988 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
7989 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
7990 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
7991 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
7992 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
7993 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
7994 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
7995 },
7996 .ne => &.{
7997 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
7998 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
7999 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8000 .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8001 .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8002 .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
8003 .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ },
8004 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
8005 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
8006 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
8007 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8008 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8009 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
8010 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
8011 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
8012 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8013 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
8014 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8015 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8016 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8017 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
8018 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
8019 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
8020 },
15557 .each = .{ .once = &.{
15558 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15559 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15560 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15561 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
15562 else => unreachable,
15563 .e => 0b00000,
15564 .ne => 0b00100,
15565 }), ._ },
15566 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
15567 .{ ._, ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, 16), ._, ._ },
15568 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, 16), .ui(switch (cc) {
15569 else => unreachable,
15570 .e => 0b00000,
15571 .ne => 0b00100,
15572 }), ._ },
15573 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
15574 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
15575 .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
15576 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
15577 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
15578 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
15579 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
802115580 } },
802215581 }, .{
8023 .required_features = .{ .sse4_1, null, null, null },
8024 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
15582 .required_features = .{ .sse, null, null, null },
15583 .src_constraints = .{
15584 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
15585 .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } },
15586 },
802515587 .patterns = &.{
802615588 .{ .src = .{ .to_mem, .to_mem } },
802715589 },
802815590 .extra_temps = .{
802915591 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8030 .{ .type = .u32, .kind = .{ .reg = .rcx } },
15592 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
15593 .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } },
803115594 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
803215595 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8033 .{ .kind = .{ .rc = .sse } },
15596 .unused,
15597 .unused,
15598 .unused,
803415599 .unused,
803515600 },
803615601 .dst_temps = .{.mem},
803715602 .clobbers = .{ .eflags = true },
8038 .each = .{ .once = switch (cc) {
8039 else => unreachable,
8040 .e => &.{
8041 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8042 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
8043 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8044 .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8045 .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8046 .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
8047 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
8048 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
8049 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
8050 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8051 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8052 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
8053 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
8054 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
8055 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8056 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
8057 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8058 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8059 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8060 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
8061 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
8062 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
8063 },
8064 .ne => &.{
8065 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8066 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
8067 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8068 .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
8069 .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
8070 .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
8071 .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ },
8072 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
8073 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
8074 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
8075 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8076 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8077 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
8078 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
8079 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
8080 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8081 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
8082 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8083 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8084 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8085 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
8086 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
8087 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
8088 },
15603 .each = .{ .once = &.{
15604 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15605 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15606 .{ ._, ._mp, .j, .@"1f", ._, ._, ._ },
15607 .{ .@"0:", ._ps, .mova, .tmp2x, .memiad(.src0x, .tmp0, .add_size, -16), ._, ._ },
15608 .{ ._, ._ps, .cmp, .tmp2x, .memiad(.src1x, .tmp0, .add_size, -16), .ui(switch (cc) {
15609 else => unreachable,
15610 .e => 0b00000,
15611 .ne => 0b00100,
15612 }), ._ },
15613 .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ },
15614 .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ },
15615 .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ },
15616 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
15617 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
15618 .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15619 .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
15620 else => unreachable,
15621 .e => 0b00000,
15622 .ne => 0b00100,
15623 }), ._ },
15624 .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ },
15625 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
15626 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
15627 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ },
808915628 } },
809015629 }, .{
8091 .required_features = .{ .sse, .mmx, null, null },
8092 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
15630 .required_features = .{ .avx, .slow_incdec, null, null },
15631 .src_constraints = .{
15632 .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
15633 .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
15634 },
809315635 .patterns = &.{
809415636 .{ .src = .{ .to_mem, .to_mem } },
809515637 },
809615638 .extra_temps = .{
809715639 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8098 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15640 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
15641 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
15642 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
809915643 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8100 .{ .kind = .{ .rc = .mmx } },
15644 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
15645 .unused,
810115646 .unused,
810215647 .unused,
810315648 },
810415649 .dst_temps = .{.mem},
810515650 .clobbers = .{ .eflags = true },
8106 .each = .{ .once = switch (cc) {
8107 else => unreachable,
8108 .e => &.{
8109 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8110 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
8111 .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8112 .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8113 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
8114 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
8115 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
8116 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8117 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8118 },
8119 .ne => &.{
8120 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8121 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
8122 .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8123 .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8124 .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
8125 .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
8126 .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
8127 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
8128 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
8129 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8130 },
15651 .each = .{ .once = &.{
15652 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15653 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15654 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15655 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
15656 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
15657 else => unreachable,
15658 .e => 0b00000,
15659 .ne => 0b00100,
15660 }) },
15661 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) {
15662 else => unreachable,
15663 .e => 0b00000,
15664 .ne => 0b00100,
15665 }) },
15666 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
15667 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
15668 .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
15669 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
15670 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
15671 .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ },
15672 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
15673 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
813115674 } },
813215675 }, .{
8133 .required_features = .{ .sse, .mmx, null, null },
8134 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
15676 .required_features = .{ .avx, null, null, null },
15677 .src_constraints = .{
15678 .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
15679 .{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } },
15680 },
813515681 .patterns = &.{
813615682 .{ .src = .{ .to_mem, .to_mem } },
813715683 },
813815684 .extra_temps = .{
813915685 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8140 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15686 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
15687 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
15688 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
814115689 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8142 .{ .kind = .{ .rc = .mmx } },
814315690 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8144 .{ .kind = .{ .rc = .mmx } },
15691 .unused,
15692 .unused,
15693 .unused,
814515694 },
814615695 .dst_temps = .{.mem},
814715696 .clobbers = .{ .eflags = true },
8148 .each = .{ .once = switch (cc) {
8149 else => unreachable,
8150 .e => &.{
8151 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8152 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
8153 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8154 .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
8155 .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8156 .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8157 .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
8158 .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
8159 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
8160 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
8161 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
8162 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8163 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8164 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
8165 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
8166 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
8167 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8168 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
8169 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8170 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8171 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8172 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
8173 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
8174 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
8175 },
8176 .ne => &.{
8177 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8178 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
8179 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8180 .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
8181 .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8182 .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8183 .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
8184 .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
8185 .{ ._, ._, .xor, .tmp4b, .si(0b1111), ._, ._ },
8186 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
8187 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
8188 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
8189 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8190 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8191 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
8192 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
8193 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
8194 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8195 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
8196 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8197 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8198 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8199 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
8200 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
8201 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
8202 },
15697 .each = .{ .once = &.{
15698 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15699 .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ },
15700 .{ .@"0:", .v_pd, .mova, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15701 .{ ._, .v_pd, .mova, .tmp3y, .memiad(.src0y, .tmp0, .add_size, 32), ._, ._ },
15702 .{ ._, .v_pd, .cmp, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
15703 else => unreachable,
15704 .e => 0b00000,
15705 .ne => 0b00100,
15706 }) },
15707 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memiad(.src1y, .tmp0, .add_size, 32), .ui(switch (cc) {
15708 else => unreachable,
15709 .e => 0b00000,
15710 .ne => 0b00100,
15711 }) },
15712 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp2y, ._, ._ },
15713 .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ },
15714 .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
15715 .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ },
15716 .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ },
15717 .{ ._, ._c, .in, .tmp1q, ._, ._, ._ },
15718 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
15719 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
820315720 } },
820415721 }, .{
8205 .required_features = .{ .sse, .mmx, null, null },
8206 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
15722 .required_features = .{ .avx, null, null, null },
15723 .src_constraints = .{
15724 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
15725 .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } },
15726 },
820715727 .patterns = &.{
820815728 .{ .src = .{ .to_mem, .to_mem } },
820915729 },
821015730 .extra_temps = .{
821115731 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
821215732 .{ .type = .u32, .kind = .{ .reg = .rcx } },
15733 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15734 .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } },
821315735 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8214 .{ .kind = .{ .rc = .mmx } },
8215 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8216 .{ .kind = .{ .rc = .mmx } },
15736 .unused,
15737 .unused,
15738 .unused,
15739 .unused,
821715740 },
821815741 .dst_temps = .{.mem},
821915742 .clobbers = .{ .eflags = true },
8220 .each = .{ .once = switch (cc) {
8221 else => unreachable,
8222 .e => &.{
8223 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8224 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
8225 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8226 .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
8227 .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8228 .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8229 .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
8230 .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
8231 .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
8232 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
8233 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
8234 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
8235 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8236 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8237 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
8238 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
8239 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
8240 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8241 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
8242 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8243 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8244 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8245 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
8246 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
8247 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
8248 },
8249 .ne => &.{
8250 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8251 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
8252 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8253 .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
8254 .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8255 .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8256 .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
8257 .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
8258 .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
8259 .{ ._, ._, .xor, .tmp4b, .si(0b11), ._, ._ },
8260 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
8261 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
8262 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
8263 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8264 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8265 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
8266 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
8267 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
8268 .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
8269 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
8270 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8271 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
8272 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8273 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
8274 .{ ._, ._r, .sh, .tmp4d, .si(3), ._, ._ },
8275 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
8276 },
15743 .each = .{ .once = &.{
15744 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15745 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15746 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15747 .{ .@"0:", .v_pd, .mova, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
15748 .{ ._, .v_pd, .cmp, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), .ui(switch (cc) {
15749 else => unreachable,
15750 .e => 0b00000,
15751 .ne => 0b00100,
15752 }) },
15753 .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ },
15754 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
15755 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
15756 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
15757 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15758 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15759 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
15760 .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
15761 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
15762 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15763 .{ .@"1:", ._, .add, .tmp0p, .si(32), ._, ._ },
15764 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
15765 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15766 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15767 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
15768 .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
15769 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
827715770 } },
827815771 }, .{
8279 .dst_constraints = .{.{ .bool_vec = .byte }},
8280 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
15772 .required_features = .{ .sse2, null, null, null },
15773 .src_constraints = .{
15774 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
15775 .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } },
15776 },
15777 .patterns = &.{
15778 .{ .src = .{ .to_mem, .to_mem } },
15779 },
15780 .extra_temps = .{
15781 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
15782 .{ .type = .u32, .kind = .{ .reg = .rcx } },
15783 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15784 .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } },
15785 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
15786 .unused,
15787 .unused,
15788 .unused,
15789 .unused,
15790 },
15791 .dst_temps = .{.mem},
15792 .clobbers = .{ .eflags = true },
15793 .each = .{ .once = &.{
15794 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
15795 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15796 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15797 .{ .@"0:", ._pd, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
15798 .{ ._, ._pd, .cmp, .tmp3x, .memia(.src1x, .tmp0, .add_size), .ui(switch (cc) {
15799 else => unreachable,
15800 .e => 0b00000,
15801 .ne => 0b00100,
15802 }), ._ },
15803 .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ },
15804 .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
15805 .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
15806 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
15807 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15808 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15809 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
15810 .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
15811 .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
15812 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15813 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
15814 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
15815 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15816 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15817 .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
15818 .{ ._, ._r, .sh, .tmp4d, .ui(3), ._, ._ },
15819 .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
15820 } },
15821 }, .{
15822 .required_features = .{ .x87, .cmov, .slow_incdec, null },
15823 .src_constraints = .{
15824 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
15825 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
15826 },
828115827 .patterns = &.{
828215828 .{ .src = .{ .to_mem, .to_mem } },
828315829 },
828415830 .extra_temps = .{
828515831 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8286 .{ .type = .u8, .kind = .{ .reg = .cl } },
15832 .{ .type = .u32, .kind = .{ .reg = .rcx } },
15833 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
828715834 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8288 .unused,
15835 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
15836 .{ .type = .f80, .kind = .{ .reg = .st6 } },
15837 .{ .type = .f80, .kind = .{ .reg = .st7 } },
828915838 .unused,
829015839 .unused,
829115840 },
8292 .dst_temps = .{.{ .rc = .general_purpose }},
15841 .dst_temps = .{.mem},
829315842 .clobbers = .{ .eflags = true },
829415843 .each = .{ .once = &.{
8295 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
829615844 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8297 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8298 .{ .@"0:", ._, .mov, .tmp2b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
8299 .{ ._, ._, .cmp, .tmp2b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
8300 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8301 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
8302 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
8303 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8304 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
15845 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15846 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15847 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
15848 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
15849 .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
15850 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
15851 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
15852 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
15853 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
15854 .{ ._, switch (cc) {
15855 else => unreachable,
15856 .e => ._np,
15857 .ne => ._p,
15858 }, .set, .tmp4b, ._, ._, ._ },
15859 .{ ._, ._, switch (cc) {
15860 else => unreachable,
15861 .e => .@"and",
15862 .ne => .@"or",
15863 }, .tmp3b, .tmp4b, ._, ._ },
15864 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
15865 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
15866 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
15867 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15868 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15869 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
15870 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
15871 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
15872 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15873 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
830515874 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
15875 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15876 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15877 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
15878 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
15879 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
830615880 } },
830715881 }, .{
8308 .dst_constraints = .{.{ .bool_vec = .byte }},
8309 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
15882 .required_features = .{ .x87, .cmov, null, null },
15883 .src_constraints = .{
15884 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
15885 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
15886 },
831015887 .patterns = &.{
831115888 .{ .src = .{ .to_mem, .to_mem } },
831215889 },
831315890 .extra_temps = .{
831415891 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8315 .{ .type = .u8, .kind = .{ .reg = .cl } },
8316 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
8317 .unused,
15892 .{ .type = .u32, .kind = .{ .reg = .rcx } },
15893 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
15894 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
15895 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
15896 .{ .type = .f80, .kind = .{ .reg = .st6 } },
15897 .{ .type = .f80, .kind = .{ .reg = .st7 } },
831815898 .unused,
831915899 .unused,
832015900 },
8321 .dst_temps = .{.{ .rc = .general_purpose }},
15901 .dst_temps = .{.mem},
832215902 .clobbers = .{ .eflags = true },
832315903 .each = .{ .once = &.{
8324 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
832515904 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8326 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8327 .{ .@"0:", ._, .mov, .tmp2w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
8328 .{ ._, ._, .cmp, .tmp2w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
8329 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8330 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
8331 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
8332 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8333 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
15905 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15906 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15907 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
15908 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
15909 .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
15910 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
15911 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
15912 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
15913 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
15914 .{ ._, switch (cc) {
15915 else => unreachable,
15916 .e => ._np,
15917 .ne => ._p,
15918 }, .set, .tmp4b, ._, ._, ._ },
15919 .{ ._, ._, switch (cc) {
15920 else => unreachable,
15921 .e => .@"and",
15922 .ne => .@"or",
15923 }, .tmp3b, .tmp4b, ._, ._ },
15924 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
15925 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
15926 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
15927 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15928 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15929 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
15930 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
15931 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
15932 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15933 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
833415934 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
15935 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15936 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15937 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
15938 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
15939 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
833515940 } },
833615941 }, .{
8337 .dst_constraints = .{.{ .bool_vec = .byte }},
8338 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
15942 .required_features = .{ .x87, null, null, null },
15943 .src_constraints = .{
15944 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
15945 .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } },
15946 },
833915947 .patterns = &.{
834015948 .{ .src = .{ .to_mem, .to_mem } },
834115949 },
834215950 .extra_temps = .{
834315951 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8344 .{ .type = .u8, .kind = .{ .reg = .cl } },
15952 .{ .type = .u32, .kind = .{ .reg = .rcx } },
834515953 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8346 .unused,
15954 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
15955 .{ .type = .f80, .kind = .{ .reg = .st6 } },
15956 .{ .type = .f80, .kind = .{ .reg = .st7 } },
15957 .{ .type = .u8, .kind = .{ .reg = .ah } },
834715958 .unused,
834815959 .unused,
834915960 },
8350 .dst_temps = .{.{ .rc = .general_purpose }},
15961 .dst_temps = .{.mem},
835115962 .clobbers = .{ .eflags = true },
835215963 .each = .{ .once = &.{
8353 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
835415964 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8355 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8356 .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
8357 .{ ._, ._, .cmp, .tmp2d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8358 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8359 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
8360 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
8361 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8362 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
15965 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
15966 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15967 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
15968 .{ ._, .f_, .ld, .memia(.src1q, .tmp0, .add_size), ._, ._, ._ },
15969 .{ ._, .f_, .ld, .memia(.src0q, .tmp0, .add_size), ._, ._, ._ },
15970 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
15971 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
15972 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
15973 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
15974 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
15975 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
15976 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
15977 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
15978 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15979 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
15980 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
15981 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
15982 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
15983 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
15984 .{ .@"1:", ._, .add, .tmp0p, .si(8), ._, ._ },
836315985 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
15986 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
15987 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
15988 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
15989 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
15990 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
836415991 } },
836515992 }, .{
8366 .required_features = .{ .@"64bit", null, null, null },
8367 .dst_constraints = .{.{ .bool_vec = .byte }},
8368 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
15993 .required_features = .{ .x87, .cmov, .slow_incdec, null },
15994 .src_constraints = .{
15995 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
15996 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
15997 },
836915998 .patterns = &.{
837015999 .{ .src = .{ .to_mem, .to_mem } },
837116000 },
837216001 .extra_temps = .{
837316002 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8374 .{ .type = .u8, .kind = .{ .reg = .cl } },
8375 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8376 .unused,
16003 .{ .type = .u32, .kind = .{ .reg = .rcx } },
16004 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
16005 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
16006 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
16007 .{ .type = .f80, .kind = .{ .reg = .st6 } },
16008 .{ .type = .f80, .kind = .{ .reg = .st7 } },
837716009 .unused,
837816010 .unused,
837916011 },
8380 .dst_temps = .{.{ .rc = .general_purpose }},
16012 .dst_temps = .{.mem},
838116013 .clobbers = .{ .eflags = true },
838216014 .each = .{ .once = &.{
8383 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
838416015 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8385 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8386 .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8387 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8388 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8389 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
8390 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
8391 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8392 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
16016 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16017 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16018 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
16019 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
16020 .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
16021 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
16022 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
16023 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
16024 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16025 .{ ._, switch (cc) {
16026 else => unreachable,
16027 .e => ._np,
16028 .ne => ._p,
16029 }, .set, .tmp4b, ._, ._, ._ },
16030 .{ ._, ._, switch (cc) {
16031 else => unreachable,
16032 .e => .@"and",
16033 .ne => .@"or",
16034 }, .tmp3b, .tmp4b, ._, ._ },
16035 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
16036 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
16037 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
16038 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
16039 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
16040 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
16041 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
16042 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
16043 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16044 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
839316045 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
16046 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
16047 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
16048 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
16049 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
16050 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
839416051 } },
839516052 }, .{
8396 .dst_constraints = .{.{ .bool_vec = .byte }},
16053 .required_features = .{ .x87, .cmov, null, null },
16054 .src_constraints = .{
16055 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
16056 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
16057 },
839716058 .patterns = &.{
839816059 .{ .src = .{ .to_mem, .to_mem } },
839916060 },
840016061 .extra_temps = .{
8401 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8402 .{ .type = .u8, .kind = .{ .reg = .cl } },
16062 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
16063 .{ .type = .u32, .kind = .{ .reg = .rcx } },
840316064 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8404 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8405 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16065 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
16066 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
16067 .{ .type = .f80, .kind = .{ .reg = .st6 } },
16068 .{ .type = .f80, .kind = .{ .reg = .st7 } },
16069 .unused,
840616070 .unused,
840716071 },
8408 .dst_temps = .{.{ .rc = .general_purpose }},
16072 .dst_temps = .{.mem},
840916073 .clobbers = .{ .eflags = true },
841016074 .each = .{ .once = &.{
8411 .{ ._, ._, .xor, .dst0b, .dst0b, ._, ._ },
8412 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
8413 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8414 .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
8415 .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
8416 .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
8417 .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
8418 .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
8419 .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
8420 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
8421 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
8422 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
8423 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8424 .{ ._, ._l, .sh, .tmp2b, .tmp1b, ._, ._ },
8425 .{ ._, ._, .@"or", .dst0b, .tmp2b, ._, ._ },
8426 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8427 .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
8428 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
16075 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
16076 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16077 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16078 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
16079 .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
16080 .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
16081 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
16082 .{ ._, .f_p, .ucomi, .tmp5t, .tmp6t, ._, ._ },
16083 .{ ._, .f_p, .st, .tmp6t, ._, ._, ._ },
16084 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16085 .{ ._, switch (cc) {
16086 else => unreachable,
16087 .e => ._np,
16088 .ne => ._p,
16089 }, .set, .tmp4b, ._, ._, ._ },
16090 .{ ._, ._, switch (cc) {
16091 else => unreachable,
16092 .e => .@"and",
16093 .ne => .@"or",
16094 }, .tmp3b, .tmp4b, ._, ._ },
16095 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
16096 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
16097 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
16098 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
16099 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
16100 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
16101 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
16102 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
16103 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16104 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
16105 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
16106 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
16107 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
16108 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
16109 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
16110 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
842916111 } },
843016112 }, .{
8431 .dst_constraints = .{.{ .bool_vec = .dword }},
8432 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
16113 .required_features = .{ .x87, null, null, null },
16114 .src_constraints = .{
16115 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
16116 .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } },
16117 },
843316118 .patterns = &.{
843416119 .{ .src = .{ .to_mem, .to_mem } },
843516120 },
843616121 .extra_temps = .{
843716122 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8438 .{ .type = .u8, .kind = .{ .reg = .cl } },
16123 .{ .type = .u32, .kind = .{ .reg = .rcx } },
843916124 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
844016125 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
16126 .{ .type = .f80, .kind = .{ .reg = .st6 } },
16127 .{ .type = .f80, .kind = .{ .reg = .st7 } },
16128 .{ .type = .u8, .kind = .{ .reg = .ah } },
844116129 .unused,
844216130 .unused,
844316131 },
8444 .dst_temps = .{.{ .rc = .general_purpose }},
16132 .dst_temps = .{.mem},
844516133 .clobbers = .{ .eflags = true },
844616134 .each = .{ .once = &.{
8447 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
844816135 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8449 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8450 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8451 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
8452 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
8453 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8454 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
8455 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
8456 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8457 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
16136 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16137 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16138 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
16139 .{ ._, .f_, .ld, .memia(.src1t, .tmp0, .add_size), ._, ._, ._ },
16140 .{ ._, .f_, .ld, .memia(.src0t, .tmp0, .add_size), ._, ._, ._ },
16141 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
16142 .{ ._, .fn_sw, .st, .tmp6w, ._, ._, ._ },
16143 .{ ._, ._, .xor, .tmp6b, .si(0b0_1_000_000), ._, ._ },
16144 .{ ._, ._, .@"test", .tmp6b, .si(0b0_1_000_100), ._, ._ },
16145 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
16146 .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
16147 .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
16148 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
16149 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
16150 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
16151 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
16152 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
16153 .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
16154 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16155 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
845816156 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
16157 .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ },
16158 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
16159 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
16160 .{ ._, ._r, .sh, .tmp3d, .ui(3), ._, ._ },
16161 .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
845916162 } },
846016163 }, .{
16164 .required_features = .{ .avx, .slow_incdec, null, null },
846116165 .dst_constraints = .{.{ .bool_vec = .dword }},
8462 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
16166 .src_constraints = .{
16167 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16168 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16169 },
846316170 .patterns = &.{
846416171 .{ .src = .{ .to_mem, .to_mem } },
846516172 },
16173 .call_frame = .{ .alignment = .@"16" },
846616174 .extra_temps = .{
846716175 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8468 .{ .type = .u8, .kind = .{ .reg = .cl } },
846916176 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8470 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
8471 .unused,
16177 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16178 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16179 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16180 else => unreachable,
16181 .e => "__eqtf2",
16182 .ne => "__netf2",
16183 } } } },
16184 .{ .type = .i32, .kind = .{ .reg = .eax } },
16185 .{ .type = .u8, .kind = .{ .reg = .cl } },
16186 .{ .type = .u32, .kind = .{ .reg = .edx } },
847216187 .unused,
847316188 },
847416189 .dst_temps = .{.{ .rc = .general_purpose }},
8475 .clobbers = .{ .eflags = true },
16190 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
847616191 .each = .{ .once = &.{
847716192 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
847816193 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8479 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8480 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8481 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
8482 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
8483 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8484 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
8485 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
8486 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8487 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
16194 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16195 .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16196 .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16197 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16198 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16199 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16200 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16201 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16202 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16203 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
16204 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
16205 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
848816206 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
848916207 } },
849016208 }, .{
16209 .required_features = .{ .avx, .slow_incdec, null, null },
849116210 .dst_constraints = .{.{ .bool_vec = .dword }},
8492 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
16211 .src_constraints = .{
16212 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16213 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16214 },
849316215 .patterns = &.{
849416216 .{ .src = .{ .to_mem, .to_mem } },
849516217 },
16218 .call_frame = .{ .alignment = .@"16" },
849616219 .extra_temps = .{
849716220 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8498 .{ .type = .u8, .kind = .{ .reg = .cl } },
849916221 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8500 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8501 .unused,
16222 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16223 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16224 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16225 else => unreachable,
16226 .e => "__eqtf2",
16227 .ne => "__netf2",
16228 } } } },
16229 .{ .type = .i32, .kind = .{ .reg = .eax } },
16230 .{ .type = .u8, .kind = .{ .reg = .cl } },
16231 .{ .type = .u32, .kind = .{ .reg = .edx } },
850216232 .unused,
850316233 },
850416234 .dst_temps = .{.{ .rc = .general_purpose }},
8505 .clobbers = .{ .eflags = true },
16235 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
850616236 .each = .{ .once = &.{
850716237 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
850816238 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8509 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8510 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8511 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
8512 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8513 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8514 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
8515 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
8516 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8517 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
16239 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16240 .{ .@"0:", .v_dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16241 .{ ._, .v_dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16242 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16243 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16244 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16245 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16246 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16247 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16248 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
16249 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
16250 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
851816251 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
851916252 } },
852016253 }, .{
8521 .required_features = .{ .@"64bit", null, null, null },
16254 .required_features = .{ .sse2, .slow_incdec, null, null },
852216255 .dst_constraints = .{.{ .bool_vec = .dword }},
8523 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
16256 .src_constraints = .{
16257 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16258 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16259 },
852416260 .patterns = &.{
852516261 .{ .src = .{ .to_mem, .to_mem } },
852616262 },
16263 .call_frame = .{ .alignment = .@"16" },
852716264 .extra_temps = .{
852816265 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8529 .{ .type = .u8, .kind = .{ .reg = .cl } },
853016266 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8531 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8532 .unused,
16267 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16268 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16269 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16270 else => unreachable,
16271 .e => "__eqtf2",
16272 .ne => "__netf2",
16273 } } } },
16274 .{ .type = .i32, .kind = .{ .reg = .eax } },
16275 .{ .type = .u8, .kind = .{ .reg = .cl } },
16276 .{ .type = .u32, .kind = .{ .reg = .edx } },
853316277 .unused,
853416278 },
853516279 .dst_temps = .{.{ .rc = .general_purpose }},
8536 .clobbers = .{ .eflags = true },
16280 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
853716281 .each = .{ .once = &.{
853816282 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
853916283 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8540 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8541 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8542 .{ ._, ._, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8543 .{ ._, ._, .cmp, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8544 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8545 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
8546 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
8547 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8548 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
16284 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16285 .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16286 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16287 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16288 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16289 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16290 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16291 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16292 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16293 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
16294 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
16295 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
854916296 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
855016297 } },
855116298 }, .{
16299 .required_features = .{ .sse2, .slow_incdec, null, null },
855216300 .dst_constraints = .{.{ .bool_vec = .dword }},
16301 .src_constraints = .{
16302 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16303 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16304 },
855316305 .patterns = &.{
855416306 .{ .src = .{ .to_mem, .to_mem } },
855516307 },
16308 .call_frame = .{ .alignment = .@"16" },
855616309 .extra_temps = .{
8557 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8558 .{ .type = .u8, .kind = .{ .reg = .cl } },
16310 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
855916311 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8560 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8561 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16312 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16313 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16314 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16315 else => unreachable,
16316 .e => "__eqtf2",
16317 .ne => "__netf2",
16318 } } } },
16319 .{ .type = .i32, .kind = .{ .reg = .eax } },
16320 .{ .type = .u8, .kind = .{ .reg = .cl } },
16321 .{ .type = .u32, .kind = .{ .reg = .edx } },
856216322 .unused,
856316323 },
856416324 .dst_temps = .{.{ .rc = .general_purpose }},
8565 .clobbers = .{ .eflags = true },
16325 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
856616326 .each = .{ .once = &.{
856716327 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
8568 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
8569 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8570 .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
8571 .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
8572 .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
8573 .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
8574 .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
8575 .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
8576 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
8577 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
8578 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8579 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
8580 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8581 .{ ._, ._l, .sh, .tmp2d, .tmp1b, ._, ._ },
8582 .{ ._, ._, .@"or", .dst0d, .tmp2d, ._, ._ },
8583 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8584 .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
8585 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
16328 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
16329 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16330 .{ .@"0:", ._dqa, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16331 .{ ._, ._dqa, .mov, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16332 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16333 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16334 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16335 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16336 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16337 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16338 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
16339 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
16340 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
16341 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
858616342 } },
858716343 }, .{
8588 .required_features = .{ .@"64bit", null, null, null },
8589 .dst_constraints = .{.{ .bool_vec = .qword }},
8590 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
16344 .required_features = .{ .sse, .slow_incdec, null, null },
16345 .dst_constraints = .{.{ .bool_vec = .dword }},
16346 .src_constraints = .{
16347 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16348 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16349 },
859116350 .patterns = &.{
859216351 .{ .src = .{ .to_mem, .to_mem } },
859316352 },
16353 .call_frame = .{ .alignment = .@"16" },
859416354 .extra_temps = .{
859516355 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
16356 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
16357 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16358 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16359 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16360 else => unreachable,
16361 .e => "__eqtf2",
16362 .ne => "__netf2",
16363 } } } },
16364 .{ .type = .i32, .kind = .{ .reg = .eax } },
859616365 .{ .type = .u8, .kind = .{ .reg = .cl } },
8597 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8598 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8599 .unused,
16366 .{ .type = .u32, .kind = .{ .reg = .edx } },
860016367 .unused,
860116368 },
860216369 .dst_temps = .{.{ .rc = .general_purpose }},
8603 .clobbers = .{ .eflags = true },
16370 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
860416371 .each = .{ .once = &.{
860516372 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
860616373 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8607 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8608 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8609 .{ ._, ._, .mov, .tmp3b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
8610 .{ ._, ._, .cmp, .tmp3b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
8611 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8612 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
8613 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
8614 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8615 .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ },
16374 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16375 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16376 .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16377 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16378 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16379 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16380 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16381 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16382 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16383 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
16384 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
16385 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
861616386 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
861716387 } },
861816388 }, .{
8619 .required_features = .{ .@"64bit", null, null, null },
8620 .dst_constraints = .{.{ .bool_vec = .qword }},
8621 .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } },
16389 .required_features = .{ .sse2, .slow_incdec, null, null },
16390 .dst_constraints = .{.{ .bool_vec = .dword }},
16391 .src_constraints = .{
16392 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16393 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16394 },
862216395 .patterns = &.{
862316396 .{ .src = .{ .to_mem, .to_mem } },
862416397 },
16398 .call_frame = .{ .alignment = .@"16" },
862516399 .extra_temps = .{
862616400 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
16401 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
16402 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16403 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16404 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16405 else => unreachable,
16406 .e => "__eqtf2",
16407 .ne => "__netf2",
16408 } } } },
16409 .{ .type = .i32, .kind = .{ .reg = .eax } },
862716410 .{ .type = .u8, .kind = .{ .reg = .cl } },
8628 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8629 .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
8630 .unused,
16411 .{ .type = .u32, .kind = .{ .reg = .edx } },
863116412 .unused,
863216413 },
863316414 .dst_temps = .{.{ .rc = .general_purpose }},
8634 .clobbers = .{ .eflags = true },
16415 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
863516416 .each = .{ .once = &.{
863616417 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
863716418 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8638 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8639 .{ ._, ._, .mov, .tmp3w, .memia(.src0w, .tmp0, .add_size), ._, ._ },
8640 .{ ._, ._, .cmp, .tmp3w, .memia(.src1w, .tmp0, .add_size), ._, ._ },
8641 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8642 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
8643 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
8644 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8645 .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ },
16419 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16420 .{ .@"0:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16421 .{ ._, ._ps, .mova, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16422 .{ ._, ._, .call, .tmp4d, ._, ._, ._ },
16423 .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
16424 .{ ._, ._, .@"test", .tmp5d, .tmp5d, ._, ._ },
16425 .{ ._, .fromCondition(cc), .set, .tmp7b, ._, ._, ._ },
16426 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16427 .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ },
16428 .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ },
16429 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
16430 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
864616431 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
864716432 } },
864816433 }, .{
8649 .required_features = .{ .@"64bit", null, null, null },
8650 .dst_constraints = .{.{ .bool_vec = .qword }},
8651 .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } },
16434 .required_features = .{ .@"64bit", .avx, .slow_incdec, null },
16435 .src_constraints = .{
16436 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16437 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16438 },
865216439 .patterns = &.{
865316440 .{ .src = .{ .to_mem, .to_mem } },
865416441 },
16442 .call_frame = .{ .alignment = .@"16" },
865516443 .extra_temps = .{
865616444 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8657 .{ .type = .u8, .kind = .{ .reg = .cl } },
8658 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
865916445 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
8660 .unused,
8661 .unused,
16446 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
16447 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16448 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16449 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16450 else => unreachable,
16451 .e => "__eqtf2",
16452 .ne => "__netf2",
16453 } } } },
16454 .{ .type = .i32, .kind = .{ .reg = .eax } },
16455 .{ .type = .u8, .kind = .{ .reg = .cl } },
16456 .{ .type = .u64, .kind = .{ .reg = .rdx } },
866216457 },
8663 .dst_temps = .{.{ .rc = .general_purpose }},
8664 .clobbers = .{ .eflags = true },
16458 .dst_temps = .{.mem},
16459 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
866516460 .each = .{ .once = &.{
8666 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
866716461 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8668 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8669 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8670 .{ ._, ._, .mov, .tmp3d, .memia(.src0d, .tmp0, .add_size), ._, ._ },
8671 .{ ._, ._, .cmp, .tmp3d, .memia(.src1d, .tmp0, .add_size), ._, ._ },
8672 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8673 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
8674 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
8675 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8676 .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ },
16462 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16463 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16464 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16465 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16466 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16467 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16468 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16469 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
16470 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16471 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16472 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
16473 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
16474 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16475 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
16476 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16477 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
16478 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
16479 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16480 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
867716481 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
16482 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16483 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
16484 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16485 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
16486 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
867816487 } },
867916488 }, .{
8680 .required_features = .{ .@"64bit", null, null, null },
8681 .dst_constraints = .{.{ .bool_vec = .qword }},
8682 .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } },
16489 .required_features = .{ .@"64bit", .avx, null, null },
16490 .src_constraints = .{
16491 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16492 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16493 },
868316494 .patterns = &.{
868416495 .{ .src = .{ .to_mem, .to_mem } },
868516496 },
16497 .call_frame = .{ .alignment = .@"16" },
868616498 .extra_temps = .{
868716499 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
16500 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
16501 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
16502 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16503 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16504 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16505 else => unreachable,
16506 .e => "__eqtf2",
16507 .ne => "__netf2",
16508 } } } },
16509 .{ .type = .i32, .kind = .{ .reg = .eax } },
868816510 .{ .type = .u8, .kind = .{ .reg = .cl } },
16511 .{ .type = .u64, .kind = .{ .reg = .rdx } },
16512 },
16513 .dst_temps = .{.mem},
16514 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
16515 .each = .{ .once = &.{
16516 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
16517 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16518 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16519 .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16520 .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16521 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16522 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16523 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16524 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
16525 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16526 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16527 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
16528 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
16529 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16530 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
16531 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16532 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
16533 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
16534 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16535 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
16536 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
16537 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16538 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
16539 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16540 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
16541 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
16542 } },
16543 }, .{
16544 .required_features = .{ .@"64bit", .sse2, .slow_incdec, null },
16545 .src_constraints = .{
16546 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16547 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16548 },
16549 .patterns = &.{
16550 .{ .src = .{ .to_mem, .to_mem } },
16551 },
16552 .call_frame = .{ .alignment = .@"16" },
16553 .extra_temps = .{
16554 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
16555 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
868916556 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
16557 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16558 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16559 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16560 else => unreachable,
16561 .e => "__eqtf2",
16562 .ne => "__netf2",
16563 } } } },
16564 .{ .type = .i32, .kind = .{ .reg = .eax } },
16565 .{ .type = .u8, .kind = .{ .reg = .cl } },
16566 .{ .type = .u64, .kind = .{ .reg = .rdx } },
16567 },
16568 .dst_temps = .{.mem},
16569 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
16570 .each = .{ .once = &.{
16571 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
16572 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16573 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16574 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16575 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16576 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16577 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16578 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16579 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
16580 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16581 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16582 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
16583 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
16584 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16585 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
16586 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16587 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
16588 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
16589 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16590 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
16591 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
16592 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16593 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
16594 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16595 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
16596 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
16597 } },
16598 }, .{
16599 .required_features = .{ .@"64bit", .sse2, null, null },
16600 .src_constraints = .{
16601 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16602 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16603 },
16604 .patterns = &.{
16605 .{ .src = .{ .to_mem, .to_mem } },
16606 },
16607 .call_frame = .{ .alignment = .@"16" },
16608 .extra_temps = .{
16609 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
16610 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
869016611 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
8691 .unused,
8692 .unused,
16612 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16613 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16614 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16615 else => unreachable,
16616 .e => "__eqtf2",
16617 .ne => "__netf2",
16618 } } } },
16619 .{ .type = .i32, .kind = .{ .reg = .eax } },
16620 .{ .type = .u8, .kind = .{ .reg = .cl } },
16621 .{ .type = .u64, .kind = .{ .reg = .rdx } },
869316622 },
8694 .dst_temps = .{.{ .rc = .general_purpose }},
8695 .clobbers = .{ .eflags = true },
16623 .dst_temps = .{.mem},
16624 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
869616625 .each = .{ .once = &.{
8697 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
869816626 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
8699 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8700 .{ .@"0:", ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8701 .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
8702 .{ ._, ._, .cmp, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
8703 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8704 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
8705 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
8706 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8707 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
16627 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
16628 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16629 .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16630 .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16631 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16632 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16633 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16634 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
16635 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16636 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16637 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
16638 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
16639 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16640 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
16641 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16642 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
16643 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
16644 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16645 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
870816646 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
16647 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16648 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
16649 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16650 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
16651 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
870916652 } },
871016653 }, .{
8711 .required_features = .{ .@"64bit", null, null, null },
8712 .dst_constraints = .{.{ .bool_vec = .qword }},
16654 .required_features = .{ .@"64bit", .sse, .slow_incdec, null },
16655 .src_constraints = .{
16656 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16657 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16658 },
871316659 .patterns = &.{
871416660 .{ .src = .{ .to_mem, .to_mem } },
871516661 },
16662 .call_frame = .{ .alignment = .@"16" },
871616663 .extra_temps = .{
8717 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
16664 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
16665 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
16666 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
16667 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16668 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16669 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16670 else => unreachable,
16671 .e => "__eqtf2",
16672 .ne => "__netf2",
16673 } } } },
16674 .{ .type = .i32, .kind = .{ .reg = .eax } },
871816675 .{ .type = .u8, .kind = .{ .reg = .cl } },
8719 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8720 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8721 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8722 .unused,
16676 .{ .type = .u64, .kind = .{ .reg = .rdx } },
872316677 },
8724 .dst_temps = .{.{ .rc = .general_purpose }},
8725 .clobbers = .{ .eflags = true },
16678 .dst_temps = .{.mem},
16679 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
872616680 .each = .{ .once = &.{
8727 .{ ._, ._, .xor, .dst0d, .dst0d, ._, ._ },
8728 .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
8729 .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
8730 .{ .@"0:", ._, .mov, .tmp2d, .sa(.src0p, .add_elem_limbs), ._, ._ },
8731 .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
8732 .{ .@"1:", ._, .mov, .tmp4p, .memi(.src0p, .tmp0), ._, ._ },
8733 .{ ._, ._, .xor, .tmp4p, .memi(.src1p, .tmp0), ._, ._ },
8734 .{ ._, ._, .@"or", .tmp3p, .tmp4p, ._, ._ },
8735 .{ ._, ._, .add, .tmp0p, .sa(.tmp4, .add_size), ._, ._ },
8736 .{ ._, ._, .sub, .tmp2d, .si(1), ._, ._ },
8737 .{ ._, ._b, .j, .@"1b", ._, ._, ._ },
16681 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
16682 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
873816683 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8739 .{ ._, ._, .@"test", .tmp3p, .tmp3p, ._, ._ },
8740 .{ ._, .fromCondition(cc), .set, .tmp2b, ._, ._, ._ },
8741 .{ ._, ._l, .sh, .tmp2q, .tmp1b, ._, ._ },
8742 .{ ._, ._, .@"or", .dst0q, .tmp2q, ._, ._ },
8743 .{ ._, ._, .add, .tmp1b, .si(1), ._, ._ },
8744 .{ ._, ._, .cmp, .tmp1b, .sa(.dst0, .add_len), ._, ._ },
8745 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
16684 .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16685 .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16686 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16687 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16688 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16689 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
16690 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16691 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16692 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
16693 .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
16694 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16695 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
16696 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16697 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
16698 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
16699 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
16700 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
16701 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
16702 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
16703 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
16704 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16705 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
16706 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
874616707 } },
874716708 }, .{
8748 .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } },
16709 .required_features = .{ .@"64bit", .sse, null, null },
16710 .src_constraints = .{
16711 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16712 .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } },
16713 },
874916714 .patterns = &.{
875016715 .{ .src = .{ .to_mem, .to_mem } },
875116716 },
16717 .call_frame = .{ .alignment = .@"16" },
875216718 .extra_temps = .{
875316719 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
8754 .{ .type = .u32, .kind = .{ .reg = .ecx } },
8755 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8756 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
8757 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
8758 .unused,
16720 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
16721 .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
16722 .{ .type = .f128, .kind = .{ .reg = .xmm0 } },
16723 .{ .type = .f128, .kind = .{ .reg = .xmm1 } },
16724 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
16725 else => unreachable,
16726 .e => "__eqtf2",
16727 .ne => "__netf2",
16728 } } } },
16729 .{ .type = .i32, .kind = .{ .reg = .eax } },
16730 .{ .type = .u8, .kind = .{ .reg = .cl } },
16731 .{ .type = .u64, .kind = .{ .reg = .rdx } },
875916732 },
876016733 .dst_temps = .{.mem},
8761 .clobbers = .{ .eflags = true },
16734 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
876216735 .each = .{ .once = &.{
876316736 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
876416737 .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
876516738 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8766 .{ .@"0:", ._, .xor, .tmp3d, .tmp3d, ._, ._ },
8767 .{ ._, ._, .mov, .tmp4b, .memia(.src0b, .tmp0, .add_size), ._, ._ },
8768 .{ ._, ._, .cmp, .tmp4b, .memia(.src1b, .tmp0, .add_size), ._, ._ },
8769 .{ ._, .fromCondition(cc), .set, .tmp3b, ._, ._, ._ },
8770 .{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
8771 .{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
8772 .{ ._, ._, .add, .tmp1d, .si(1), ._, ._ },
8773 .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
16739 .{ .@"0:", ._ps, .mova, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
16740 .{ ._, ._ps, .mova, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
16741 .{ ._, ._, .call, .tmp5d, ._, ._, ._ },
16742 .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
16743 .{ ._, ._, .@"test", .tmp6d, .tmp6d, ._, ._ },
16744 .{ ._, .fromCondition(cc), .set, .tmp8b, ._, ._, ._ },
16745 .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ },
16746 .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ },
16747 .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
16748 .{ ._, ._c, .in, .tmp1d, ._, ._, ._ },
16749 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
877416750 .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
8775 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
8776 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
8777 .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
16751 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16752 .{ ._, ._r, .sh, .tmp6d, .ui(3), ._, ._ },
16753 .{ ._, ._, .mov, .memid(.dst0q, .tmp6, -8), .tmp2q, ._, ._ },
877816754 .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
8779 .{ .@"1:", ._, .add, .tmp0p, .si(1), ._, ._ },
16755 .{ .@"1:", ._, .add, .tmp0p, .si(16), ._, ._ },
878016756 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
8781 .{ ._, ._, .@"test", .tmp1d, .sia(-1, .none, .add_ptr_bit_size), ._, ._ },
16757 .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ },
878216758 .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
8783 .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
8784 .{ ._, ._r, .sh, .tmp3d, .si(3), ._, ._ },
8785 .{ ._, ._, .mov, .memi(.dst0p, .tmp3), .tmp2p, ._, ._ },
16759 .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ },
16760 .{ ._, ._r, .sh, .tmp6d, .si(9), ._, ._ },
16761 .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp6), .tmp2q, ._, ._ },
878616762 } },
878716763 } },
878816764 }) catch |err| switch (err) {
8789 error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
16765 error.SelectFailed => return cg.fail("failed to select {s} {s} {} {} {}", .{
879016766 @tagName(air_tag),
16767 @tagName(extra.compareOperator()),
879116768 cg.typeOf(extra.lhs).fmt(pt),
879216769 ops[0].tracking(cg),
879316770 ops[1].tracking(cg),
......@@ -8797,15 +16774,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
879716774 .gte => unreachable,
879816775 .gt => unreachable,
879916776 }
8800 for (ops) |op| for (res) |r| {
8801 if (op.index == r.index) break;
8802 } else try op.die(cg);
8803 try res[0].moveTo(inst, cg);
16777 try res[0].finish(inst, &.{ extra.lhs, extra.rhs }, &ops, cg);
880416778 },
880516779
8806 .abs => |air_tag| if (use_old) try cg.airAbs(inst) else fallback: {
16780 .abs => |air_tag| if (use_old) try cg.airAbs(inst) else {
880716781 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
8808 if (ty_op.ty.toType().isVector(zcu) and ty_op.ty.toType().childType(zcu).isRuntimeFloat()) break :fallback try cg.airAbs(inst);
880916782 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
881016783 var res: [1]Temp = undefined;
881116784 cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{
......@@ -8986,6 +16959,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
898616959 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
898716960 .unused,
898816961 .unused,
16962 .unused,
16963 .unused,
16964 .unused,
898916965 },
899016966 .dst_temps = .{.mem},
899116967 .clobbers = .{ .eflags = true },
......@@ -9010,7 +16986,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
901016986 .{ .src = .{ .mem, .none } },
901116987 .{ .src = .{ .to_mm, .none } },
901216988 },
9013 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},
16989 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
901416990 .each = .{ .once = &.{
901516991 .{ ._, .p_b, .abs, .dst0q, .src0q, ._, ._ },
901616992 } },
......@@ -9021,7 +16997,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
902116997 .{ .src = .{ .mem, .none } },
902216998 .{ .src = .{ .to_mm, .none } },
902316999 },
9024 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},
17000 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
902517001 .each = .{ .once = &.{
902617002 .{ ._, .p_w, .abs, .dst0q, .src0q, ._, ._ },
902717003 } },
......@@ -9032,7 +17008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
903217008 .{ .src = .{ .mem, .none } },
903317009 .{ .src = .{ .to_mm, .none } },
903417010 },
9035 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .mmx } }},
17011 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .mmx } }},
903617012 .each = .{ .once = &.{
903717013 .{ ._, .p_d, .abs, .dst0q, .src0q, ._, ._ },
903817014 } },
......@@ -9043,7 +17019,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
904317019 .{ .src = .{ .mem, .none } },
904417020 .{ .src = .{ .to_sse, .none } },
904517021 },
9046 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17022 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
904717023 .each = .{ .once = &.{
904817024 .{ ._, .p_b, .abs, .dst0x, .src0x, ._, ._ },
904917025 } },
......@@ -9054,7 +17030,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
905417030 .{ .src = .{ .mem, .none } },
905517031 .{ .src = .{ .to_sse, .none } },
905617032 },
9057 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17033 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
905817034 .each = .{ .once = &.{
905917035 .{ ._, .p_w, .abs, .dst0x, .src0x, ._, ._ },
906017036 } },
......@@ -9065,7 +17041,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
906517041 .{ .src = .{ .mem, .none } },
906617042 .{ .src = .{ .to_sse, .none } },
906717043 },
9068 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17044 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
906917045 .each = .{ .once = &.{
907017046 .{ ._, .p_d, .abs, .dst0x, .src0x, ._, ._ },
907117047 } },
......@@ -9076,7 +17052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
907617052 .{ .src = .{ .mem, .none } },
907717053 .{ .src = .{ .to_sse, .none } },
907817054 },
9079 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17055 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
908017056 .each = .{ .once = &.{
908117057 .{ ._, .vp_b, .abs, .dst0x, .src0x, ._, ._ },
908217058 } },
......@@ -9087,7 +17063,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
908717063 .{ .src = .{ .mem, .none } },
908817064 .{ .src = .{ .to_sse, .none } },
908917065 },
9090 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17066 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
909117067 .each = .{ .once = &.{
909217068 .{ ._, .vp_w, .abs, .dst0x, .src0x, ._, ._ },
909317069 } },
......@@ -9098,7 +17074,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
909817074 .{ .src = .{ .mem, .none } },
909917075 .{ .src = .{ .to_sse, .none } },
910017076 },
9101 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17077 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
910217078 .each = .{ .once = &.{
910317079 .{ ._, .vp_d, .abs, .dst0x, .src0x, ._, ._ },
910417080 } },
......@@ -9109,7 +17085,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
910917085 .{ .src = .{ .mem, .none } },
911017086 .{ .src = .{ .to_sse, .none } },
911117087 },
9112 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17088 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
911317089 .each = .{ .once = &.{
911417090 .{ ._, .vp_b, .abs, .dst0y, .src0y, ._, ._ },
911517091 } },
......@@ -9120,7 +17096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
912017096 .{ .src = .{ .mem, .none } },
912117097 .{ .src = .{ .to_sse, .none } },
912217098 },
9123 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17099 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
912417100 .each = .{ .once = &.{
912517101 .{ ._, .vp_w, .abs, .dst0y, .src0y, ._, ._ },
912617102 } },
......@@ -9131,7 +17107,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
913117107 .{ .src = .{ .mem, .none } },
913217108 .{ .src = .{ .to_sse, .none } },
913317109 },
9134 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17110 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
913517111 .each = .{ .once = &.{
913617112 .{ ._, .vp_d, .abs, .dst0y, .src0y, ._, ._ },
913717113 } },
......@@ -9148,6 +17124,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
914817124 .unused,
914917125 .unused,
915017126 .unused,
17127 .unused,
17128 .unused,
17129 .unused,
915117130 },
915217131 .dst_temps = .{.mem},
915317132 .clobbers = .{ .eflags = true },
......@@ -9171,6 +17150,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
917117150 .unused,
917217151 .unused,
917317152 .unused,
17153 .unused,
17154 .unused,
17155 .unused,
917417156 },
917517157 .dst_temps = .{.mem},
917617158 .clobbers = .{ .eflags = true },
......@@ -9194,6 +17176,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
919417176 .unused,
919517177 .unused,
919617178 .unused,
17179 .unused,
17180 .unused,
17181 .unused,
919717182 },
919817183 .dst_temps = .{.mem},
919917184 .clobbers = .{ .eflags = true },
......@@ -9217,6 +17202,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
921717202 .unused,
921817203 .unused,
921917204 .unused,
17205 .unused,
17206 .unused,
17207 .unused,
922017208 },
922117209 .dst_temps = .{.mem},
922217210 .clobbers = .{ .eflags = true },
......@@ -9240,6 +17228,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
924017228 .unused,
924117229 .unused,
924217230 .unused,
17231 .unused,
17232 .unused,
17233 .unused,
924317234 },
924417235 .dst_temps = .{.mem},
924517236 .clobbers = .{ .eflags = true },
......@@ -9263,6 +17254,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
926317254 .unused,
926417255 .unused,
926517256 .unused,
17257 .unused,
17258 .unused,
17259 .unused,
926617260 },
926717261 .dst_temps = .{.mem},
926817262 .clobbers = .{ .eflags = true },
......@@ -9286,6 +17280,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
928617280 .unused,
928717281 .unused,
928817282 .unused,
17283 .unused,
17284 .unused,
17285 .unused,
928917286 },
929017287 .dst_temps = .{.mem},
929117288 .clobbers = .{ .eflags = true },
......@@ -9309,6 +17306,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
930917306 .unused,
931017307 .unused,
931117308 .unused,
17309 .unused,
17310 .unused,
17311 .unused,
931217312 },
931317313 .dst_temps = .{.mem},
931417314 .clobbers = .{ .eflags = true },
......@@ -9332,6 +17332,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
933217332 .unused,
933317333 .unused,
933417334 .unused,
17335 .unused,
17336 .unused,
17337 .unused,
933517338 },
933617339 .dst_temps = .{.mem},
933717340 .clobbers = .{ .eflags = true },
......@@ -9355,6 +17358,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
935517358 .unused,
935617359 .unused,
935717360 .unused,
17361 .unused,
17362 .unused,
17363 .unused,
935817364 },
935917365 .dst_temps = .{.mem},
936017366 .clobbers = .{ .eflags = true },
......@@ -9378,6 +17384,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
937817384 .unused,
937917385 .unused,
938017386 .unused,
17387 .unused,
17388 .unused,
17389 .unused,
938117390 },
938217391 .dst_temps = .{.mem},
938317392 .clobbers = .{ .eflags = true },
......@@ -9401,6 +17410,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
940117410 .unused,
940217411 .unused,
940317412 .unused,
17413 .unused,
17414 .unused,
17415 .unused,
940417416 },
940517417 .dst_temps = .{.mem},
940617418 .clobbers = .{ .eflags = true },
......@@ -9424,6 +17436,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
942417436 .unused,
942517437 .unused,
942617438 .unused,
17439 .unused,
17440 .unused,
17441 .unused,
942717442 },
942817443 .dst_temps = .{.mem},
942917444 .clobbers = .{ .eflags = true },
......@@ -9450,6 +17465,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
945017465 .unused,
945117466 .unused,
945217467 .unused,
17468 .unused,
17469 .unused,
17470 .unused,
945317471 },
945417472 .dst_temps = .{.mem},
945517473 .clobbers = .{ .eflags = true },
......@@ -9476,6 +17494,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
947617494 .unused,
947717495 .unused,
947817496 .unused,
17497 .unused,
17498 .unused,
17499 .unused,
947917500 },
948017501 .dst_temps = .{.mem},
948117502 .clobbers = .{ .eflags = true },
......@@ -9501,6 +17522,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
950117522 .unused,
950217523 .unused,
950317524 .unused,
17525 .unused,
17526 .unused,
17527 .unused,
950417528 },
950517529 .dst_temps = .{.mem},
950617530 .clobbers = .{ .eflags = true },
......@@ -9527,6 +17551,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
952717551 .unused,
952817552 .unused,
952917553 .unused,
17554 .unused,
17555 .unused,
17556 .unused,
953017557 },
953117558 .dst_temps = .{.mem},
953217559 .clobbers = .{ .eflags = true },
......@@ -9551,6 +17578,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
955117578 .unused,
955217579 .unused,
955317580 .unused,
17581 .unused,
17582 .unused,
17583 .unused,
955417584 },
955517585 .dst_temps = .{.mem},
955617586 .clobbers = .{ .eflags = true },
......@@ -9577,6 +17607,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
957717607 .unused,
957817608 .unused,
957917609 .unused,
17610 .unused,
17611 .unused,
17612 .unused,
958017613 },
958117614 .dst_temps = .{.mem},
958217615 .clobbers = .{ .eflags = true },
......@@ -9601,6 +17634,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
960117634 .unused,
960217635 .unused,
960317636 .unused,
17637 .unused,
17638 .unused,
17639 .unused,
960417640 },
960517641 .dst_temps = .{.mem},
960617642 .clobbers = .{ .eflags = true },
......@@ -9627,6 +17663,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
962717663 .unused,
962817664 .unused,
962917665 .unused,
17666 .unused,
17667 .unused,
17668 .unused,
963017669 },
963117670 .dst_temps = .{.mem},
963217671 .clobbers = .{ .eflags = true },
......@@ -9652,6 +17691,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
965217691 .unused,
965317692 .unused,
965417693 .unused,
17694 .unused,
17695 .unused,
17696 .unused,
965517697 },
965617698 .dst_temps = .{.mem},
965717699 .clobbers = .{ .eflags = true },
......@@ -9678,6 +17720,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
967817720 .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
967917721 .{ .type = .i64, .kind = .{ .rc = .general_purpose } },
968017722 .unused,
17723 .unused,
17724 .unused,
17725 .unused,
968117726 },
968217727 .dst_temps = .{.mem},
968317728 .clobbers = .{ .eflags = true },
......@@ -9699,15 +17744,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
969917744 .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ },
970017745 .{ ._, ._b, .j, .@"0b", ._, ._, ._ },
970117746 } },
17747 }, .{
17748 .required_features = .{ .avx, null, null, null },
17749 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
17750 .patterns = &.{
17751 .{ .src = .{ .to_sse, .none } },
17752 },
17753 .extra_temps = .{
17754 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17755 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17756 .unused,
17757 .unused,
17758 .unused,
17759 .unused,
17760 .unused,
17761 .unused,
17762 .unused,
17763 },
17764 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
17765 .each = .{ .once = &.{
17766 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17767 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
17768 } },
970217769 }, .{
970317770 .required_features = .{ .sse, null, null, null },
9704 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .dword } }, .any },
17771 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any },
970517772 .patterns = &.{
970617773 .{ .src = .{ .to_mut_sse, .none } },
970717774 },
970817775 .extra_temps = .{
970917776 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9710 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
17777 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17778 .unused,
17779 .unused,
17780 .unused,
971117781 .unused,
971217782 .unused,
971317783 .unused,
......@@ -9719,33 +17789,61 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
971917789 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
972017790 } },
972117791 }, .{
9722 .required_features = .{ .sse2, null, null, null },
9723 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any },
17792 .required_features = .{ .avx, null, null, null },
17793 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any },
972417794 .patterns = &.{
9725 .{ .src = .{ .to_mut_sse, .none } },
17795 .{ .src = .{ .to_sse, .none } },
17796 },
17797 .extra_temps = .{
17798 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17799 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17800 .unused,
17801 .unused,
17802 .unused,
17803 .unused,
17804 .unused,
17805 .unused,
17806 .unused,
17807 },
17808 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
17809 .each = .{ .once = &.{
17810 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17811 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
17812 } },
17813 }, .{
17814 .required_features = .{ .avx, null, null, null },
17815 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
17816 .patterns = &.{
17817 .{ .src = .{ .to_sse, .none } },
972617818 },
972717819 .extra_temps = .{
972817820 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9729 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
17821 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17822 .unused,
17823 .unused,
17824 .unused,
973017825 .unused,
973117826 .unused,
973217827 .unused,
973317828 .unused,
973417829 },
9735 .dst_temps = .{.{ .ref = .src0 }},
17830 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
973617831 .each = .{ .once = &.{
973717832 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9738 .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
17833 .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
973917834 } },
974017835 }, .{
9741 .required_features = .{ .sse, null, null, null },
9742 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any },
17836 .required_features = .{ .sse2, null, null, null },
17837 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any },
974317838 .patterns = &.{
974417839 .{ .src = .{ .to_mut_sse, .none } },
974517840 },
974617841 .extra_temps = .{
974717842 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9748 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
17843 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17844 .unused,
17845 .unused,
17846 .unused,
974917847 .unused,
975017848 .unused,
975117849 .unused,
......@@ -9754,210 +17852,383 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
975417852 .dst_temps = .{.{ .ref = .src0 }},
975517853 .each = .{ .once = &.{
975617854 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9757 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
17855 .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
975817856 } },
975917857 }, .{
976017858 .required_features = .{ .avx, null, null, null },
9761 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .dword } }, .any },
17859 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any },
976217860 .patterns = &.{
976317861 .{ .src = .{ .to_sse, .none } },
976417862 },
976517863 .extra_temps = .{
976617864 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9767 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
17865 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17866 .unused,
17867 .unused,
17868 .unused,
976817869 .unused,
976917870 .unused,
977017871 .unused,
977117872 .unused,
977217873 },
9773 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17874 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
977417875 .each = .{ .once = &.{
977517876 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9776 .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
17877 .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
17878 } },
17879 }, .{
17880 .required_features = .{ .x87, null, null, null },
17881 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any },
17882 .patterns = &.{
17883 .{ .src = .{ .mem, .none } },
17884 .{ .src = .{ .to_x87, .none } },
17885 },
17886 .extra_temps = .{
17887 .{ .type = .f80, .kind = .{ .reg = .st7 } },
17888 .unused,
17889 .unused,
17890 .unused,
17891 .unused,
17892 .unused,
17893 .unused,
17894 .unused,
17895 .unused,
17896 },
17897 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .x87 } }},
17898 .each = .{ .once = &.{
17899 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
17900 .{ ._, .f_, .abs, ._, ._, ._, ._ },
17901 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
977717902 } },
977817903 }, .{
977917904 .required_features = .{ .avx, null, null, null },
9780 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .qword } }, .any },
17905 .src_constraints = .{ .{ .scalar_any_float = .xword }, .any },
978117906 .patterns = &.{
978217907 .{ .src = .{ .to_sse, .none } },
978317908 },
978417909 .extra_temps = .{
978517910 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9786 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
17911 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17912 .unused,
17913 .unused,
17914 .unused,
978717915 .unused,
978817916 .unused,
978917917 .unused,
979017918 .unused,
979117919 },
9792 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17920 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
979317921 .each = .{ .once = &.{
979417922 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9795 .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
17923 .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
979617924 } },
979717925 }, .{
9798 .required_features = .{ .avx, null, null, null },
9799 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .yword, .is = .dword } }, .any },
17926 .required_features = .{ .sse2, null, null, null },
17927 .src_constraints = .{ .{ .scalar_any_float = .xword }, .any },
17928 .patterns = &.{
17929 .{ .src = .{ .to_mut_sse, .none } },
17930 },
17931 .extra_temps = .{
17932 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17933 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17934 .unused,
17935 .unused,
17936 .unused,
17937 .unused,
17938 .unused,
17939 .unused,
17940 .unused,
17941 },
17942 .dst_temps = .{.{ .ref = .src0 }},
17943 .each = .{ .once = &.{
17944 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17945 .{ ._, .p_, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
17946 } },
17947 }, .{
17948 .required_features = .{ .sse, null, null, null },
17949 .src_constraints = .{ .{ .scalar_any_float = .xword }, .any },
17950 .patterns = &.{
17951 .{ .src = .{ .to_mut_sse, .none } },
17952 },
17953 .extra_temps = .{
17954 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
17955 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
17956 .unused,
17957 .unused,
17958 .unused,
17959 .unused,
17960 .unused,
17961 .unused,
17962 .unused,
17963 },
17964 .dst_temps = .{.{ .ref = .src0 }},
17965 .each = .{ .once = &.{
17966 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
17967 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
17968 } },
17969 }, .{
17970 .required_features = .{ .avx2, null, null, null },
17971 .src_constraints = .{ .{ .scalar_any_float = .yword }, .any },
980017972 .patterns = &.{
980117973 .{ .src = .{ .to_sse, .none } },
980217974 },
980317975 .extra_temps = .{
980417976 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9805 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
17977 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
17978 .unused,
17979 .unused,
17980 .unused,
980617981 .unused,
980717982 .unused,
980817983 .unused,
980917984 .unused,
981017985 },
9811 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
17986 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
981217987 .each = .{ .once = &.{
981317988 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9814 .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
17989 .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
981517990 } },
981617991 }, .{
981717992 .required_features = .{ .avx, null, null, null },
9818 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .yword, .is = .qword } }, .any },
17993 .src_constraints = .{ .{ .scalar_any_float = .yword }, .any },
981917994 .patterns = &.{
982017995 .{ .src = .{ .to_sse, .none } },
982117996 },
982217997 .extra_temps = .{
982317998 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9824 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
17999 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
18000 .unused,
18001 .unused,
18002 .unused,
982518003 .unused,
982618004 .unused,
982718005 .unused,
982818006 .unused,
982918007 },
9830 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
18008 .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }},
983118009 .each = .{ .once = &.{
983218010 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
983318011 .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
983418012 } },
983518013 }, .{
9836 .required_features = .{ .x87, null, null, null },
9837 .src_constraints = .{ .{ .scalar_exact_float = .{ .of = .xword, .is = .tbyte } }, .any },
18014 .required_features = .{ .avx, null, null, null },
18015 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any },
983818016 .patterns = &.{
9839 .{ .src = .{ .to_x87, .none } },
18017 .{ .src = .{ .to_mem, .none } },
18018 },
18019 .extra_temps = .{
18020 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18021 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
18022 .{ .kind = .{ .rc = .sse } },
18023 .{ .kind = .{ .rc = .sse } },
18024 .unused,
18025 .unused,
18026 .unused,
18027 .unused,
18028 .unused,
984018029 },
9841 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .x87 } }},
9842 .clobbers = .{ .st = 1 },
18030 .dst_temps = .{.mem},
984318031 .each = .{ .once = &.{
9844 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
9845 .{ ._, .f_, .abs, ._, ._, ._, ._ },
9846 .{ ._, .f_p, .st, .dst0t, ._, ._, ._ },
18032 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
18033 .{ ._, .v_ps, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
18034 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18035 .{ .@"0:", .v_ps, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
18036 .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
18037 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18038 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
984718039 } },
984818040 }, .{
9849 .required_features = .{ .avx2, null, null, null },
9850 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
18041 .required_features = .{ .sse, null, null, null },
18042 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any },
985118043 .patterns = &.{
9852 .{ .src = .{ .to_sse, .none } },
18044 .{ .src = .{ .to_mem, .none } },
985318045 },
985418046 .extra_temps = .{
9855 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9856 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
18047 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18048 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
18049 .{ .kind = .{ .rc = .sse } },
18050 .{ .kind = .{ .rc = .sse } },
18051 .unused,
985718052 .unused,
985818053 .unused,
985918054 .unused,
986018055 .unused,
986118056 },
9862 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
18057 .dst_temps = .{.mem},
986318058 .each = .{ .once = &.{
986418059 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9865 .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
18060 .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
18061 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18062 .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
18063 .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
18064 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
18065 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18066 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
986618067 } },
986718068 }, .{
986818069 .required_features = .{ .avx, null, null, null },
9869 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
18070 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any },
987018071 .patterns = &.{
9871 .{ .src = .{ .to_sse, .none } },
18072 .{ .src = .{ .to_mem, .none } },
987218073 },
987318074 .extra_temps = .{
9874 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9875 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
18075 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18076 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
18077 .{ .kind = .{ .rc = .sse } },
18078 .{ .kind = .{ .rc = .sse } },
18079 .unused,
987618080 .unused,
987718081 .unused,
987818082 .unused,
987918083 .unused,
988018084 },
9881 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
18085 .dst_temps = .{.mem},
988218086 .each = .{ .once = &.{
988318087 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9884 .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ },
18088 .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
18089 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18090 .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
18091 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
18092 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18093 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
988518094 } },
988618095 }, .{
988718096 .required_features = .{ .sse2, null, null, null },
9888 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
18097 .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }, .any },
988918098 .patterns = &.{
9890 .{ .src = .{ .to_mut_sse, .none } },
18099 .{ .src = .{ .to_mem, .none } },
989118100 },
989218101 .extra_temps = .{
9893 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9894 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
18102 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18103 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
18104 .{ .kind = .{ .rc = .sse } },
18105 .{ .kind = .{ .rc = .sse } },
18106 .unused,
989518107 .unused,
989618108 .unused,
989718109 .unused,
989818110 .unused,
989918111 },
9900 .dst_temps = .{.{ .ref = .src0 }},
18112 .dst_temps = .{.mem},
990118113 .each = .{ .once = &.{
990218114 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9903 .{ ._, .p_, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
18115 .{ ._, ._pd, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
18116 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18117 .{ .@"0:", ._pd, .mova, .tmp3x, .tmp2x, ._, ._ },
18118 .{ ._, ._pd, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
18119 .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
18120 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18121 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
990418122 } },
990518123 }, .{
9906 .required_features = .{ .sse, null, null, null },
9907 .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any },
18124 .required_features = .{ .avx2, null, null, null },
18125 .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any },
990818126 .patterns = &.{
9909 .{ .src = .{ .to_mut_sse, .none } },
18127 .{ .src = .{ .to_mem, .none } },
991018128 },
991118129 .extra_temps = .{
9912 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9913 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
18130 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18131 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
18132 .{ .kind = .{ .rc = .sse } },
18133 .{ .kind = .{ .rc = .sse } },
18134 .unused,
991418135 .unused,
991518136 .unused,
991618137 .unused,
991718138 .unused,
991818139 },
9919 .dst_temps = .{.{ .ref = .src0 }},
18140 .dst_temps = .{.mem},
18141 .each = .{ .once = &.{
18142 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
18143 .{ ._, .v_dqa, .mov, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
18144 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18145 .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
18146 .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
18147 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18148 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18149 } },
18150 }, .{
18151 .required_features = .{ .avx, null, null, null },
18152 .src_constraints = .{ .{ .multiple_scalar_any_float = .yword }, .any },
18153 .patterns = &.{
18154 .{ .src = .{ .to_mem, .none } },
18155 },
18156 .extra_temps = .{
18157 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18158 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .yword } } },
18159 .{ .kind = .{ .rc = .sse } },
18160 .{ .kind = .{ .rc = .sse } },
18161 .unused,
18162 .unused,
18163 .unused,
18164 .unused,
18165 .unused,
18166 },
18167 .dst_temps = .{.mem},
992018168 .each = .{ .once = &.{
992118169 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9922 .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ },
18170 .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ },
18171 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18172 .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ },
18173 .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ },
18174 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18175 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
992318176 } },
992418177 }, .{
9925 .required_features = .{ .avx2, null, null, null },
9926 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any },
18178 .required_features = .{ .sse2, null, null, null },
18179 .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any },
992718180 .patterns = &.{
9928 .{ .src = .{ .to_sse, .none } },
18181 .{ .src = .{ .to_mem, .none } },
992918182 },
993018183 .extra_temps = .{
9931 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9932 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
18184 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18185 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
18186 .{ .kind = .{ .rc = .sse } },
18187 .{ .kind = .{ .rc = .sse } },
18188 .unused,
993318189 .unused,
993418190 .unused,
993518191 .unused,
993618192 .unused,
993718193 },
9938 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
18194 .dst_temps = .{.mem},
993918195 .each = .{ .once = &.{
994018196 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9941 .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
18197 .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
18198 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18199 .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ },
18200 .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
18201 .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
18202 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18203 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
994218204 } },
994318205 }, .{
9944 .required_features = .{ .avx, null, null, null },
9945 .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .xword } }, .any },
18206 .required_features = .{ .sse, null, null, null },
18207 .src_constraints = .{ .{ .multiple_scalar_any_float = .xword }, .any },
994618208 .patterns = &.{
9947 .{ .src = .{ .to_sse, .none } },
18209 .{ .src = .{ .to_mem, .none } },
994818210 },
994918211 .extra_temps = .{
9950 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
9951 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize = true } } },
18212 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18213 .{ .kind = .{ .smax_mem = .{ .ref = .src0, .vectorize_to = .xword } } },
18214 .{ .kind = .{ .rc = .sse } },
18215 .{ .kind = .{ .rc = .sse } },
18216 .unused,
995218217 .unused,
995318218 .unused,
995418219 .unused,
995518220 .unused,
995618221 },
9957 .dst_temps = .{.{ .mut_reg = .{ .ref = .src0, .rc = .sse } }},
18222 .dst_temps = .{.mem},
995818223 .each = .{ .once = &.{
995918224 .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ },
9960 .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ },
18225 .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ },
18226 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18227 .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ },
18228 .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
18229 .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ },
18230 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18231 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
996118232 } },
996218233 } }) catch |err| switch (err) {
996318234 error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{
......@@ -9967,10 +18238,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
996718238 }),
996818239 else => |e| return e,
996918240 };
9970 for (ops) |op| for (res) |r| {
9971 if (op.index == r.index) break;
9972 } else try op.die(cg);
9973 try res[0].moveTo(inst, cg);
18241 try res[0].finish(inst, &.{ty_op.operand}, &ops, cg);
997418242 },
997518243
997618244 .cmp_lt,
......@@ -10138,6 +18406,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1013818406 .unused,
1013918407 .unused,
1014018408 .unused,
18409 .unused,
18410 .unused,
18411 .unused,
1014118412 },
1014218413 .dst_temps = .{.{ .rc = .general_purpose }},
1014318414 .clobbers = .{ .eflags = true },
......@@ -10166,10 +18437,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1016618437 }),
1016718438 else => |e| return e,
1016818439 };
10169 for (ops) |op| for (res) |r| {
10170 if (op.index == r.index) break;
10171 } else try op.die(cg);
10172 try res[0].moveTo(inst, cg);
18440 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
1017318441 },
1017418442 .cmp_eq,
1017518443 .cmp_eq_optimized,
......@@ -10182,7 +18450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1018218450 }) else fallback: {
1018318451 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
1018418452 const scalar_ty = cg.typeOf(bin_op.lhs).scalarType(zcu);
10185 if (cg.intInfo(scalar_ty) == null) break :fallback try cg.airCmp(inst, switch (air_tag) {
18453 if (cg.intInfo(scalar_ty) == null and cg.floatBits(scalar_ty) == null) break :fallback try cg.airCmp(inst, switch (air_tag) {
1018618454 else => unreachable,
1018718455 .cmp_eq, .cmp_eq_optimized => .eq,
1018818456 .cmp_neq, .cmp_neq_optimized => .neq,
......@@ -10275,26 +18543,564 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1027518543 .unused,
1027618544 .unused,
1027718545 .unused,
18546 .unused,
18547 .unused,
18548 .unused,
18549 },
18550 .dst_temps = .{.{ .cc = cc }},
18551 .clobbers = .{ .eflags = true },
18552 .each = .{ .once = &.{
18553 .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ },
18554 .{ ._, .p_, .xor, .src0q, .src1q, ._, ._ },
18555 .{ ._, .p_b, .cmpeq, .tmp1q, .src0q, ._, ._ },
18556 .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ },
18557 .{ ._, ._, .xor, .tmp0d, .si(0xff), ._, ._ },
18558 } },
18559 }, .{
18560 .required_features = .{ .avx, null, null, null },
18561 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } },
18562 .patterns = &.{
18563 .{ .src = .{ .to_xmm, .mem } },
18564 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
18565 .{ .src = .{ .to_xmm, .to_xmm } },
18566 },
18567 .extra_temps = .{
18568 .{ .kind = .{ .rc = .sse } },
18569 .unused,
18570 .unused,
18571 .unused,
18572 .unused,
18573 .unused,
18574 .unused,
18575 .unused,
18576 .unused,
18577 },
18578 .dst_temps = .{.{ .cc = cc }},
18579 .clobbers = .{ .eflags = true },
18580 .each = .{ .once = &.{
18581 .{ ._, .vp_, .xor, .tmp0x, .src0x, .src1x, ._ },
18582 .{ ._, .vp_, .@"test", .tmp0x, .tmp0x, ._, ._ },
18583 } },
18584 }, .{
18585 .required_features = .{ .sse4_1, null, null, null },
18586 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } },
18587 .patterns = &.{
18588 .{ .src = .{ .to_mut_xmm, .mem } },
18589 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
18590 .{ .src = .{ .to_mut_xmm, .to_xmm } },
18591 },
18592 .dst_temps = .{.{ .cc = cc }},
18593 .clobbers = .{ .eflags = true },
18594 .each = .{ .once = &.{
18595 .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ },
18596 .{ ._, .p_, .@"test", .src0x, .src0x, ._, ._ },
18597 } },
18598 }, .{
18599 .required_features = .{ .sse2, null, null, null },
18600 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } },
18601 .patterns = &.{
18602 .{ .src = .{ .to_mut_xmm, .mem } },
18603 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
18604 .{ .src = .{ .to_mut_xmm, .to_xmm } },
18605 },
18606 .extra_temps = .{
18607 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
18608 .{ .kind = .{ .rc = .sse } },
18609 .unused,
18610 .unused,
18611 .unused,
18612 .unused,
18613 .unused,
18614 .unused,
18615 .unused,
18616 },
18617 .dst_temps = .{.{ .cc = cc }},
18618 .clobbers = .{ .eflags = true },
18619 .each = .{ .once = &.{
18620 .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
18621 .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ },
18622 .{ ._, .p_b, .cmpeq, .tmp1x, .src0x, ._, ._ },
18623 .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ },
18624 .{ ._, ._, .xor, .tmp0d, .si(0xffff), ._, ._ },
18625 } },
18626 }, .{
18627 .required_features = .{ .avx2, null, null, null },
18628 .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } },
18629 .patterns = &.{
18630 .{ .src = .{ .to_ymm, .mem } },
18631 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
18632 .{ .src = .{ .to_ymm, .to_ymm } },
18633 },
18634 .extra_temps = .{
18635 .{ .kind = .{ .rc = .sse } },
18636 .unused,
18637 .unused,
18638 .unused,
18639 .unused,
18640 .unused,
18641 .unused,
18642 .unused,
18643 .unused,
18644 },
18645 .dst_temps = .{.{ .cc = cc }},
18646 .clobbers = .{ .eflags = true },
18647 .each = .{ .once = &.{
18648 .{ ._, .vp_, .xor, .tmp0y, .src0y, .src1y, ._ },
18649 .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ },
18650 } },
18651 }, .{
18652 .required_features = .{ .avx, null, null, null },
18653 .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } },
18654 .patterns = &.{
18655 .{ .src = .{ .to_ymm, .mem } },
18656 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
18657 .{ .src = .{ .to_ymm, .to_ymm } },
18658 },
18659 .extra_temps = .{
18660 .{ .kind = .{ .rc = .sse } },
18661 .unused,
18662 .unused,
18663 .unused,
18664 .unused,
18665 .unused,
18666 .unused,
18667 .unused,
18668 .unused,
18669 },
18670 .dst_temps = .{.{ .cc = cc }},
18671 .clobbers = .{ .eflags = true },
18672 .each = .{ .once = &.{
18673 .{ ._, .v_pd, .xor, .tmp0y, .src0y, .src1y, ._ },
18674 .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ },
18675 } },
18676 }, .{
18677 .required_features = .{ .avx2, null, null, null },
18678 .src_constraints = .{
18679 .{ .remainder_int = .{ .of = .yword, .is = .xword } },
18680 .{ .remainder_int = .{ .of = .yword, .is = .xword } },
18681 },
18682 .patterns = &.{
18683 .{ .src = .{ .to_mem, .to_mem } },
18684 },
18685 .extra_temps = .{
18686 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18687 .{ .kind = .{ .rc = .sse } },
18688 .{ .kind = .{ .rc = .sse } },
18689 .unused,
18690 .unused,
18691 .unused,
18692 .unused,
18693 .unused,
18694 .unused,
18695 },
18696 .dst_temps = .{.{ .cc = cc }},
18697 .clobbers = .{ .eflags = true },
18698 .each = .{ .once = &.{
18699 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
18700 .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
18701 .{ .@"0:", .v_dqu, .mov, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ },
18702 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ },
18703 .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
18704 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18705 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18706 .{ ._, .v_dqa, .mov, .tmp2x, .memad(.src0x, .add_size, -16), ._, ._ },
18707 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memad(.src1x, .add_size, -16), ._ },
18708 .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
18709 .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
18710 } },
18711 }, .{
18712 .required_features = .{ .avx2, null, null, null },
18713 .src_constraints = .{
18714 .{ .remainder_int = .{ .of = .yword, .is = .yword } },
18715 .{ .remainder_int = .{ .of = .yword, .is = .yword } },
18716 },
18717 .patterns = &.{
18718 .{ .src = .{ .to_mem, .to_mem } },
18719 },
18720 .extra_temps = .{
18721 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18722 .{ .kind = .{ .rc = .sse } },
18723 .{ .kind = .{ .rc = .sse } },
18724 .unused,
18725 .unused,
18726 .unused,
18727 .unused,
18728 .unused,
18729 .unused,
18730 },
18731 .dst_temps = .{.{ .cc = cc }},
18732 .clobbers = .{ .eflags = true },
18733 .each = .{ .once = &.{
18734 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18735 .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
18736 .{ .@"0:", .v_dqu, .mov, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
18737 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ },
18738 .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
18739 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18740 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18741 .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
18742 } },
18743 }, .{
18744 .required_features = .{ .avx, null, null, null },
18745 .src_constraints = .{
18746 .{ .remainder_int = .{ .of = .yword, .is = .xword } },
18747 .{ .remainder_int = .{ .of = .yword, .is = .xword } },
18748 },
18749 .patterns = &.{
18750 .{ .src = .{ .to_mem, .to_mem } },
18751 },
18752 .extra_temps = .{
18753 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18754 .{ .kind = .{ .rc = .sse } },
18755 .{ .kind = .{ .rc = .sse } },
18756 .unused,
18757 .unused,
18758 .unused,
18759 .unused,
18760 .unused,
18761 .unused,
18762 },
18763 .dst_temps = .{.{ .cc = cc }},
18764 .clobbers = .{ .eflags = true },
18765 .each = .{ .once = &.{
18766 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
18767 .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
18768 .{ .@"0:", .v_pd, .movu, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ },
18769 .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ },
18770 .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
18771 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18772 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18773 .{ ._, .v_pd, .mova, .tmp2x, .memad(.src0x, .add_size, -16), ._, ._ },
18774 .{ ._, .v_pd, .xor, .tmp2x, .tmp2x, .memad(.src1x, .add_size, -16), ._ },
18775 .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
18776 .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
18777 } },
18778 }, .{
18779 .required_features = .{ .avx, null, null, null },
18780 .src_constraints = .{
18781 .{ .remainder_int = .{ .of = .yword, .is = .yword } },
18782 .{ .remainder_int = .{ .of = .yword, .is = .yword } },
18783 },
18784 .patterns = &.{
18785 .{ .src = .{ .to_mem, .to_mem } },
18786 },
18787 .extra_temps = .{
18788 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18789 .{ .kind = .{ .rc = .sse } },
18790 .{ .kind = .{ .rc = .sse } },
18791 .unused,
18792 .unused,
18793 .unused,
18794 .unused,
18795 .unused,
18796 .unused,
18797 },
18798 .dst_temps = .{.{ .cc = cc }},
18799 .clobbers = .{ .eflags = true },
18800 .each = .{ .once = &.{
18801 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18802 .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
18803 .{ .@"0:", .v_pd, .movu, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
18804 .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ },
18805 .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
18806 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
18807 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18808 .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
18809 } },
18810 }, .{
18811 .required_features = .{ .avx, null, null, null },
18812 .src_constraints = .{
18813 .{ .remainder_int = .{ .of = .xword, .is = .xword } },
18814 .{ .remainder_int = .{ .of = .xword, .is = .xword } },
18815 },
18816 .patterns = &.{
18817 .{ .src = .{ .to_mem, .to_mem } },
18818 },
18819 .extra_temps = .{
18820 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18821 .{ .kind = .{ .rc = .sse } },
18822 .{ .kind = .{ .rc = .sse } },
18823 .unused,
18824 .unused,
18825 .unused,
18826 .unused,
18827 .unused,
18828 .unused,
18829 },
18830 .dst_temps = .{.{ .cc = cc }},
18831 .clobbers = .{ .eflags = true },
18832 .each = .{ .once = &.{
18833 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18834 .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
18835 .{ .@"0:", .v_dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
18836 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._ },
18837 .{ ._, .vp_, .@"or", .tmp1x, .tmp1x, .tmp2x, ._ },
18838 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18839 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18840 .{ ._, .vp_, .@"test", .tmp1x, .tmp1x, ._, ._ },
18841 } },
18842 }, .{
18843 .required_features = .{ .sse4_1, null, null, null },
18844 .src_constraints = .{
18845 .{ .remainder_int = .{ .of = .xword, .is = .xword } },
18846 .{ .remainder_int = .{ .of = .xword, .is = .xword } },
18847 },
18848 .patterns = &.{
18849 .{ .src = .{ .to_mem, .to_mem } },
18850 },
18851 .extra_temps = .{
18852 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18853 .{ .kind = .{ .rc = .sse } },
18854 .{ .kind = .{ .rc = .sse } },
18855 .unused,
18856 .unused,
18857 .unused,
18858 .unused,
18859 .unused,
18860 .unused,
18861 },
18862 .dst_temps = .{.{ .cc = cc }},
18863 .clobbers = .{ .eflags = true },
18864 .each = .{ .once = &.{
18865 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18866 .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
18867 .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
18868 .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
18869 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
18870 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18871 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18872 .{ ._, .p_, .@"test", .tmp1x, .tmp1x, ._, ._ },
18873 } },
18874 }, .{
18875 .required_features = .{ .sse2, null, null, null },
18876 .src_constraints = .{
18877 .{ .remainder_int = .{ .of = .xword, .is = .xword } },
18878 .{ .remainder_int = .{ .of = .xword, .is = .xword } },
18879 },
18880 .patterns = &.{
18881 .{ .src = .{ .to_mem, .to_mem } },
18882 },
18883 .extra_temps = .{
18884 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18885 .{ .kind = .{ .rc = .sse } },
18886 .{ .kind = .{ .rc = .sse } },
18887 .unused,
18888 .unused,
18889 .unused,
18890 .unused,
18891 .unused,
18892 .unused,
18893 },
18894 .dst_temps = .{.{ .cc = cc }},
18895 .clobbers = .{ .eflags = true },
18896 .each = .{ .once = &.{
18897 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18898 .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
18899 .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
18900 .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
18901 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
18902 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
18903 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18904 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
18905 .{ ._, .p_b, .cmpeq, .tmp1x, .tmp2x, ._, ._ },
18906 .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ },
18907 .{ ._, ._, .cmp, .tmp0d, .si(0xffff), ._, ._ },
18908 } },
18909 }, .{
18910 .required_features = .{ .sse, .mmx, null, null },
18911 .src_constraints = .{
18912 .{ .remainder_int = .{ .of = .qword, .is = .qword } },
18913 .{ .remainder_int = .{ .of = .qword, .is = .qword } },
18914 },
18915 .patterns = &.{
18916 .{ .src = .{ .to_mem, .to_mem } },
18917 },
18918 .extra_temps = .{
18919 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18920 .{ .kind = .{ .rc = .mmx } },
18921 .{ .kind = .{ .rc = .mmx } },
18922 .unused,
18923 .unused,
18924 .unused,
18925 .unused,
18926 .unused,
18927 .unused,
18928 },
18929 .dst_temps = .{.{ .cc = cc }},
18930 .clobbers = .{ .eflags = true },
18931 .each = .{ .once = &.{
18932 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18933 .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ },
18934 .{ .@"0:", ._q, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
18935 .{ ._, .p_, .xor, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
18936 .{ ._, .p_, .@"or", .tmp1q, .tmp2q, ._, ._ },
18937 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
18938 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18939 .{ ._, .p_, .xor, .tmp2q, .tmp2q, ._, ._ },
18940 .{ ._, .p_b, .cmpeq, .tmp1q, .tmp2q, ._, ._ },
18941 .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ },
18942 .{ ._, ._, .cmp, .tmp0d, .si(0xff), ._, ._ },
18943 } },
18944 }, .{
18945 .src_constraints = .{
18946 .{ .remainder_int = .{ .of = .qword, .is = .qword } },
18947 .{ .remainder_int = .{ .of = .qword, .is = .qword } },
18948 },
18949 .patterns = &.{
18950 .{ .src = .{ .to_mem, .to_mem } },
18951 },
18952 .extra_temps = .{
18953 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
18954 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
18955 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
18956 .unused,
18957 .unused,
18958 .unused,
18959 .unused,
18960 .unused,
18961 .unused,
18962 },
18963 .dst_temps = .{.{ .cc = cc }},
18964 .clobbers = .{ .eflags = true },
18965 .each = .{ .once = &.{
18966 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
18967 .{ ._, ._, .xor, .tmp1p, .tmp1p, ._, ._ },
18968 .{ .@"0:", ._, .mov, .tmp2p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
18969 .{ ._, ._, .xor, .tmp2p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
18970 .{ ._, ._, .@"or", .tmp1p, .tmp2p, ._, ._ },
18971 .{ ._, ._, .add, .tmp0p, .sa(.tmp2, .add_size), ._, ._ },
18972 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
18973 .{ ._, ._, .@"test", .tmp1p, .tmp1p, ._, ._ },
18974 } },
18975 }, .{
18976 .required_features = .{ .f16c, null, null, null },
18977 .src_constraints = .{ .{ .float = .word }, .{ .float = .word } },
18978 .patterns = &.{
18979 .{ .src = .{ .to_sse, .to_sse } },
18980 },
18981 .extra_temps = .{
18982 .{ .kind = .{ .rc = .sse } },
18983 .{ .kind = .{ .rc = .sse } },
18984 .unused,
18985 .unused,
18986 .unused,
18987 .unused,
18988 .unused,
18989 .unused,
18990 .unused,
18991 },
18992 .dst_temps = .{.{ .cc = switch (cc) {
18993 else => unreachable,
18994 .e => .z_and_np,
18995 .ne => .nz_or_p,
18996 } }},
18997 .clobbers = .{ .eflags = true },
18998 .each = .{ .once = &.{
18999 .{ ._, .vp_, .unpcklwd, .tmp0x, .src0x, .src1x, ._ },
19000 .{ ._, .v_ps, .cvtph2, .tmp0x, .tmp0x, ._, ._ },
19001 .{ ._, .v_, .movshdup, .tmp1x, .tmp0x, ._, ._ },
19002 .{ ._, .v_ss, .ucomi, .tmp0x, .tmp1x, ._, ._ },
19003 } },
19004 }, .{
19005 .required_features = .{ .sse, null, null, null },
19006 .src_constraints = .{ .{ .float = .word }, .{ .float = .word } },
19007 .patterns = &.{
19008 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
19009 },
19010 .call_frame = .{ .alignment = .@"16" },
19011 .extra_temps = .{
19012 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
19013 else => unreachable,
19014 .e => "__eqhf2",
19015 .ne => "__nehf2",
19016 } } } },
19017 .{ .type = .i32, .kind = .{ .reg = .eax } },
19018 .unused,
19019 .unused,
19020 .unused,
19021 .unused,
19022 .unused,
19023 .unused,
19024 .unused,
19025 },
19026 .dst_temps = .{.{ .cc = cc }},
19027 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
19028 .each = .{ .once = &.{
19029 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
19030 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
19031 } },
19032 }, .{
19033 .required_features = .{ .avx, null, null, null },
19034 .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword } },
19035 .patterns = &.{
19036 .{ .src = .{ .to_sse, .mem } },
19037 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
19038 .{ .src = .{ .to_sse, .to_sse } },
19039 },
19040 .extra_temps = .{
19041 .{ .type = .f16, .kind = .{ .rc = .sse } },
19042 .{ .type = .f16, .kind = .{ .rc = .sse } },
19043 .unused,
19044 .unused,
19045 .unused,
19046 .unused,
19047 .unused,
19048 .unused,
19049 .unused,
19050 },
19051 .dst_temps = .{.{ .cc = switch (cc) {
19052 else => unreachable,
19053 .e => .z_and_np,
19054 .ne => .nz_or_p,
19055 } }},
19056 .clobbers = .{ .eflags = true },
19057 .each = .{ .once = &.{
19058 .{ ._, .v_ss, .ucomi, .src0x, .src1d, ._, ._ },
19059 } },
19060 }, .{
19061 .required_features = .{ .sse, null, null, null },
19062 .src_constraints = .{ .{ .float = .dword }, .{ .float = .dword } },
19063 .patterns = &.{
19064 .{ .src = .{ .to_sse, .mem } },
19065 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
19066 .{ .src = .{ .to_sse, .to_sse } },
19067 },
19068 .extra_temps = .{
19069 .{ .type = .f16, .kind = .{ .rc = .sse } },
19070 .{ .type = .f16, .kind = .{ .rc = .sse } },
19071 .unused,
19072 .unused,
19073 .unused,
19074 .unused,
19075 .unused,
19076 .unused,
19077 .unused,
1027819078 },
10279 .dst_temps = .{.{ .cc = cc }},
19079 .dst_temps = .{.{ .cc = switch (cc) {
19080 else => unreachable,
19081 .e => .z_and_np,
19082 .ne => .nz_or_p,
19083 } }},
1028019084 .clobbers = .{ .eflags = true },
1028119085 .each = .{ .once = &.{
10282 .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ },
10283 .{ ._, .p_, .xor, .src0q, .src1q, ._, ._ },
10284 .{ ._, .p_b, .cmpeq, .tmp1q, .src0q, ._, ._ },
10285 .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ },
10286 .{ ._, ._, .xor, .tmp0d, .si(0xff), ._, ._ },
19086 .{ ._, ._ss, .ucomi, .src0x, .src1d, ._, ._ },
1028719087 } },
1028819088 }, .{
10289 .required_features = .{ .avx, null, null, null },
10290 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } },
19089 .required_features = .{ .sse, null, null, null },
19090 .src_constraints = .{ .{ .float = .dword }, .{ .float = .word } },
1029119091 .patterns = &.{
10292 .{ .src = .{ .to_xmm, .mem } },
10293 .{ .src = .{ .mem, .to_xmm }, .commute = .{ 0, 1 } },
10294 .{ .src = .{ .to_xmm, .to_xmm } },
19092 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
1029519093 },
19094 .call_frame = .{ .alignment = .@"16" },
1029619095 .extra_temps = .{
10297 .{ .kind = .{ .rc = .sse } },
19096 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
19097 else => unreachable,
19098 .e => "__eqsf2",
19099 .ne => "__nesf2",
19100 } } } },
19101 .{ .type = .i32, .kind = .{ .reg = .eax } },
19102 .unused,
19103 .unused,
1029819104 .unused,
1029919105 .unused,
1030019106 .unused,
......@@ -10302,82 +19108,83 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1030219108 .unused,
1030319109 },
1030419110 .dst_temps = .{.{ .cc = cc }},
10305 .clobbers = .{ .eflags = true },
10306 .each = .{ .once = &.{
10307 .{ ._, .vp_, .xor, .tmp0x, .src0x, .src1x, ._ },
10308 .{ ._, .vp_, .@"test", .tmp0x, .tmp0x, ._, ._ },
10309 } },
10310 }, .{
10311 .required_features = .{ .sse4_1, null, null, null },
10312 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } },
10313 .patterns = &.{
10314 .{ .src = .{ .to_mut_xmm, .mem } },
10315 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
10316 .{ .src = .{ .to_mut_xmm, .to_xmm } },
10317 },
10318 .dst_temps = .{.{ .cc = cc }},
10319 .clobbers = .{ .eflags = true },
19111 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1032019112 .each = .{ .once = &.{
10321 .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ },
10322 .{ ._, .p_, .@"test", .src0x, .src0x, ._, ._ },
19113 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
19114 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1032319115 } },
1032419116 }, .{
10325 .required_features = .{ .sse2, null, null, null },
10326 .src_constraints = .{ .{ .int = .xword }, .{ .int = .xword } },
19117 .required_features = .{ .avx, null, null, null },
19118 .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } },
1032719119 .patterns = &.{
10328 .{ .src = .{ .to_mut_xmm, .mem } },
10329 .{ .src = .{ .mem, .to_mut_xmm }, .commute = .{ 0, 1 } },
10330 .{ .src = .{ .to_mut_xmm, .to_xmm } },
19120 .{ .src = .{ .to_sse, .mem } },
19121 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
19122 .{ .src = .{ .to_sse, .to_sse } },
1033119123 },
1033219124 .extra_temps = .{
10333 .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
10334 .{ .kind = .{ .rc = .sse } },
19125 .{ .type = .f16, .kind = .{ .rc = .sse } },
19126 .{ .type = .f16, .kind = .{ .rc = .sse } },
19127 .unused,
19128 .unused,
19129 .unused,
1033519130 .unused,
1033619131 .unused,
1033719132 .unused,
1033819133 .unused,
1033919134 },
10340 .dst_temps = .{.{ .cc = cc }},
19135 .dst_temps = .{.{ .cc = switch (cc) {
19136 else => unreachable,
19137 .e => .z_and_np,
19138 .ne => .nz_or_p,
19139 } }},
1034119140 .clobbers = .{ .eflags = true },
1034219141 .each = .{ .once = &.{
10343 .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
10344 .{ ._, .p_, .xor, .src0x, .src1x, ._, ._ },
10345 .{ ._, .p_b, .cmpeq, .tmp1x, .src0x, ._, ._ },
10346 .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ },
10347 .{ ._, ._, .xor, .tmp0d, .si(0xffff), ._, ._ },
19142 .{ ._, .v_sd, .ucomi, .src0x, .src1q, ._, ._ },
1034819143 } },
1034919144 }, .{
10350 .required_features = .{ .avx2, null, null, null },
10351 .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } },
19145 .required_features = .{ .sse2, null, null, null },
19146 .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } },
1035219147 .patterns = &.{
10353 .{ .src = .{ .to_ymm, .mem } },
10354 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
10355 .{ .src = .{ .to_ymm, .to_ymm } },
19148 .{ .src = .{ .to_sse, .mem } },
19149 .{ .src = .{ .mem, .to_sse }, .commute = .{ 0, 1 } },
19150 .{ .src = .{ .to_sse, .to_sse } },
1035619151 },
1035719152 .extra_temps = .{
10358 .{ .kind = .{ .rc = .sse } },
19153 .{ .type = .f16, .kind = .{ .rc = .sse } },
19154 .{ .type = .f16, .kind = .{ .rc = .sse } },
19155 .unused,
19156 .unused,
1035919157 .unused,
1036019158 .unused,
1036119159 .unused,
1036219160 .unused,
1036319161 .unused,
1036419162 },
10365 .dst_temps = .{.{ .cc = cc }},
19163 .dst_temps = .{.{ .cc = switch (cc) {
19164 else => unreachable,
19165 .e => .z_and_np,
19166 .ne => .nz_or_p,
19167 } }},
1036619168 .clobbers = .{ .eflags = true },
1036719169 .each = .{ .once = &.{
10368 .{ ._, .vp_, .xor, .tmp0y, .src0y, .src1y, ._ },
10369 .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ },
19170 .{ ._, ._sd, .ucomi, .src0x, .src1q, ._, ._ },
1037019171 } },
1037119172 }, .{
10372 .required_features = .{ .avx, null, null, null },
10373 .src_constraints = .{ .{ .int = .yword }, .{ .int = .yword } },
19173 .required_features = .{ .sse, null, null, null },
19174 .src_constraints = .{ .{ .float = .qword }, .{ .float = .qword } },
1037419175 .patterns = &.{
10375 .{ .src = .{ .to_ymm, .mem } },
10376 .{ .src = .{ .mem, .to_ymm }, .commute = .{ 0, 1 } },
10377 .{ .src = .{ .to_ymm, .to_ymm } },
19176 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
1037819177 },
19178 .call_frame = .{ .alignment = .@"16" },
1037919179 .extra_temps = .{
10380 .{ .kind = .{ .rc = .sse } },
19180 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
19181 else => unreachable,
19182 .e => "__eqdf2",
19183 .ne => "__nedf2",
19184 } } } },
19185 .{ .type = .i32, .kind = .{ .reg = .eax } },
19186 .unused,
19187 .unused,
1038119188 .unused,
1038219189 .unused,
1038319190 .unused,
......@@ -10385,109 +19192,112 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1038519192 .unused,
1038619193 },
1038719194 .dst_temps = .{.{ .cc = cc }},
10388 .clobbers = .{ .eflags = true },
19195 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1038919196 .each = .{ .once = &.{
10390 .{ ._, .v_pd, .xor, .tmp0y, .src0y, .src1y, ._ },
10391 .{ ._, .vp_, .@"test", .tmp0y, .tmp0y, ._, ._ },
19197 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
19198 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1039219199 } },
1039319200 }, .{
10394 .required_features = .{ .avx2, null, null, null },
10395 .src_constraints = .{
10396 .{ .remainder_int = .{ .of = .yword, .is = .xword } },
10397 .{ .remainder_int = .{ .of = .yword, .is = .xword } },
10398 },
19201 .required_features = .{ .x87, .cmov, null, null },
19202 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
1039919203 .patterns = &.{
10400 .{ .src = .{ .to_mem, .to_mem } },
19204 .{ .src = .{ .mem, .mem } },
1040119205 },
1040219206 .extra_temps = .{
10403 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10404 .{ .kind = .{ .rc = .sse } },
10405 .{ .kind = .{ .rc = .sse } },
19207 .{ .type = .f80, .kind = .{ .reg = .st6 } },
19208 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19209 .unused,
19210 .unused,
19211 .unused,
19212 .unused,
1040619213 .unused,
1040719214 .unused,
1040819215 .unused,
1040919216 },
10410 .dst_temps = .{.{ .cc = cc }},
19217 .dst_temps = .{.{ .cc = switch (cc) {
19218 else => unreachable,
19219 .e => .z_and_np,
19220 .ne => .nz_or_p,
19221 } }},
1041119222 .clobbers = .{ .eflags = true },
1041219223 .each = .{ .once = &.{
10413 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
10414 .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
10415 .{ .@"0:", .v_dqu, .mov, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ },
10416 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ },
10417 .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
10418 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10419 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10420 .{ ._, .v_dqa, .mov, .tmp2x, .memad(.src0x, .add_size, -16), ._, ._ },
10421 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memad(.src1x, .add_size, -16), ._ },
10422 .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
10423 .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
19224 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
19225 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19226 .{ ._, .f_p, .ucomi, .tmp0t, .tmp1t, ._, ._ },
19227 .{ ._, .f_p, .st, .tmp1t, ._, ._, ._ },
1042419228 } },
1042519229 }, .{
10426 .required_features = .{ .avx2, null, null, null },
19230 .required_features = .{ .x87, .cmov, null, null },
19231 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
1042719232 .patterns = &.{
10428 .{ .src = .{ .to_mem, .to_mem } },
19233 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
19234 .{ .src = .{ .mem, .to_x87 } },
19235 .{ .src = .{ .to_x87, .to_x87 } },
1042919236 },
1043019237 .extra_temps = .{
10431 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10432 .{ .kind = .{ .rc = .sse } },
10433 .{ .kind = .{ .rc = .sse } },
19238 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19239 .unused,
19240 .unused,
19241 .unused,
19242 .unused,
19243 .unused,
1043419244 .unused,
1043519245 .unused,
1043619246 .unused,
1043719247 },
10438 .dst_temps = .{.{ .cc = cc }},
19248 .dst_temps = .{.{ .cc = switch (cc) {
19249 else => unreachable,
19250 .e => .z_and_np,
19251 .ne => .nz_or_p,
19252 } }},
1043919253 .clobbers = .{ .eflags = true },
1044019254 .each = .{ .once = &.{
10441 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10442 .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
10443 .{ .@"0:", .v_dqu, .mov, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10444 .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ },
10445 .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
10446 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10447 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10448 .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
19255 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19256 .{ ._, .f_p, .ucomi, .tmp0t, .src1t, ._, ._ },
1044919257 } },
1045019258 }, .{
10451 .required_features = .{ .avx, null, null, null },
10452 .src_constraints = .{
10453 .{ .remainder_int = .{ .of = .yword, .is = .xword } },
10454 .{ .remainder_int = .{ .of = .yword, .is = .xword } },
10455 },
19259 .required_features = .{ .sahf, .x87, null, null },
19260 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
1045619261 .patterns = &.{
10457 .{ .src = .{ .to_mem, .to_mem } },
19262 .{ .src = .{ .mem, .mem } },
1045819263 },
1045919264 .extra_temps = .{
10460 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10461 .{ .kind = .{ .rc = .sse } },
10462 .{ .kind = .{ .rc = .sse } },
19265 .{ .type = .f80, .kind = .{ .reg = .st6 } },
19266 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19267 .{ .type = .u8, .kind = .{ .reg = .ah } },
19268 .unused,
19269 .unused,
19270 .unused,
1046319271 .unused,
1046419272 .unused,
1046519273 .unused,
1046619274 },
10467 .dst_temps = .{.{ .cc = cc }},
19275 .dst_temps = .{.{ .cc = switch (cc) {
19276 else => unreachable,
19277 .e => .z_and_np,
19278 .ne => .nz_or_p,
19279 } }},
1046819280 .clobbers = .{ .eflags = true },
1046919281 .each = .{ .once = &.{
10470 .{ ._, ._, .mov, .tmp0p, .sia(16, .src0, .sub_size), ._, ._ },
10471 .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
10472 .{ .@"0:", .v_pd, .movu, .tmp2y, .memiad(.src0y, .tmp0, .add_size, -16), ._, ._ },
10473 .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memiad(.src1y, .tmp0, .add_size, -16), ._ },
10474 .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
10475 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10476 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10477 .{ ._, .v_pd, .mova, .tmp2x, .memad(.src0x, .add_size, -16), ._, ._ },
10478 .{ ._, .v_pd, .xor, .tmp2x, .tmp2x, .memad(.src1x, .add_size, -16), ._ },
10479 .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
10480 .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
19282 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
19283 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19284 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
19285 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
19286 .{ ._, ._, .sahf, ._, ._, ._, ._ },
1048119287 } },
1048219288 }, .{
10483 .required_features = .{ .avx, null, null, null },
19289 .required_features = .{ .@"64bit", .x87, null, null },
19290 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
1048419291 .patterns = &.{
10485 .{ .src = .{ .to_mem, .to_mem } },
19292 .{ .src = .{ .mem, .mem } },
1048619293 },
1048719294 .extra_temps = .{
10488 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10489 .{ .kind = .{ .rc = .sse } },
10490 .{ .kind = .{ .rc = .sse } },
19295 .{ .type = .f80, .kind = .{ .reg = .st6 } },
19296 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19297 .{ .type = .u8, .kind = .{ .reg = .ah } },
19298 .unused,
19299 .unused,
19300 .unused,
1049119301 .unused,
1049219302 .unused,
1049319303 .unused,
......@@ -10495,74 +19305,89 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1049519305 .dst_temps = .{.{ .cc = cc }},
1049619306 .clobbers = .{ .eflags = true },
1049719307 .each = .{ .once = &.{
10498 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10499 .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
10500 .{ .@"0:", .v_pd, .movu, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
10501 .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ },
10502 .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
10503 .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ },
10504 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10505 .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
19308 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
19309 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19310 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
19311 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
19312 .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ },
19313 .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ },
1050619314 } },
1050719315 }, .{
10508 .required_features = .{ .avx, null, null, null },
19316 .required_features = .{ .x87, null, null, null },
19317 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
1050919318 .patterns = &.{
10510 .{ .src = .{ .to_mem, .to_mem } },
19319 .{ .src = .{ .mem, .mem } },
1051119320 },
1051219321 .extra_temps = .{
10513 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10514 .{ .kind = .{ .rc = .sse } },
10515 .{ .kind = .{ .rc = .sse } },
19322 .{ .type = .f80, .kind = .{ .reg = .st6 } },
19323 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19324 .{ .type = .u8, .kind = .{ .reg = .ah } },
19325 .unused,
19326 .unused,
19327 .unused,
1051619328 .unused,
1051719329 .unused,
1051819330 .unused,
1051919331 },
10520 .dst_temps = .{.{ .cc = cc }},
19332 .dst_temps = .{.{ .cc = switch (cc) {
19333 else => unreachable,
19334 .e => .z_and_np,
19335 .ne => .nz_or_p,
19336 } }},
1052119337 .clobbers = .{ .eflags = true },
1052219338 .each = .{ .once = &.{
10523 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10524 .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
10525 .{ .@"0:", .v_dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10526 .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._ },
10527 .{ ._, .vp_, .@"or", .tmp1x, .tmp1x, .tmp2x, ._ },
10528 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10529 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10530 .{ ._, .vp_, .@"test", .tmp1x, .tmp1x, ._, ._ },
19339 .{ ._, .f_, .ld, .src1t, ._, ._, ._ },
19340 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19341 .{ ._, .f_pp, .ucom, ._, ._, ._, ._ },
19342 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
19343 .{ ._, ._, .sahf, ._, ._, ._, ._ },
1053119344 } },
1053219345 }, .{
10533 .required_features = .{ .sse4_1, null, null, null },
19346 .required_features = .{ .sahf, .x87, null, null },
19347 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
1053419348 .patterns = &.{
10535 .{ .src = .{ .to_mem, .to_mem } },
19349 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
19350 .{ .src = .{ .mem, .to_x87 } },
19351 .{ .src = .{ .to_x87, .to_x87 } },
1053619352 },
1053719353 .extra_temps = .{
10538 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10539 .{ .kind = .{ .rc = .sse } },
10540 .{ .kind = .{ .rc = .sse } },
19354 .{ .type = .f80, .kind = .{ .reg = .st6 } },
19355 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19356 .{ .type = .u16, .kind = .{ .reg = .ah } },
19357 .unused,
19358 .unused,
19359 .unused,
1054119360 .unused,
1054219361 .unused,
1054319362 .unused,
1054419363 },
10545 .dst_temps = .{.{ .cc = cc }},
19364 .dst_temps = .{.{ .cc = switch (cc) {
19365 else => unreachable,
19366 .e => .z_and_np,
19367 .ne => .nz_or_p,
19368 } }},
1054619369 .clobbers = .{ .eflags = true },
1054719370 .each = .{ .once = &.{
10548 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10549 .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
10550 .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10551 .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10552 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
10553 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10554 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10555 .{ ._, .p_, .@"test", .tmp1x, .tmp1x, ._, ._ },
19371 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19372 .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
19373 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
19374 .{ ._, ._, .sahf, ._, ._, ._, ._ },
1055619375 } },
1055719376 }, .{
10558 .required_features = .{ .sse2, null, null, null },
19377 .required_features = .{ .@"64bit", .x87, null, null },
19378 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
1055919379 .patterns = &.{
10560 .{ .src = .{ .to_mem, .to_mem } },
19380 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
19381 .{ .src = .{ .mem, .to_x87 } },
19382 .{ .src = .{ .to_x87, .to_x87 } },
1056119383 },
1056219384 .extra_temps = .{
10563 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10564 .{ .kind = .{ .rc = .sse } },
10565 .{ .kind = .{ .rc = .sse } },
19385 .{ .type = .f80, .kind = .{ .reg = .st6 } },
19386 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19387 .{ .type = .u8, .kind = .{ .reg = .ah } },
19388 .unused,
19389 .unused,
19390 .unused,
1056619391 .unused,
1056719392 .unused,
1056819393 .unused,
......@@ -10570,69 +19395,70 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1057019395 .dst_temps = .{.{ .cc = cc }},
1057119396 .clobbers = .{ .eflags = true },
1057219397 .each = .{ .once = &.{
10573 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10574 .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
10575 .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
10576 .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
10577 .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
10578 .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ },
10579 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10580 .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
10581 .{ ._, .p_b, .cmpeq, .tmp1x, .tmp2x, ._, ._ },
10582 .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ },
10583 .{ ._, ._, .cmp, .tmp0d, .si(0xffff), ._, ._ },
19398 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19399 .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
19400 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
19401 .{ ._, ._, .xor, .tmp2b, .si(0b0_1_000_000), ._, ._ },
19402 .{ ._, ._, .@"test", .tmp2b, .si(0b0_1_000_100), ._, ._ },
1058419403 } },
1058519404 }, .{
10586 .required_features = .{ .sse, .mmx, null, null },
19405 .required_features = .{ .x87, null, null, null },
19406 .src_constraints = .{ .{ .float = .tbyte }, .{ .float = .tbyte } },
1058719407 .patterns = &.{
10588 .{ .src = .{ .to_mem, .to_mem } },
19408 .{ .src = .{ .to_x87, .mem }, .commute = .{ 0, 1 } },
19409 .{ .src = .{ .mem, .to_x87 } },
19410 .{ .src = .{ .to_x87, .to_x87 } },
1058919411 },
1059019412 .extra_temps = .{
10591 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10592 .{ .kind = .{ .rc = .mmx } },
10593 .{ .kind = .{ .rc = .mmx } },
19413 .{ .type = .f80, .kind = .{ .reg = .st6 } },
19414 .{ .type = .f80, .kind = .{ .reg = .st7 } },
19415 .{ .type = .u16, .kind = .{ .reg = .ah } },
19416 .unused,
19417 .unused,
19418 .unused,
1059419419 .unused,
1059519420 .unused,
1059619421 .unused,
1059719422 },
10598 .dst_temps = .{.{ .cc = cc }},
19423 .dst_temps = .{.{ .cc = switch (cc) {
19424 else => unreachable,
19425 .e => .z_and_np,
19426 .ne => .nz_or_p,
19427 } }},
1059919428 .clobbers = .{ .eflags = true },
1060019429 .each = .{ .once = &.{
10601 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10602 .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ },
10603 .{ .@"0:", ._q, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
10604 .{ ._, .p_, .xor, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
10605 .{ ._, .p_, .@"or", .tmp1q, .tmp2q, ._, ._ },
10606 .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ },
10607 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10608 .{ ._, .p_, .xor, .tmp2q, .tmp2q, ._, ._ },
10609 .{ ._, .p_b, .cmpeq, .tmp1q, .tmp2q, ._, ._ },
10610 .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ },
10611 .{ ._, ._, .cmp, .tmp0d, .si(0xff), ._, ._ },
19430 .{ ._, .f_, .ld, .src0t, ._, ._, ._ },
19431 .{ ._, .f_p, .ucom, .src1t, ._, ._, ._ },
19432 .{ ._, .fn_sw, .st, .tmp2w, ._, ._, ._ },
19433 .{ ._, ._, .sahf, ._, ._, ._, ._ },
1061219434 } },
1061319435 }, .{
19436 .required_features = .{ .sse, null, null, null },
19437 .src_constraints = .{ .{ .float = .xword }, .{ .float = .xword } },
1061419438 .patterns = &.{
10615 .{ .src = .{ .to_mem, .to_mem } },
19439 .{ .src = .{ .{ .to_reg = .xmm0 }, .{ .to_reg = .xmm1 } } },
1061619440 },
19441 .call_frame = .{ .alignment = .@"16" },
1061719442 .extra_temps = .{
10618 .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
10619 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
10620 .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
19443 .{ .type = .usize, .kind = .{ .symbol = &.{ .name = switch (cc) {
19444 else => unreachable,
19445 .e => "__eqtf2",
19446 .ne => "__netf2",
19447 } } } },
19448 .{ .type = .i32, .kind = .{ .reg = .eax } },
19449 .unused,
19450 .unused,
19451 .unused,
19452 .unused,
1062119453 .unused,
1062219454 .unused,
1062319455 .unused,
1062419456 },
1062519457 .dst_temps = .{.{ .cc = cc }},
10626 .clobbers = .{ .eflags = true },
19458 .clobbers = .{ .eflags = true, .caller_preserved = .ccc },
1062719459 .each = .{ .once = &.{
10628 .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ },
10629 .{ ._, ._, .xor, .tmp1p, .tmp1p, ._, ._ },
10630 .{ .@"0:", ._, .mov, .tmp2p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
10631 .{ ._, ._, .xor, .tmp2p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
10632 .{ ._, ._, .@"or", .tmp1p, .tmp2p, ._, ._ },
10633 .{ ._, ._, .add, .tmp0p, .sa(.tmp2, .add_size), ._, ._ },
10634 .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
10635 .{ ._, ._, .@"test", .tmp1p, .tmp1p, ._, ._ },
19460 .{ ._, ._, .call, .tmp0d, ._, ._, ._ },
19461 .{ ._, ._, .@"test", .tmp1d, .tmp1d, ._, ._ },
1063619462 } },
1063719463 } },
1063819464 }) catch |err| switch (err) {
......@@ -10644,10 +19470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1064419470 }),
1064519471 else => |e| return e,
1064619472 };
10647 for (ops) |op| for (res) |r| {
10648 if (op.index == r.index) break;
10649 } else try op.die(cg);
10650 try res[0].moveTo(inst, cg);
19473 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
1065119474 },
1065219475
1065319476 .cond_br => try cg.airCondBr(inst),
......@@ -10718,9 +19541,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1071819541 .fromSize(opt_child_abi_size) }),
1071919542 .u(0),
1072019543 );
10721 var is_null = try cg.tempInit(.bool, .{ .eflags = .e });
10722 try ops[0].die(cg);
10723 try is_null.moveTo(inst, cg);
19544 const is_null = try cg.tempInit(.bool, .{ .eflags = .e });
19545 try is_null.finish(inst, &.{un_op}, &ops, cg);
1072419546 },
1072519547 .is_non_null_ptr => if (use_old) try cg.airIsNonNullPtr(inst) else {
1072619548 const un_op = air_datas[@intFromEnum(inst)].un_op;
......@@ -10741,9 +19563,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1074119563 .fromSize(opt_child_abi_size) }),
1074219564 .u(0),
1074319565 );
10744 var is_non_null = try cg.tempInit(.bool, .{ .eflags = .ne });
10745 try ops[0].die(cg);
10746 try is_non_null.moveTo(inst, cg);
19566 const is_non_null = try cg.tempInit(.bool, .{ .eflags = .ne });
19567 try is_non_null.finish(inst, &.{un_op}, &ops, cg);
1074719568 },
1074819569 .is_err_ptr => if (use_old) try cg.airIsErrPtr(inst) else {
1074919570 const un_op = air_datas[@intFromEnum(inst)].un_op;
......@@ -10759,9 +19580,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1075919580 try ops[0].tracking(cg).short.deref().mem(cg, .{ .size = cg.memSize(eu_err_ty) }),
1076019581 .u(0),
1076119582 );
10762 var is_err = try cg.tempInit(.bool, .{ .eflags = .ne });
10763 try ops[0].die(cg);
10764 try is_err.moveTo(inst, cg);
19583 const is_err = try cg.tempInit(.bool, .{ .eflags = .ne });
19584 try is_err.finish(inst, &.{un_op}, &ops, cg);
1076519585 },
1076619586 .is_non_err_ptr => if (use_old) try cg.airIsNonErrPtr(inst) else {
1076719587 const un_op = air_datas[@intFromEnum(inst)].un_op;
......@@ -10777,9 +19597,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1077719597 try ops[0].tracking(cg).short.deref().mem(cg, .{ .size = cg.memSize(eu_err_ty) }),
1077819598 .u(0),
1077919599 );
10780 var is_non_err = try cg.tempInit(.bool, .{ .eflags = .e });
10781 try ops[0].die(cg);
10782 try is_non_err.moveTo(inst, cg);
19600 const is_non_err = try cg.tempInit(.bool, .{ .eflags = .e });
19601 try is_non_err.finish(inst, &.{un_op}, &ops, cg);
1078319602 },
1078419603 .load => if (use_old) try cg.airLoad(inst) else fallback: {
1078519604 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
......@@ -10790,26 +19609,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1079019609 (ptr_info.flags.vector_index == .none or val_ty.toIntern() == .bool_type))
1079119610 break :fallback try cg.airLoad(inst);
1079219611 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
10793 var res = try ops[0].load(val_ty, .{
19612 const res = try ops[0].load(val_ty, .{
1079419613 .disp = switch (ptr_info.flags.vector_index) {
1079519614 .none => 0,
1079619615 .runtime => unreachable,
1079719616 else => |vector_index| @intCast(val_ty.abiSize(zcu) * @intFromEnum(vector_index)),
1079819617 },
1079919618 }, cg);
10800 for (ops) |op| if (op.index != res.index) try op.die(cg);
10801 try res.moveTo(inst, cg);
19619 try res.finish(inst, &.{ty_op.operand}, &ops, cg);
1080219620 },
1080319621 .int_from_ptr => if (use_old) try cg.airIntFromPtr(inst) else {
1080419622 const un_op = air_datas[@intFromEnum(inst)].un_op;
1080519623 var ops = try cg.tempsFromOperands(inst, .{un_op});
1080619624 try ops[0].toSlicePtr(cg);
10807 try ops[0].moveTo(inst, cg);
19625 try ops[0].finish(inst, &.{un_op}, &ops, cg);
1080819626 },
1080919627 .int_from_bool => if (use_old) try cg.airIntFromBool(inst) else {
1081019628 const un_op = air_datas[@intFromEnum(inst)].un_op;
10811 var ops = try cg.tempsFromOperands(inst, .{un_op});
10812 try ops[0].moveTo(inst, cg);
19629 const ops = try cg.tempsFromOperands(inst, .{un_op});
19630 try ops[0].finish(inst, &.{un_op}, &ops, cg);
1081319631 },
1081419632 .ret => try cg.airRet(inst, false),
1081519633 .ret_safe => try cg.airRet(inst, true),
......@@ -10848,8 +19666,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1084819666 .unreach => {},
1084919667 .optional_payload_ptr => if (use_old) try cg.airOptionalPayloadPtr(inst) else {
1085019668 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
10851 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
10852 try ops[0].moveTo(inst, cg);
19669 const ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
19670 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1085319671 },
1085419672 .optional_payload_ptr_set => if (use_old) try cg.airOptionalPayloadPtrSet(inst) else {
1085519673 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
......@@ -10864,7 +19682,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1086419682 try has_value.die(cg);
1086519683 try ops[0].toOffset(-opt_child_abi_size, cg);
1086619684 }
10867 try ops[0].moveTo(inst, cg);
19685 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1086819686 },
1086919687 .unwrap_errunion_payload_ptr => if (use_old) try cg.airUnwrapErrUnionPayloadPtr(inst) else {
1087019688 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
......@@ -10873,7 +19691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1087319691 const eu_pl_off: i32 = @intCast(codegen.errUnionPayloadOffset(eu_pl_ty, zcu));
1087419692 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
1087519693 try ops[0].toOffset(eu_pl_off, cg);
10876 try ops[0].moveTo(inst, cg);
19694 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1087719695 },
1087819696 .unwrap_errunion_err_ptr => if (use_old) try cg.airUnwrapErrUnionErrPtr(inst) else {
1087919697 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
......@@ -10882,9 +19700,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1088219700 const eu_err_off: i32 = @intCast(codegen.errUnionErrorOffset(eu_pl_ty, zcu));
1088319701 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
1088419702 try ops[0].toOffset(eu_err_off, cg);
10885 var err = try ops[0].load(eu_ty.errorUnionSet(zcu), .{}, cg);
10886 try ops[0].die(cg);
10887 try err.moveTo(inst, cg);
19703 const err = try ops[0].load(eu_ty.errorUnionSet(zcu), .{}, cg);
19704 try err.finish(inst, &.{ty_op.operand}, &ops, cg);
1088819705 },
1088919706 .errunion_payload_ptr_set => if (use_old) try cg.airErrUnionPayloadPtrSet(inst) else {
1089019707 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
......@@ -10899,7 +19716,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1089919716 try ops[0].store(&no_err, .{}, cg);
1090019717 try no_err.die(cg);
1090119718 try ops[0].toOffset(eu_pl_off - eu_err_off, cg);
10902 try ops[0].moveTo(inst, cg);
19719 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1090319720 },
1090419721 .struct_field_ptr => if (use_old) try cg.airStructFieldPtr(inst) else {
1090519722 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
......@@ -10910,7 +19727,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1091019727 ty_pl.ty.toType(),
1091119728 extra.field_index,
1091219729 ), cg);
10913 try ops[0].moveTo(inst, cg);
19730 try ops[0].finish(inst, &.{extra.struct_operand}, &ops, cg);
1091419731 },
1091519732 .struct_field_ptr_index_0,
1091619733 .struct_field_ptr_index_1,
......@@ -10936,7 +19753,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1093619753 .struct_field_ptr_index_3 => 3,
1093719754 },
1093819755 ), cg);
10939 try ops[0].moveTo(inst, cg);
19756 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1094019757 },
1094119758 .struct_field_val => if (use_old) try cg.airStructFieldVal(inst) else fallback: {
1094219759 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
......@@ -10953,8 +19770,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1095319770 try ops[0].read(field_ty, .{ .disp = field_off }, cg)
1095419771 else
1095519772 try cg.tempInit(field_ty, .none);
10956 for (ops) |op| if (op.index != res.index) try op.die(cg);
10957 try res.moveTo(inst, cg);
19773 try res.finish(inst, &.{extra.struct_operand}, &ops, cg);
1095819774 },
1095919775 .set_union_tag => if (use_old) try cg.airSetUnionTag(inst) else {
1096019776 const bin_op = air_datas[@intFromEnum(inst)].bin_op;
......@@ -10965,7 +19781,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1096519781 if (union_layout.tag_size > 0) try ops[0].store(&ops[1], .{
1096619782 .disp = @intCast(union_layout.tagOffset()),
1096719783 }, cg);
10968 for (ops) |op| try op.die(cg);
19784 const res = try cg.tempInit(.void, .none);
19785 try res.finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
1096919786 },
1097019787 .get_union_tag => if (use_old) try cg.airGetUnionTag(inst) else {
1097119788 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
......@@ -10973,42 +19790,41 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1097319790 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
1097419791 const union_layout = union_ty.unionGetLayout(zcu);
1097519792 assert(union_layout.tag_size > 0);
10976 var res = try ops[0].read(ty_op.ty.toType(), .{
19793 const res = try ops[0].read(ty_op.ty.toType(), .{
1097719794 .disp = @intCast(union_layout.tagOffset()),
1097819795 }, cg);
10979 for (ops) |op| if (op.index != res.index) try op.die(cg);
10980 try res.moveTo(inst, cg);
19796 try res.finish(inst, &.{ty_op.operand}, &ops, cg);
1098119797 },
1098219798 .slice => if (use_old) try cg.airSlice(inst) else {
1098319799 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
1098419800 const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data;
1098519801 var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs });
1098619802 try ops[0].toPair(&ops[1], cg);
10987 try ops[0].moveTo(inst, cg);
19803 try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
1098819804 },
1098919805 .slice_len => if (use_old) try cg.airSliceLen(inst) else {
1099019806 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
1099119807 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
1099219808 try ops[0].toSliceLen(cg);
10993 try ops[0].moveTo(inst, cg);
19809 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1099419810 },
1099519811 .slice_ptr => if (use_old) try cg.airSlicePtr(inst) else {
1099619812 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
1099719813 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
1099819814 try ops[0].toSlicePtr(cg);
10999 try ops[0].moveTo(inst, cg);
19815 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1100019816 },
1100119817 .ptr_slice_len_ptr => if (use_old) try cg.airPtrSliceLenPtr(inst) else {
1100219818 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
1100319819 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
1100419820 try ops[0].toOffset(8, cg);
11005 try ops[0].moveTo(inst, cg);
19821 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1100619822 },
1100719823 .ptr_slice_ptr_ptr => if (use_old) try cg.airPtrSlicePtrPtr(inst) else {
1100819824 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
1100919825 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
1101019826 try ops[0].toOffset(0, cg);
11011 try ops[0].moveTo(inst, cg);
19827 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1101219828 },
1101319829 .slice_elem_val, .ptr_elem_val => |air_tag| if (use_old) switch (air_tag) {
1101419830 else => unreachable,
......@@ -11139,10 +19955,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1113919955 // hack around Sema OPV bugs
1114019956 res[0] = try cg.tempInit(res_ty, .none);
1114119957 }
11142 for (ops) |op| for (res) |r| {
11143 if (op.index == r.index) break;
11144 } else try op.die(cg);
11145 try res[0].moveTo(inst, cg);
19958 try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
1114619959 },
1114719960 .slice_elem_ptr, .ptr_elem_ptr => |air_tag| if (use_old) switch (air_tag) {
1114819961 else => unreachable,
......@@ -11195,8 +20008,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1119520008 } },
1119620009 });
1119720010 }
11198 try ops[1].die(cg);
11199 try ops[0].moveTo(inst, cg);
20011 try ops[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
1120020012 },
1120120013 .array_to_slice => if (use_old) try cg.airArrayToSlice(inst) else {
1120220014 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
......@@ -11205,7 +20017,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1120520017 .immediate = cg.typeOf(ty_op.operand).childType(zcu).arrayLen(zcu),
1120620018 });
1120720019 try ops[0].toPair(&len, cg);
11208 try ops[0].moveTo(inst, cg);
20020 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1120920021 },
1121020022 .error_set_has_value => return cg.fail("TODO implement error_set_has_value", .{}),
1121120023 .union_init => if (use_old) try cg.airUnionInit(inst) else {
......@@ -11228,8 +20040,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1122820040 try res.write(&ops[0], .{
1122920041 .disp = @intCast(union_layout.payloadOffset()),
1123020042 }, cg);
11231 try ops[0].die(cg);
11232 try res.moveTo(inst, cg);
20043 try res.finish(inst, &.{extra.init}, &ops, cg);
1123320044 },
1123420045 .field_parent_ptr => if (use_old) try cg.airFieldParentPtr(inst) else {
1123520046 const ty_pl = air_datas[@intFromEnum(inst)].ty_pl;
......@@ -11240,7 +20051,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1124020051 cg.typeOf(extra.field_ptr),
1124120052 extra.field_index,
1124220053 ), cg);
11243 try ops[0].moveTo(inst, cg);
20054 try ops[0].finish(inst, &.{extra.field_ptr}, &ops, cg);
1124420055 },
1124520056
1124620057 .is_named_enum_value => return cg.fail("TODO implement is_named_enum_value", .{}),
......@@ -11250,7 +20061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1125020061
1125120062 .err_return_trace => {
1125220063 const ert: Temp = .{ .index = err_ret_trace_index };
11253 try ert.moveTo(inst, cg);
20064 try ert.finish(inst, &.{}, &.{}, cg);
1125420065 },
1125520066 .set_err_return_trace => {
1125620067 const un_op = air_datas[@intFromEnum(inst)].un_op;
......@@ -11274,8 +20085,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1127420085
1127520086 .addrspace_cast => {
1127620087 const ty_op = air_datas[@intFromEnum(inst)].ty_op;
11277 var ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
11278 try ops[0].moveTo(inst, cg);
20088 const ops = try cg.tempsFromOperands(inst, .{ty_op.operand});
20089 try ops[0].finish(inst, &.{ty_op.operand}, &ops, cg);
1127920090 },
1128020091
1128120092 .save_err_return_trace_index => {
......@@ -11285,7 +20096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
1128520096 var ert: Temp = .{ .index = err_ret_trace_index };
1128620097 var res = try ert.load(.usize, .{ .disp = @intCast(agg_ty.structFieldOffset(ty_pl.payload, zcu)) }, cg);
1128720098 try ert.die(cg);
11288 try res.moveTo(inst, cg);
20099 try res.finish(inst, &.{}, &.{}, cg);
1128920100 },
1129020101
1129120102 .vector_store_elem => return cg.fail("TODO implement vector_store_elem", .{}),
......@@ -12109,13 +20920,13 @@ fn airIntCast(self: *CodeGen, inst: Air.Inst.Index) !void {
1210920920 const src_mcv = try self.resolveInst(ty_op.operand);
1211020921 if (dst_ty.isVector(zcu)) {
1211120922 const max_abi_size = @max(dst_abi_size, src_abi_size);
12112 if (max_abi_size > self.vectorSize(.int)) break :result null;
1211320923 const has_avx = self.hasFeature(.avx);
1211420924
1211520925 const dst_elem_abi_size = dst_ty.childType(zcu).abiSize(zcu);
1211620926 const src_elem_abi_size = src_ty.childType(zcu).abiSize(zcu);
1211720927 switch (std.math.order(dst_elem_abi_size, src_elem_abi_size)) {
1211820928 .lt => {
20929 if (max_abi_size > self.vectorSize(.int)) break :result null;
1211920930 const mir_tag: Mir.Inst.FixedTag = switch (dst_elem_abi_size) {
1212020931 else => break :result null,
1212120932 1 => switch (src_elem_abi_size) {
......@@ -12172,6 +20983,7 @@ fn airIntCast(self: *CodeGen, inst: Air.Inst.Index) !void {
1217220983 break :result dst_mcv;
1217320984 },
1217420985 .gt => if (self.hasFeature(.sse4_1)) {
20986 if (max_abi_size > self.vectorSize(.int)) break :result null;
1217520987 const mir_tag: Mir.Inst.FixedTag = .{ switch (dst_elem_abi_size) {
1217620988 else => break :result null,
1217720989 2 => if (has_avx) .vp_w else .p_w,
......@@ -12609,12 +21421,11 @@ fn activeIntBits(self: *CodeGen, dst_air: Air.Inst.Ref) u16 {
1260921421 return dst_info.bits;
1261021422}
1261121423
12612fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index) !void {
21424fn airMulDivBinOp(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
1261321425 const pt = self.pt;
1261421426 const zcu = pt.zcu;
1261521427 const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op;
1261621428 const result = result: {
12617 const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)];
1261821429 const dst_ty = self.typeOfIndex(inst);
1261921430 switch (dst_ty.zigTypeTag(zcu)) {
1262021431 .float, .vector => break :result try self.genBinOp(inst, tag, bin_op.lhs, bin_op.rhs),
......@@ -15952,10 +24763,9 @@ fn airBitReverse(self: *CodeGen, inst: Air.Inst.Index) !void {
1595224763 return self.finishAir(inst, dst_mcv, .{ ty_op.operand, .none, .none });
1595324764}
1595424765
15955fn floatSign(self: *CodeGen, inst: Air.Inst.Index, operand: Air.Inst.Ref, ty: Type) !void {
24766fn floatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag, operand: Air.Inst.Ref, ty: Type) !void {
1595624767 const pt = self.pt;
1595724768 const zcu = pt.zcu;
15958 const tag = self.air.instructions.items(.tag)[@intFromEnum(inst)];
1595924769
1596024770 const result = result: {
1596124771 const scalar_bits = ty.scalarType(zcu).floatBits(self.target.*);
......@@ -16080,10 +24890,10 @@ fn floatSign(self: *CodeGen, inst: Air.Inst.Index, operand: Air.Inst.Ref, ty: Ty
1608024890 return self.finishAir(inst, result, .{ operand, .none, .none });
1608124891}
1608224892
16083fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index) !void {
24893fn airFloatSign(self: *CodeGen, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void {
1608424894 const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op;
1608524895 const ty = self.typeOf(un_op);
16086 return self.floatSign(inst, un_op, ty);
24896 return self.floatSign(inst, tag, un_op, ty);
1608724897}
1608824898
1608924899const RoundMode = packed struct(u5) {
......@@ -16366,7 +25176,7 @@ fn airAbs(self: *CodeGen, inst: Air.Inst.Index) !void {
1636625176 break :result dst_mcv;
1636725177 },
1636825178 },
16369 .float => return self.floatSign(inst, ty_op.operand, ty),
25179 .float => return self.floatSign(inst, .abs, ty_op.operand, ty),
1637025180 .vector => switch (ty.childType(zcu).zigTypeTag(zcu)) {
1637125181 else => null,
1637225182 .int => switch (ty.childType(zcu).intInfo(zcu).bits) {
......@@ -16402,7 +25212,7 @@ fn airAbs(self: *CodeGen, inst: Air.Inst.Index) !void {
1640225212 5...8 => if (self.hasFeature(.avx2)) .{ .vp_d, .abs } else null,
1640325213 },
1640425214 },
16405 .float => return self.floatSign(inst, ty_op.operand, ty),
25215 .float => return self.floatSign(inst, .abs, ty_op.operand, ty),
1640625216 },
1640725217 }) orelse return self.fail("TODO implement airAbs for {}", .{ty.fmt(pt)});
1640825218
......@@ -19263,7 +28073,7 @@ fn genBinOp(
1926328073 .mul => .{ .v_ss, .mul },
1926428074 .div_float, .div_trunc, .div_floor, .div_exact => .{ .v_ss, .div },
1926528075 .max => .{ .v_ss, .max },
19266 .min => .{ .v_ss, .max },
28076 .min => .{ .v_ss, .min },
1926728077 else => unreachable,
1926828078 },
1926928079 dst_reg,
......@@ -21474,11 +30284,16 @@ fn airRet(self: *CodeGen, inst: Air.Inst.Index, safety: bool) !void {
2147430284 const ret_ty = self.fn_type.fnReturnType(zcu);
2147530285 switch (self.ret_mcv.short) {
2147630286 .none => {},
21477 .register,
21478 .register_pair,
21479 .register_triple,
21480 .register_quadruple,
21481 => try self.genCopy(ret_ty, self.ret_mcv.short, .{ .air_ref = un_op }, .{ .safety = safety }),
30287 .register => |reg| {
30288 const reg_lock = self.register_manager.lockRegAssumeUnused(reg);
30289 defer self.register_manager.unlockReg(reg_lock);
30290 try self.genCopy(ret_ty, self.ret_mcv.short, .{ .air_ref = un_op }, .{ .safety = safety });
30291 },
30292 inline .register_pair, .register_triple, .register_quadruple => |regs| {
30293 const reg_locks = self.register_manager.lockRegsAssumeUnused(regs.len, regs);
30294 defer for (reg_locks) |reg_lock| self.register_manager.unlockReg(reg_lock);
30295 try self.genCopy(ret_ty, self.ret_mcv.short, .{ .air_ref = un_op }, .{ .safety = safety });
30296 },
2148230297 .indirect => |reg_off| {
2148330298 try self.register_manager.getReg(reg_off.reg, null);
2148430299 const lock = self.register_manager.lockRegAssumeUnused(reg_off.reg);
......@@ -22605,7 +31420,11 @@ fn lowerBlock(self: *CodeGen, inst: Air.Inst.Index, body: []const Air.Inst.Index
2260531420 .resurrect = true,
2260631421 .close_scope = true,
2260731422 });
22608 for (block_data.value.relocs.items) |reloc| self.performReloc(reloc);
31423 const block_relocs_last_index = block_data.value.relocs.items.len - 1;
31424 for (if (block_data.value.relocs.items[block_relocs_last_index] == self.mir_instructions.len - 1) block_relocs: {
31425 _ = self.mir_instructions.pop();
31426 break :block_relocs block_data.value.relocs.items[0..block_relocs_last_index];
31427 } else block_data.value.relocs.items) |block_reloc| self.performReloc(block_reloc);
2260931428 }
2261031429
2261131430 if (std.debug.runtime_safety) assert(self.inst_tracking.getIndex(inst).? == inst_tracking_i);
......@@ -22938,6 +31757,9 @@ fn airLoopSwitchBr(self: *CodeGen, inst: Air.Inst.Index) !void {
2293831757 if (switch_br.operand.toIndex()) |op_inst| try self.processDeath(op_inst);
2293931758 }
2294031759
31760 // Ensure a register is available for dispatch.
31761 if (!mat_cond.isRegister()) _ = try self.register_manager.allocReg(null, abi.RegisterClass.gp);
31762
2294131763 self.scope_generation += 1;
2294231764 const state = try self.saveState();
2294331765
......@@ -22960,47 +31782,63 @@ fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void {
2296031782
2296131783 const block_ty = self.typeOfIndex(br.block_inst);
2296231784 const loop_data = self.loops.getPtr(br.block_inst).?;
22963 if (self.loop_switches.getPtr(br.block_inst)) |table| {
22964 // Process operand death so that it is properly accounted for in the State below.
22965 const condition_dies = self.liveness.operandDies(inst, 0);
22966
22967 try self.restoreState(loop_data.state, &.{}, .{
22968 .emit_instructions = true,
22969 .update_tracking = false,
22970 .resurrect = false,
22971 .close_scope = false,
22972 });
31785 const block_tracking = self.inst_tracking.getPtr(br.block_inst).?;
31786 {
31787 try self.getValue(block_tracking.short, null);
31788 const src_mcv = try self.resolveInst(br.operand);
31789
31790 if (self.reuseOperandAdvanced(inst, br.operand, 0, src_mcv, br.block_inst)) {
31791 try self.getValue(block_tracking.short, br.block_inst);
31792 // .long = .none to avoid merging operand and block result stack frames.
31793 const current_tracking: InstTracking = .{ .long = .none, .short = src_mcv };
31794 try current_tracking.materializeUnsafe(self, br.block_inst, block_tracking.*);
31795 for (current_tracking.getRegs()) |src_reg| self.register_manager.freeReg(src_reg);
31796 } else {
31797 try self.getValue(block_tracking.short, br.block_inst);
31798 try self.genCopy(block_ty, block_tracking.short, try self.resolveInst(br.operand), .{});
31799 }
31800 }
31801
31802 // Process operand death so that it is properly accounted for in the State below.
31803 if (self.liveness.operandDies(inst, 0)) {
31804 if (br.operand.toIndex()) |op_inst| try self.processDeath(op_inst);
31805 }
31806
31807 try self.restoreState(loop_data.state, &.{}, .{
31808 .emit_instructions = true,
31809 .update_tracking = false,
31810 .resurrect = false,
31811 .close_scope = false,
31812 });
2297331813
31814 if (self.loop_switches.getPtr(br.block_inst)) |table| {
2297431815 const condition_ty = self.typeOf(br.operand);
22975 const condition = try self.resolveInst(br.operand);
22976 const condition_index = if (condition_dies and condition.isModifiable()) condition else condition_index: {
22977 const condition_index = try self.allocTempRegOrMem(condition_ty, true);
22978 try self.genCopy(condition_ty, condition_index, condition, .{});
22979 break :condition_index condition_index;
22980 };
31816 const condition_mcv = block_tracking.short;
2298131817 try self.spillEflagsIfOccupied();
2298231818 if (table.min.orderAgainstZero(self.pt.zcu).compare(.neq)) try self.genBinOpMir(
2298331819 .{ ._, .sub },
2298431820 condition_ty,
22985 condition_index,
31821 condition_mcv,
2298631822 .{ .air_ref = Air.internedToRef(table.min.toIntern()) },
2298731823 );
2298831824 switch (table.else_relocs) {
2298931825 .@"unreachable" => {},
2299031826 .forward => |*else_relocs| {
22991 try self.genBinOpMir(.{ ._, .cmp }, condition_ty, condition_index, .{ .immediate = table.len - 1 });
31827 try self.genBinOpMir(.{ ._, .cmp }, condition_ty, condition_mcv, .{ .immediate = table.len - 1 });
2299231828 try else_relocs.append(self.gpa, try self.asmJccReloc(.a, undefined));
2299331829 },
2299431830 .backward => |else_reloc| {
22995 try self.genBinOpMir(.{ ._, .cmp }, condition_ty, condition_index, .{ .immediate = table.len - 1 });
31831 try self.genBinOpMir(.{ ._, .cmp }, condition_ty, condition_mcv, .{ .immediate = table.len - 1 });
2299631832 _ = try self.asmJccReloc(.a, else_reloc);
2299731833 },
2299831834 }
2299931835 {
23000 const condition_index_reg = if (condition_index.isRegister())
23001 condition_index.getReg().?
23002 else
23003 try self.copyToTmpRegister(.usize, condition_index);
31836 const condition_index_reg = if (condition_mcv.isRegister()) condition_mcv.getReg().? else cond: {
31837 const condition_index_reg =
31838 RegisterManager.regAtTrackedIndex(@intCast(loop_data.state.free_registers.findFirstSet().?));
31839 try self.genSetReg(condition_index_reg, condition_ty, condition_mcv, .{});
31840 break :cond condition_index_reg;
31841 };
2300431842 const condition_index_lock = self.register_manager.lockReg(condition_index_reg);
2300531843 defer if (condition_index_lock) |lock| self.register_manager.unlockReg(lock);
2300631844 try self.truncateRegister(condition_ty, condition_index_reg);
......@@ -23019,38 +31857,6 @@ fn airSwitchDispatch(self: *CodeGen, inst: Air.Inst.Index) !void {
2301931857 return self.finishAir(inst, .none, .{ br.operand, .none, .none });
2302031858 }
2302131859
23022 const block_tracking = self.inst_tracking.getPtr(br.block_inst).?;
23023 done: {
23024 try self.getValue(block_tracking.short, null);
23025 const src_mcv = try self.resolveInst(br.operand);
23026
23027 if (self.reuseOperandAdvanced(inst, br.operand, 0, src_mcv, br.block_inst)) {
23028 try self.getValue(block_tracking.short, br.block_inst);
23029 // .long = .none to avoid merging operand and block result stack frames.
23030 const current_tracking: InstTracking = .{ .long = .none, .short = src_mcv };
23031 try current_tracking.materializeUnsafe(self, br.block_inst, block_tracking.*);
23032 for (current_tracking.getRegs()) |src_reg| self.register_manager.freeReg(src_reg);
23033 break :done;
23034 }
23035
23036 try self.getValue(block_tracking.short, br.block_inst);
23037 const dst_mcv = block_tracking.short;
23038 try self.genCopy(block_ty, dst_mcv, try self.resolveInst(br.operand), .{});
23039 break :done;
23040 }
23041
23042 // Process operand death so that it is properly accounted for in the State below.
23043 if (self.liveness.operandDies(inst, 0)) {
23044 if (br.operand.toIndex()) |op_inst| try self.processDeath(op_inst);
23045 }
23046
23047 try self.restoreState(loop_data.state, &.{}, .{
23048 .emit_instructions = true,
23049 .update_tracking = false,
23050 .resurrect = false,
23051 .close_scope = false,
23052 });
23053
2305431860 // Emit a jump with a relocation. It will be patched up after the block ends.
2305531861 // Leave the jump offset undefined
2305631862 _ = try self.asmJmpReloc(loop_data.target);
......@@ -24115,13 +32921,15 @@ fn moveStrategy(self: *CodeGen, ty: Type, class: Register.Class, aligned: bool)
2411532921 64 => switch (ty.vectorLen(zcu)) {
2411632922 1...2 => return .{ .move = if (self.hasFeature(.avx))
2411732923 .{ .v_pd, if (aligned) .mova else .movu }
32924 else if (self.hasFeature(.sse2))
32925 .{ ._pd, if (aligned) .mova else .movu }
2411832926 else
24119 .{ ._pd, if (aligned) .mova else .movu } },
32927 .{ ._ps, if (aligned) .mova else .movu } },
2412032928 3...4 => if (self.hasFeature(.avx))
2412132929 return .{ .move = .{ .v_pd, if (aligned) .mova else .movu } },
2412232930 else => {},
2412332931 },
24124 128 => switch (ty.vectorLen(zcu)) {
32932 80, 128 => switch (ty.vectorLen(zcu)) {
2412532933 1 => return .{ .move = if (self.hasFeature(.avx))
2412632934 .{ if (aligned) .v_dqa else .v_dqu, .mov }
2412732935 else if (self.hasFeature(.sse2))
......@@ -24450,7 +33258,7 @@ fn genSetReg(
2445033258 },
2445133259 .mmx => unreachable,
2445233260 .sse => switch (src_reg.class()) {
24453 .general_purpose => try self.asmRegisterRegister(
33261 .general_purpose => if (self.hasFeature(.sse2)) try self.asmRegisterRegister(
2445433262 switch (abi_size) {
2445533263 1...4 => if (self.hasFeature(.avx)) .{ .v_d, .mov } else .{ ._d, .mov },
2445633264 5...8 => if (self.hasFeature(.avx)) .{ .v_q, .mov } else .{ ._q, .mov },
......@@ -24458,7 +33266,26 @@ fn genSetReg(
2445833266 },
2445933267 dst_reg.to128(),
2446033268 registerAlias(src_reg, @max(abi_size, 4)),
24461 ),
33269 ) else {
33270 const frame_size = std.math.ceilPowerOfTwoAssert(u32, @max(abi_size, 4));
33271 const frame_index = try self.allocFrameIndex(.init(.{
33272 .size = frame_size,
33273 .alignment = .fromNonzeroByteUnits(frame_size),
33274 }));
33275 try self.asmMemoryRegister(.{ ._, .mov }, .{
33276 .base = .{ .frame = frame_index },
33277 .mod = .{ .rm = .{ .size = .fromSize(abi_size) } },
33278 }, registerAlias(src_reg, abi_size));
33279 try self.asmRegisterMemory(switch (frame_size) {
33280 4 => .{ ._ss, .mov },
33281 8 => .{ ._ps, .movl },
33282 16 => .{ ._ps, .mov },
33283 else => unreachable,
33284 }, dst_reg.to128(), .{
33285 .base = .{ .frame = frame_index },
33286 .mod = .{ .rm = .{ .size = .fromSize(frame_size) } },
33287 });
33288 },
2446233289 .segment => try self.genSetReg(
2446333290 dst_reg,
2446433291 ty,
......@@ -24469,7 +33296,12 @@ fn genSetReg(
2446933296 .sse => try self.asmRegisterRegister(
2447033297 @as(?Mir.Inst.FixedTag, switch (ty.scalarType(zcu).zigTypeTag(zcu)) {
2447133298 else => switch (abi_size) {
24472 1...16 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else .{ ._dqa, .mov },
33299 1...16 => if (self.hasFeature(.avx))
33300 .{ .v_dqa, .mov }
33301 else if (self.hasFeature(.sse2))
33302 .{ ._dqa, .mov }
33303 else
33304 .{ ._ps, .mova },
2447333305 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null,
2447433306 else => null,
2447533307 },
......@@ -24477,13 +33309,20 @@ fn genSetReg(
2447733309 16, 128 => switch (abi_size) {
2447833310 2...16 => if (self.hasFeature(.avx))
2447933311 .{ .v_dqa, .mov }
33312 else if (self.hasFeature(.sse2))
33313 .{ ._dqa, .mov }
2448033314 else
24481 .{ ._dqa, .mov },
33315 .{ ._ps, .mova },
2448233316 17...32 => if (self.hasFeature(.avx)) .{ .v_dqa, .mov } else null,
2448333317 else => null,
2448433318 },
2448533319 32 => if (self.hasFeature(.avx)) .{ .v_ps, .mova } else .{ ._ps, .mova },
24486 64 => if (self.hasFeature(.avx)) .{ .v_pd, .mova } else .{ ._pd, .mova },
33320 64 => if (self.hasFeature(.avx))
33321 .{ .v_pd, .mova }
33322 else if (self.hasFeature(.sse2))
33323 .{ ._pd, .mova }
33324 else
33325 .{ ._ps, .mova },
2448733326 80 => null,
2448833327 else => unreachable,
2448933328 },
......@@ -25180,15 +34019,19 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void {
2518034019 const src_lock = if (src_mcv.getReg()) |src_reg| self.register_manager.lockReg(src_reg) else null;
2518134020 defer if (src_lock) |lock| self.register_manager.unlockReg(lock);
2518234021
25183 const dst_mcv = if ((if (src_mcv.getReg()) |src_reg| src_reg.class() == .general_purpose else true) and
34022 const dst_mcv = if (src_mcv != .register_mask and
34023 (if (src_mcv.getReg()) |src_reg| src_reg.class() == .general_purpose else true) and
2518434024 dst_rc.supersetOf(src_rc) and dst_ty.abiSize(zcu) <= src_ty.abiSize(zcu) and
2518534025 dst_ty.abiAlignment(zcu).order(src_ty.abiAlignment(zcu)).compare(.lte) and
2518634026 self.reuseOperand(inst, ty_op.operand, 0, src_mcv)) src_mcv else dst: {
2518734027 const dst_mcv = try self.allocRegOrMem(inst, true);
25188 try self.genCopy(switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) {
25189 .lt => dst_ty,
25190 .eq => if (!dst_mcv.isBase() or src_mcv.isBase()) dst_ty else src_ty,
25191 .gt => src_ty,
34028 try self.genCopy(switch (src_mcv) {
34029 else => switch (std.math.order(dst_ty.abiSize(zcu), src_ty.abiSize(zcu))) {
34030 .lt => dst_ty,
34031 .eq => if (!dst_mcv.isBase() or src_mcv.isBase()) dst_ty else src_ty,
34032 .gt => src_ty,
34033 },
34034 .register_mask => src_ty,
2519234035 }, dst_mcv, src_mcv, .{});
2519334036 break :dst dst_mcv;
2519434037 };
......@@ -28614,9 +37457,8 @@ fn limitImmediateType(self: *CodeGen, operand: Air.Inst.Ref, comptime T: type) !
2861437457 return mcv;
2861537458}
2861637459
28617fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue {
28618 const pt = self.pt;
28619 return switch (try codegen.genTypedValue(self.bin_file, pt, self.src_loc, val, self.target.*)) {
37460fn genResult(self: *CodeGen, res: codegen.GenResult) InnerError!MCValue {
37461 return switch (res) {
2862037462 .mcv => |mcv| switch (mcv) {
2862137463 .none => .none,
2862237464 .undef => .undef,
......@@ -28633,6 +37475,14 @@ fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue {
2863337475 };
2863437476}
2863537477
37478fn genTypedValue(self: *CodeGen, val: Value) InnerError!MCValue {
37479 return self.genResult(try codegen.genTypedValue(self.bin_file, self.pt, self.src_loc, val, self.target.*));
37480}
37481
37482fn lowerUav(self: *CodeGen, val: Value) InnerError!MCValue {
37483 return self.genResult(try self.bin_file.lowerUav(self.pt, val.toIntern(), .none, self.src_loc));
37484}
37485
2863637486const CallMCValues = struct {
2863737487 args: []MCValue,
2863837488 return_value: InstTracking,
......@@ -29772,6 +38622,7 @@ const Temp = struct {
2977238622 cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8;
2977338623 result_temp_index.tracking(cg).* = .init(result);
2977438624 first_temp.* = result_temp;
38625 second_temp.* = result_temp;
2977538626 }
2977638627
2977738628 fn asMask(temp: Temp, info: MaskInfo, cg: *CodeGen) void {
......@@ -30248,7 +39099,20 @@ const Temp = struct {
3024839099 try cg.asmOpOnly(.{ .@"rep _sb", .sto });
3024939100 }
3025039101
30251 fn moveTo(temp: Temp, inst: Air.Inst.Index, cg: *CodeGen) !void {
39102 fn finish(
39103 temp: Temp,
39104 inst: Air.Inst.Index,
39105 op_refs: []const Air.Inst.Ref,
39106 op_temps: []const Temp,
39107 cg: *CodeGen,
39108 ) !void {
39109 const tomb_bits = cg.liveness.getTombBits(inst);
39110 for (0.., op_refs, op_temps) |op_index, op_ref, op_temp| {
39111 if (op_temp.index != temp.index) try op_temp.die(cg);
39112 if (tomb_bits & @as(Liveness.Bpi, 1) << @intCast(op_index) == 0) continue;
39113 if (cg.reused_operands.isSet(op_index)) continue;
39114 try cg.processDeath(op_ref.toIndexAllowNone() orelse continue);
39115 }
3025239116 if (cg.liveness.isUnused(inst)) try temp.die(cg) else switch (temp.unwrap(cg)) {
3025339117 .ref, .err_ret_trace => {
3025439118 const result = try cg.allocRegOrMem(inst, true);
......@@ -30410,6 +39274,10 @@ fn tempFromValue(cg: *CodeGen, value: Value) !Temp {
3041039274 return cg.tempInit(value.typeOf(cg.pt.zcu), try cg.genTypedValue(value));
3041139275}
3041239276
39277fn tempMemFromValue(cg: *CodeGen, value: Value) !Temp {
39278 return cg.tempInit(value.typeOf(cg.pt.zcu), try cg.lowerUav(value));
39279}
39280
3041339281fn tempFromOperand(
3041439282 cg: *CodeGen,
3041539283 inst: Air.Inst.Index,
......@@ -30529,35 +39397,94 @@ const Select = struct {
3052939397 };
3053039398 switch (mir_tag[0]) {
3053139399 .f_ => switch (mir_tag[1]) {
30532 .abs, .st => {},
39400 .@"2xm1",
39401 .abs,
39402 .add,
39403 .chs,
39404 .clex,
39405 .com,
39406 .comi,
39407 .cos,
39408 .div,
39409 .divr,
39410 .free,
39411 .mul,
39412 .nop,
39413 .prem,
39414 .rndint,
39415 .scale,
39416 .sin,
39417 .sqrt,
39418 .st,
39419 .sub,
39420 .subr,
39421 .tst,
39422 .ucom,
39423 .ucomi,
39424 .wait,
39425 .xam,
39426 .xch,
39427 => {},
39428 .init, .save => s.top = 0,
39429 .ld, .ptan, .sincos, .xtract => s.top -%= 1,
39430 .patan, .yl2x => s.top +%= 1,
39431 .rstor => unreachable,
39432 else => unreachable,
39433 },
39434 .f_1 => switch (mir_tag[1]) {
3053339435 .ld => s.top -%= 1,
30534 else => {
30535 const fixes = @tagName(mir_tag[0]);
30536 const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;
30537 std.debug.panic("{s}: {s}{s}{s}\n", .{
30538 @src().fn_name,
30539 fixes[0..fixes_blank],
30540 @tagName(mir_tag[1]),
30541 fixes[fixes_blank + 1 ..],
30542 });
30543 },
39436 .prem => {},
39437 else => unreachable,
3054439438 },
30545 .f_p => switch (mir_tag[1]) {
39439 .f_b, .f_be, .f_e, .f_nb, .f_nbe, .f_ne, .f_nu, .f_u => switch (mir_tag[1]) {
39440 .cmov => {},
39441 else => unreachable,
39442 },
39443 .f_cw, .f_env, .f_sw => switch (mir_tag[1]) {
39444 .ld, .st => {},
39445 else => unreachable,
39446 },
39447 .f_p1 => switch (mir_tag[1]) {
39448 .yl2x => s.top +%= 1,
39449 else => unreachable,
39450 },
39451 .fb_ => switch (mir_tag[1]) {
39452 .ld => s.top -%= 1,
39453 else => unreachable,
39454 },
39455 .fb_p => switch (mir_tag[1]) {
3054639456 .st => s.top +%= 1,
30547 else => {
30548 const fixes = @tagName(mir_tag[0]);
30549 const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;
30550 std.debug.panic("{s}: {s}{s}{s}\n", .{
30551 @src().fn_name,
30552 fixes[0..fixes_blank],
30553 @tagName(mir_tag[1]),
30554 fixes[fixes_blank + 1 ..],
30555 });
30556 },
39457 else => unreachable,
39458 },
39459 .fi_ => switch (mir_tag[1]) {
39460 .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {},
39461 .ld => s.top -%= 1,
39462 else => unreachable,
39463 },
39464 .fi_p => switch (mir_tag[1]) {
39465 .com, .st => s.top +%= 1,
39466 else => unreachable,
39467 },
39468 .fn_ => switch (mir_tag[1]) {
39469 .clex => {},
39470 .init, .save => s.top = 0,
39471 else => unreachable,
39472 },
39473 .fn_cw, .fn_env, .fn_sw => switch (mir_tag[1]) {
39474 .st => {},
39475 else => unreachable,
39476 },
39477 .f_cstp => switch (mir_tag[1]) {
39478 .de => s.top -%= 1,
39479 .in => s.top +%= 1,
39480 else => unreachable,
3055739481 },
30558 .f_1,
30559 => switch (mir_tag[1]) {
39482 .f_l2e, .f_l2t, .f_lg2, .f_ln2, .f_pi, .f_z => switch (mir_tag[1]) {
3056039483 .ld => s.top -%= 1,
39484 else => unreachable,
39485 },
39486 .f_p => switch (mir_tag[1]) {
39487 .add, .com, .comi, .div, .divr, .mul, .st, .sub, .subr, .ucom, .ucomi => s.top +%= 1,
3056139488 else => {
3056239489 const fixes = @tagName(mir_tag[0]);
3056339490 const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?;
......@@ -30569,41 +39496,13 @@ const Select = struct {
3056939496 });
3057039497 },
3057139498 },
30572 .f_l2e,
30573 .f_l2t,
30574 .f_lg2,
30575 .f_ln2,
30576 .f_pi,
30577 .f_z,
30578 => switch (mir_tag[1]) {
30579 .ld => s.top -%= 1,
39499 .f_pp => switch (mir_tag[1]) {
39500 .com, .ucom => s.top +%= 2,
3058039501 else => unreachable,
3058139502 },
30582 .f_b,
30583 .f_be,
30584 .f_cw,
30585 .f_e,
30586 .f_env,
30587 .f_nb,
30588 .f_nbe,
30589 .f_ne,
30590 .f_nu,
30591 .f_p1,
30592 .f_pp,
30593 .f_sw,
30594 .f_u,
30595 .fb_,
30596 .fb_p,
30597 .fi_,
30598 .fi_p,
30599 .fn_,
30600 .fn_cw,
30601 .fn_env,
30602 .fn_sw,
30603 => {},
30604 .f_cstp => switch (mir_tag[1]) {
30605 .de => s.top -%= 1,
30606 .in => s.top +%= 1,
39503 .fx_ => switch (mir_tag[1]) {
39504 .rstor => unreachable,
39505 .save => {},
3060739506 else => unreachable,
3060839507 },
3060939508 else => {},
......@@ -30620,9 +39519,13 @@ const Select = struct {
3062039519 dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any),
3062139520 src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any),
3062239521 patterns: []const Select.Pattern,
39522 call_frame: packed struct(u16) { size: u10 = 0, alignment: InternPool.Alignment } = .{ .size = 0, .alignment = .none },
3062339523 extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused),
3062439524 dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused),
30625 clobbers: struct { eflags: bool = false, st: u3 = 0 } = .{},
39525 clobbers: packed struct {
39526 eflags: bool = false,
39527 caller_preserved: enum(u2) { none, ccc, zigcc } = .none,
39528 } = .{},
3062639529 each: union(enum) {
3062739530 once: []const Instruction,
3062839531 },
......@@ -30633,7 +39536,10 @@ const Select = struct {
3063339536 any_bool_vec,
3063439537 any_int,
3063539538 any_signed_int,
39539 any_unsigned_int,
3063639540 any_scalar_int,
39541 any_scalar_signed_int,
39542 any_scalar_unsigned_int,
3063739543 any_float,
3063839544 po2_any,
3063939545 bool_vec: Memory.Size,
......@@ -30645,13 +39551,20 @@ const Select = struct {
3064539551 multiple_size: Memory.Size,
3064639552 int: Memory.Size,
3064739553 scalar_int_is: Memory.Size,
30648 scalar_int: struct { of: Memory.Size, is: Memory.Size },
30649 scalar_signed_int: Memory.Size,
30650 scalar_unsigned_int: Memory.Size,
30651 scalar_remainder_int: struct { of: Memory.Size, is: Memory.Size },
30652 scalar_float: struct { of: Memory.Size, is: Memory.Size },
30653 scalar_exact_float: struct { of: Memory.Size, is: Memory.Size },
30654 multiple_scalar_int: struct { of: Memory.Size, is: Memory.Size },
39554 scalar_signed_int_is: Memory.Size,
39555 scalar_unsigned_int_is: Memory.Size,
39556 scalar_int: OfIsSizes,
39557 scalar_signed_int: OfIsSizes,
39558 scalar_unsigned_int: OfIsSizes,
39559 multiple_scalar_int: OfIsSizes,
39560 multiple_scalar_signed_int: OfIsSizes,
39561 multiple_scalar_unsigned_int: OfIsSizes,
39562 scalar_remainder_int: OfIsSizes,
39563 float: Memory.Size,
39564 scalar_any_float: Memory.Size,
39565 scalar_float: OfIsSizes,
39566 multiple_scalar_any_float: Memory.Size,
39567 multiple_scalar_float: OfIsSizes,
3065539568 exact_int: u16,
3065639569 exact_signed_int: u16,
3065739570 exact_unsigned_int: u16,
......@@ -30660,16 +39573,18 @@ const Select = struct {
3066039573 po2_int: Memory.Size,
3066139574 signed_po2_int: Memory.Size,
3066239575 unsigned_po2_or_exact_int: Memory.Size,
30663 remainder_int: struct { of: Memory.Size, is: Memory.Size },
30664 exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },
30665 signed_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },
30666 unsigned_or_exact_remainder_int: struct { of: Memory.Size, is: Memory.Size },
39576 remainder_int: OfIsSizes,
39577 exact_remainder_int: OfIsSizes,
39578 signed_or_exact_remainder_int: OfIsSizes,
39579 unsigned_or_exact_remainder_int: OfIsSizes,
3066739580 signed_int: Memory.Size,
3066839581 unsigned_int: Memory.Size,
3066939582 elem_size_is: u8,
3067039583 po2_elem_size,
3067139584 elem_int: Memory.Size,
3067239585
39586 const OfIsSizes = struct { of: Memory.Size, is: Memory.Size };
39587
3067339588 fn accepts(constraint: Constraint, ty: Type, cg: *CodeGen) bool {
3067439589 const zcu = cg.pt.zcu;
3067539590 return switch (constraint) {
......@@ -30677,7 +39592,10 @@ const Select = struct {
3067739592 .any_bool_vec => ty.isVector(zcu) and ty.childType(zcu).toIntern() == .bool_type,
3067839593 .any_int => cg.intInfo(ty) != null,
3067939594 .any_signed_int => if (cg.intInfo(ty)) |int_info| int_info.signedness == .signed else false,
39595 .any_unsigned_int => if (cg.intInfo(ty)) |int_info| int_info.signedness == .unsigned else false,
3068039596 .any_scalar_int => cg.intInfo(ty.scalarType(zcu)) != null,
39597 .any_scalar_signed_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed else false,
39598 .any_scalar_unsigned_int => if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned else false,
3068139599 .any_float => ty.isRuntimeFloat(),
3068239600 .po2_any => std.math.isPowerOfTwo(ty.abiSize(zcu)),
3068339601 .bool_vec => |size| ty.isVector(zcu) and ty.scalarType(zcu).toIntern() == .bool_type and
......@@ -30700,25 +39618,42 @@ const Select = struct {
3070039618 size.bitSize(cg.target) >= int_info.bits
3070139619 else
3070239620 false,
30703 .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
30704 if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false,
30705 .scalar_signed_int => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) {
39621 .scalar_signed_int_is => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) {
3070639622 .signed => size.bitSize(cg.target) >= int_info.bits,
3070739623 .unsigned => false,
3070839624 } else false,
30709 .scalar_unsigned_int => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) {
39625 .scalar_unsigned_int_is => |size| if (cg.intInfo(ty.scalarType(zcu))) |int_info| switch (int_info.signedness) {
3071039626 .signed => false,
3071139627 .unsigned => size.bitSize(cg.target) >= int_info.bits,
3071239628 } else false,
39629 .scalar_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
39630 if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false,
39631 .scalar_signed_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
39632 if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed and
39633 of_is.is.bitSize(cg.target) >= int_info.bits else false,
39634 .scalar_unsigned_int => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
39635 if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned and
39636 of_is.is.bitSize(cg.target) >= int_info.bits else false,
3071339637 .multiple_scalar_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and
3071439638 if (cg.intInfo(ty.scalarType(zcu))) |int_info| of_is.is.bitSize(cg.target) >= int_info.bits else false,
39639 .multiple_scalar_signed_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and
39640 if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .signed and
39641 of_is.is.bitSize(cg.target) >= int_info.bits else false,
39642 .multiple_scalar_unsigned_int => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and
39643 if (cg.intInfo(ty.scalarType(zcu))) |int_info| int_info.signedness == .unsigned and
39644 of_is.is.bitSize(cg.target) >= int_info.bits else false,
3071539645 .scalar_remainder_int => |of_is| if (cg.intInfo(ty.scalarType(zcu))) |int_info|
3071639646 of_is.is.bitSize(cg.target) >= (int_info.bits - 1) % of_is.of.bitSize(cg.target) + 1
3071739647 else
3071839648 false,
30719 .scalar_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
30720 if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) >= float_bits else false,
30721 .scalar_exact_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
39649 .float => |size| if (cg.floatBits(ty)) |float_bits| size.bitSize(cg.target) == float_bits else false,
39650 .scalar_any_float => |size| @divExact(size.bitSize(cg.target), 8) >= ty.abiSize(zcu) and
39651 cg.floatBits(ty.scalarType(zcu)) != null,
39652 .scalar_float => |of_is| @divExact(of_is.of.bitSize(cg.target), 8) >= cg.unalignedSize(ty) and
39653 if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false,
39654 .multiple_scalar_any_float => |size| ty.abiSize(zcu) % @divExact(size.bitSize(cg.target), 8) == 0 and
39655 cg.floatBits(ty.scalarType(zcu)) != null,
39656 .multiple_scalar_float => |of_is| ty.abiSize(zcu) % @divExact(of_is.of.bitSize(cg.target), 8) == 0 and
3072239657 if (cg.floatBits(ty.scalarType(zcu))) |float_bits| of_is.is.bitSize(cg.target) == float_bits else false,
3072339658 .exact_int => |bit_size| if (cg.intInfo(ty)) |int_info| bit_size == int_info.bits else false,
3072439659 .exact_signed_int => |bit_size| if (cg.intInfo(ty)) |int_info| switch (int_info.signedness) {
......@@ -30787,13 +39722,14 @@ const Select = struct {
3078739722 src: [2]Src,
3078839723 commute: struct { u8, u8 } = .{ 0, 0 },
3078939724
30790 const Src = enum {
39725 const Src = union(enum) {
3079139726 none,
3079239727 any,
3079339728 imm8,
3079439729 imm16,
3079539730 imm32,
3079639731 simm32,
39732 to_reg: Register,
3079739733 mem,
3079839734 to_mem,
3079939735 mut_mem,
......@@ -30806,6 +39742,10 @@ const Select = struct {
3080639742 to_x87,
3080739743 mut_x87,
3080839744 to_mut_x87,
39745 mmx,
39746 to_mmx,
39747 mut_mmx,
39748 to_mut_mmx,
3080939749 mm,
3081039750 to_mm,
3081139751 mut_mm,
......@@ -30846,6 +39786,7 @@ const Select = struct {
3084639786 .mem => temp.tracking(cg).short.isMemory(),
3084739787 .to_mem, .to_mut_mem => true,
3084839788 .mut_mem => temp.isMut(cg) and temp.tracking(cg).short.isMemory(),
39789 .to_reg => true,
3084939790 .gpr => temp.typeOf(cg).abiSize(cg.pt.zcu) <= 8 and switch (temp.tracking(cg).short) {
3085039791 .register => |reg| reg.class() == .general_purpose,
3085139792 .register_offset => |reg_off| reg_off.reg.class() == .general_purpose and reg_off.off == 0,
......@@ -30868,6 +39809,17 @@ const Select = struct {
3086839809 else => false,
3086939810 },
3087039811 .to_x87, .to_mut_x87 => true,
39812 .mmx => switch (temp.tracking(cg).short) {
39813 .register => |reg| reg.class() == .mmx,
39814 .register_offset => |reg_off| reg_off.reg.class() == .mmx and reg_off.off == 0,
39815 else => false,
39816 },
39817 .mut_mmx => temp.isMut(cg) and switch (temp.tracking(cg).short) {
39818 .register => |reg| reg.class() == .mmx,
39819 .register_offset => |reg_off| reg_off.reg.class() == .mmx and reg_off.off == 0,
39820 else => false,
39821 },
39822 .to_mmx, .to_mut_mmx => true,
3087139823 .mm => temp.typeOf(cg).abiSize(cg.pt.zcu) == 8 and switch (temp.tracking(cg).short) {
3087239824 .register => |reg| reg.class() == .mmx,
3087339825 .register_offset => |reg_off| reg_off.reg.class() == .mmx and reg_off.off == 0,
......@@ -30920,12 +39872,13 @@ const Select = struct {
3092039872 .none => unreachable,
3092139873 .any, .imm8, .imm16, .imm32, .simm32 => false,
3092239874 .mem, .to_mem, .mut_mem, .to_mut_mem => try temp.toBase(cg),
39875 .to_reg => |reg| try temp.toReg(reg, cg),
3092339876 .gpr, .to_gpr => try temp.toRegClass(false, .general_purpose, cg),
3092439877 .mut_gpr, .to_mut_gpr => try temp.toRegClass(true, .general_purpose, cg),
3092539878 .x87, .to_x87 => try temp.toRegClass(false, .x87, cg),
3092639879 .mut_x87, .to_mut_x87 => try temp.toRegClass(true, .x87, cg),
30927 .mm, .to_mm => try temp.toRegClass(false, .mmx, cg),
30928 .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg),
39880 .mmx, .to_mmx, .mm, .to_mm => try temp.toRegClass(false, .mmx, cg),
39881 .mut_mmx, .to_mut_mmx, .mut_mm, .to_mut_mm => try temp.toRegClass(true, .mmx, cg),
3092939882 .sse, .to_sse, .xmm, .to_xmm, .ymm, .to_ymm => try temp.toRegClass(false, .sse, cg),
3093039883 .mut_sse, .to_mut_sse, .mut_xmm, .to_mut_xmm, .mut_ymm, .to_mut_ymm => try temp.toRegClass(true, .sse, cg),
3093139884 };
......@@ -30943,47 +39896,81 @@ const Select = struct {
3094339896 unused,
3094439897 any,
3094539898 cc: Condition,
39899 ref: Select.Operand.Ref,
3094639900 reg: Register,
3094739901 rc: Register.Class,
39902 mut_rc: struct { ref: Select.Operand.Ref, rc: Register.Class },
39903 ref_mask: struct { ref: Select.Operand.Ref, info: MaskInfo },
3094839904 rc_mask: struct { rc: Register.Class, info: MaskInfo },
39905 mut_rc_mask: struct { ref: Select.Operand.Ref, rc: Register.Class, info: MaskInfo },
3094939906 mem,
3095039907 smin_mem: ConstInfo,
3095139908 smax_mem: ConstInfo,
3095239909 umin_mem: ConstInfo,
3095339910 umax_mem: ConstInfo,
30954 ref: Select.Operand.Ref,
30955 ref_mask: struct { ref: Select.Operand.Ref, info: MaskInfo },
30956 mut_reg: struct { ref: Select.Operand.Ref, rc: Register.Class },
39911 symbol: *const struct { lib: ?[]const u8 = null, name: []const u8 },
3095739912
30958 const ConstInfo = struct { ref: Select.Operand.Ref, vectorize: bool = false };
39913 const ConstInfo = struct { ref: Select.Operand.Ref, vectorize_to: ?Memory.Size = null };
3095939914
3096039915 fn finish(kind: Kind, temp: Temp, s: *const Select) void {
3096139916 switch (kind) {
3096239917 else => {},
30963 inline .rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg),
39918 inline .rc_mask, .mut_rc_mask, .ref_mask => |mask| temp.asMask(mask.info, s.cg),
3096439919 }
3096539920 }
3096639921 };
3096739922
30968 fn create(spec: TempSpec, s: *Select) !?Temp {
39923 fn pass(spec: TempSpec) u2 {
39924 return switch (spec.kind) {
39925 .unused => 0,
39926 .reg => 1,
39927 else => 2,
39928 };
39929 }
39930
39931 fn create(spec: TempSpec, s: *Select) !Temp {
3096939932 const cg = s.cg;
3097039933 return switch (spec.kind) {
30971 .unused => null,
39934 .unused => unreachable,
3097239935 .any => try cg.tempAlloc(spec.type),
3097339936 .cc => |cc| try cg.tempInit(spec.type, .{ .eflags = cc }),
39937 .ref => |ref| ref.deref(s),
3097439938 .reg => |reg| try cg.tempInit(spec.type, .{ .register = reg }),
3097539939 .rc => |rc| try cg.tempAllocReg(spec.type, regSetForRegClass(rc)),
39940 .mut_rc => |ref_rc| {
39941 const temp = ref_rc.ref.deref(s);
39942 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
39943 .register => |reg| if (reg.class() == ref_rc.rc) return temp,
39944 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp,
39945 else => {},
39946 };
39947 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc));
39948 },
39949 .ref_mask => |ref_mask| ref_mask.ref.deref(s),
3097639950 .rc_mask => |rc_mask| try cg.tempAllocReg(spec.type, regSetForRegClass(rc_mask.rc)),
39951 .mut_rc_mask => |ref_rc_mask| {
39952 const temp = ref_rc_mask.ref.deref(s);
39953 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
39954 .register => |reg| if (reg.class() == ref_rc_mask.rc) return temp,
39955 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc_mask.rc) return temp,
39956 else => {},
39957 };
39958 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc_mask.rc));
39959 },
3097739960 .mem => try cg.tempAllocMem(spec.type),
3097839961 .smin_mem, .smax_mem, .umin_mem, .umax_mem => |const_info| {
3097939962 const pt = cg.pt;
3098039963 const zcu = pt.zcu;
3098139964 const ip = &zcu.intern_pool;
30982 const ty = const_info.ref.deref(s).typeOf(s.cg);
30983 const vector_len: ?u32, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) {
30984 else => .{ if (const_info.vectorize) 1 else null, ty },
39965 const ty = const_info.ref.deref(s).typeOf(cg);
39966 const vector_len, const scalar_ty: Type = switch (ip.indexToKey(ty.toIntern())) {
39967 else => .{ null, ty },
3098539968 .vector_type => |vector_type| .{ vector_type.len, .fromInterned(vector_type.child) },
3098639969 };
39970 const res_vector_len: ?u32 = if (const_info.vectorize_to) |vectorize_to| switch (vectorize_to) {
39971 .none => null,
39972 else => @intCast(@divExact(@divExact(vectorize_to.bitSize(cg.target), 8), scalar_ty.abiSize(pt.zcu))),
39973 } else vector_len;
3098739974 const res_scalar_ty, const res_scalar_val: Value = res_scalar: switch (scalar_ty.toIntern()) {
3098839975 .bool_type => .{
3098939976 scalar_ty,
......@@ -31028,26 +40015,20 @@ const Select = struct {
3102840015 break :res_scalar .{ scalar_int_ty, try pt.intValue_big(scalar_int_ty, big_int.toConst()) };
3102940016 },
3103040017 };
31031 const res_val: Value = if (vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{
40018 const res_val: Value = if (res_vector_len) |len| .fromInterned(try pt.intern(.{ .aggregate = .{
3103240019 .ty = (try pt.vectorType(.{
3103340020 .len = len,
3103440021 .child = res_scalar_ty.toIntern(),
3103540022 })).toIntern(),
3103640023 .storage = .{ .repeated_elem = res_scalar_val.toIntern() },
3103740024 } })) else res_scalar_val;
31038 return try cg.tempFromValue(res_val);
31039 },
31040 .ref => |ref| ref.deref(s),
31041 .ref_mask => |ref_mask| ref_mask.ref.deref(s),
31042 .mut_reg => |ref_rc| {
31043 const temp = ref_rc.ref.deref(s);
31044 if (temp.isMut(cg)) switch (temp.tracking(cg).short) {
31045 .register => |reg| if (reg.class() == ref_rc.rc) return temp,
31046 .register_offset => |reg_off| if (reg_off.off == 0 and reg_off.reg.class() == ref_rc.rc) return temp,
31047 else => {},
31048 };
31049 return try cg.tempAllocReg(spec.type, regSetForRegClass(ref_rc.rc));
40025 return try cg.tempMemFromValue(res_val);
3105040026 },
40027 .symbol => |symbol| if (cg.bin_file.cast(.elf)) |elf_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
40028 .sym_index = try elf_file.getGlobalSymbol(symbol.name, symbol.lib),
40029 } }) else if (cg.bin_file.cast(.macho)) |macho_file| try cg.tempInit(spec.type, .{ .lea_symbol = .{
40030 .sym_index = try macho_file.getGlobalSymbol(symbol.name, symbol.lib),
40031 } }) else cg.fail("external symbols unimplemented for {s}", .{@tagName(cg.bin_file.tag)}),
3105140032 };
3105240033 }
3105340034 };
......@@ -31083,13 +40064,13 @@ const Select = struct {
3108340064 mem,
3108440065 };
3108540066 const Adjust = packed struct(u8) {
31086 factor: i2,
31087 scale: Memory.Scale,
31088 amount: enum(u4) {
40067 sign: enum(u1) { neg, pos },
40068 lhs: enum(u4) {
3108940069 none,
3109040070 ptr_size,
3109140071 ptr_bit_size,
3109240072 size,
40073 size_sub_elem_size,
3109340074 src0_unaligned_size,
3109440075 bit_size,
3109540076 src0_bit_size,
......@@ -31102,35 +40083,41 @@ const Select = struct {
3110240083 smax,
3110340084 umax,
3110440085 },
31105
31106 const none: Adjust = .{ .factor = 0, .scale = .@"1", .amount = .none };
31107 const sub_ptr_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .ptr_size };
31108 const add_ptr_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .ptr_bit_size };
31109 const add_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .size };
31110 const sub_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .size };
31111 const add_src0_unaligned_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_unaligned_size };
31112 const sub_src0_unaligned_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_unaligned_size };
31113 const add_2_bit_size: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .bit_size };
31114 const add_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .bit_size };
31115 const sub_bit_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .bit_size };
31116 const add_src0_bit_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_bit_size };
31117 const sub_src0_bit_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_bit_size };
31118 const add_8_len: Adjust = .{ .factor = 1, .scale = .@"8", .amount = .len };
31119 const add_4_len: Adjust = .{ .factor = 1, .scale = .@"4", .amount = .len };
31120 const add_3_len: Adjust = .{ .factor = 1, .scale = .@"3", .amount = .len };
31121 const add_2_len: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .len };
31122 const add_len: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .len };
31123 const sub_len: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .len };
31124 const add_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size };
31125 const add_2_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"2", .amount = .src0_elem_size };
31126 const add_4_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"4", .amount = .src0_elem_size };
31127 const add_8_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"8", .amount = .src0_elem_size };
31128 const sub_src0_elem_size: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size };
31129 const add_src0_elem_size_times_src1: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .src0_elem_size_times_src1 };
31130 const sub_src0_elem_size_times_src1: Adjust = .{ .factor = -1, .scale = .@"1", .amount = .src0_elem_size_times_src1 };
31131 const add_log2_src0_elem_size: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .log2_src0_elem_size };
31132 const add_elem_limbs: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .elem_limbs };
31133 const add_umax: Adjust = .{ .factor = 1, .scale = .@"1", .amount = .umax };
40086 op: enum(u1) { mul, div },
40087 rhs: Memory.Scale,
40088
40089 const none: Adjust = .{ .sign = .pos, .lhs = .none, .op = .mul, .rhs = .@"1" };
40090 const sub_ptr_size: Adjust = .{ .sign = .neg, .lhs = .ptr_size, .op = .mul, .rhs = .@"1" };
40091 const add_ptr_bit_size: Adjust = .{ .sign = .pos, .lhs = .ptr_bit_size, .op = .mul, .rhs = .@"1" };
40092 const add_size: Adjust = .{ .sign = .pos, .lhs = .size, .op = .mul, .rhs = .@"1" };
40093 const add_size_div_8: Adjust = .{ .sign = .pos, .lhs = .size, .op = .div, .rhs = .@"8" };
40094 const sub_size_div_8: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"8" };
40095 const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" };
40096 const add_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_size, .op = .mul, .rhs = .@"1" };
40097 const add_src0_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" };
40098 const sub_src0_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" };
40099 const add_2_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"2" };
40100 const add_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };
40101 const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" };
40102 const add_src0_bit_size: Adjust = .{ .sign = .pos, .lhs = .src0_bit_size, .op = .mul, .rhs = .@"1" };
40103 const sub_src0_bit_size: Adjust = .{ .sign = .neg, .lhs = .src0_bit_size, .op = .mul, .rhs = .@"1" };
40104 const add_8_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"8" };
40105 const add_4_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"4" };
40106 const add_3_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"3" };
40107 const add_2_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"2" };
40108 const add_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"1" };
40109 const sub_len: Adjust = .{ .sign = .neg, .lhs = .len, .op = .mul, .rhs = .@"1" };
40110 const add_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"1" };
40111 const add_2_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"2" };
40112 const add_4_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"4" };
40113 const add_8_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"8" };
40114 const add_src0_elem_size_div_8: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .div, .rhs = .@"8" };
40115 const sub_src0_elem_size: Adjust = .{ .sign = .neg, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"1" };
40116 const add_src0_elem_size_times_src1: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size_times_src1, .op = .mul, .rhs = .@"1" };
40117 const sub_src0_elem_size_times_src1: Adjust = .{ .sign = .neg, .lhs = .src0_elem_size_times_src1, .op = .mul, .rhs = .@"1" };
40118 const add_log2_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .log2_src0_elem_size, .op = .mul, .rhs = .@"1" };
40119 const add_elem_limbs: Adjust = .{ .sign = .pos, .lhs = .elem_limbs, .op = .mul, .rhs = .@"1" };
40120 const add_umax: Adjust = .{ .sign = .pos, .lhs = .umax, .op = .mul, .rhs = .@"1" };
3113440121 };
3113540122 const Ref = enum(u4) {
3113640123 tmp0,
......@@ -31139,6 +40126,9 @@ const Select = struct {
3113940126 tmp3,
3114040127 tmp4,
3114140128 tmp5,
40129 tmp6,
40130 tmp7,
40131 tmp8,
3114240132 dst0,
3114340133 src0,
3114440134 src1,
......@@ -31210,6 +40200,36 @@ const Select = struct {
3121040200 const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword };
3121140201 const tmp5y: Sized = .{ .ref = .tmp5, .size = .yword };
3121240202
40203 const tmp6: Sized = .{ .ref = .tmp6, .size = .none };
40204 const tmp6b: Sized = .{ .ref = .tmp6, .size = .byte };
40205 const tmp6w: Sized = .{ .ref = .tmp6, .size = .word };
40206 const tmp6d: Sized = .{ .ref = .tmp6, .size = .dword };
40207 const tmp6p: Sized = .{ .ref = .tmp6, .size = .ptr };
40208 const tmp6q: Sized = .{ .ref = .tmp6, .size = .qword };
40209 const tmp6t: Sized = .{ .ref = .tmp6, .size = .tbyte };
40210 const tmp6x: Sized = .{ .ref = .tmp6, .size = .xword };
40211 const tmp6y: Sized = .{ .ref = .tmp6, .size = .yword };
40212
40213 const tmp7: Sized = .{ .ref = .tmp7, .size = .none };
40214 const tmp7b: Sized = .{ .ref = .tmp7, .size = .byte };
40215 const tmp7w: Sized = .{ .ref = .tmp7, .size = .word };
40216 const tmp7d: Sized = .{ .ref = .tmp7, .size = .dword };
40217 const tmp7p: Sized = .{ .ref = .tmp7, .size = .ptr };
40218 const tmp7q: Sized = .{ .ref = .tmp7, .size = .qword };
40219 const tmp7t: Sized = .{ .ref = .tmp7, .size = .tbyte };
40220 const tmp7x: Sized = .{ .ref = .tmp7, .size = .xword };
40221 const tmp7y: Sized = .{ .ref = .tmp7, .size = .yword };
40222
40223 const tmp8: Sized = .{ .ref = .tmp8, .size = .none };
40224 const tmp8b: Sized = .{ .ref = .tmp8, .size = .byte };
40225 const tmp8w: Sized = .{ .ref = .tmp8, .size = .word };
40226 const tmp8d: Sized = .{ .ref = .tmp8, .size = .dword };
40227 const tmp8p: Sized = .{ .ref = .tmp8, .size = .ptr };
40228 const tmp8q: Sized = .{ .ref = .tmp8, .size = .qword };
40229 const tmp8t: Sized = .{ .ref = .tmp8, .size = .tbyte };
40230 const tmp8x: Sized = .{ .ref = .tmp8, .size = .xword };
40231 const tmp8y: Sized = .{ .ref = .tmp8, .size = .yword };
40232
3121340233 const dst0: Sized = .{ .ref = .dst0, .size = .none };
3121440234 const dst0b: Sized = .{ .ref = .dst0, .size = .byte };
3121540235 const dst0w: Sized = .{ .ref = .dst0, .size = .word };
......@@ -31307,6 +40327,33 @@ const Select = struct {
3130740327 const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x };
3130840328 const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y };
3130940329
40330 const tmp6b: Select.Operand = .{ .tag = .ref, .base = .tmp6b };
40331 const tmp6w: Select.Operand = .{ .tag = .ref, .base = .tmp6w };
40332 const tmp6d: Select.Operand = .{ .tag = .ref, .base = .tmp6d };
40333 const tmp6p: Select.Operand = .{ .tag = .ref, .base = .tmp6p };
40334 const tmp6q: Select.Operand = .{ .tag = .ref, .base = .tmp6q };
40335 const tmp6t: Select.Operand = .{ .tag = .ref, .base = .tmp6t };
40336 const tmp6x: Select.Operand = .{ .tag = .ref, .base = .tmp6x };
40337 const tmp6y: Select.Operand = .{ .tag = .ref, .base = .tmp6y };
40338
40339 const tmp7b: Select.Operand = .{ .tag = .ref, .base = .tmp7b };
40340 const tmp7w: Select.Operand = .{ .tag = .ref, .base = .tmp7w };
40341 const tmp7d: Select.Operand = .{ .tag = .ref, .base = .tmp7d };
40342 const tmp7p: Select.Operand = .{ .tag = .ref, .base = .tmp7p };
40343 const tmp7q: Select.Operand = .{ .tag = .ref, .base = .tmp7q };
40344 const tmp7t: Select.Operand = .{ .tag = .ref, .base = .tmp7t };
40345 const tmp7x: Select.Operand = .{ .tag = .ref, .base = .tmp7x };
40346 const tmp7y: Select.Operand = .{ .tag = .ref, .base = .tmp7y };
40347
40348 const tmp8b: Select.Operand = .{ .tag = .ref, .base = .tmp8b };
40349 const tmp8w: Select.Operand = .{ .tag = .ref, .base = .tmp8w };
40350 const tmp8d: Select.Operand = .{ .tag = .ref, .base = .tmp8d };
40351 const tmp8p: Select.Operand = .{ .tag = .ref, .base = .tmp8p };
40352 const tmp8q: Select.Operand = .{ .tag = .ref, .base = .tmp8q };
40353 const tmp8t: Select.Operand = .{ .tag = .ref, .base = .tmp8t };
40354 const tmp8x: Select.Operand = .{ .tag = .ref, .base = .tmp8x };
40355 const tmp8y: Select.Operand = .{ .tag = .ref, .base = .tmp8y };
40356
3131040357 const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b };
3131140358 const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w };
3131240359 const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d };
......@@ -31518,11 +40565,15 @@ const Select = struct {
3151840565 const UnsignedImm = @Type(.{
3151940566 .int = .{ .signedness = .unsigned, .bits = @typeInfo(SignedImm).int.bits },
3152040567 });
31521 return @as(i5, op.adjust.factor) * op.adjust.scale.toFactor() * @as(SignedImm, switch (op.adjust.amount) {
40568 const lhs: SignedImm = lhs: switch (op.adjust.lhs) {
3152240569 .none => 0,
3152340570 .ptr_size => @divExact(s.cg.target.ptrBitWidth(), 8),
3152440571 .ptr_bit_size => s.cg.target.ptrBitWidth(),
3152540572 .size => @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu)),
40573 .size_sub_elem_size => {
40574 const ty = op.base.ref.deref(s).typeOf(s.cg);
40575 break :lhs @intCast(ty.abiSize(s.cg.pt.zcu) - ty.elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu));
40576 },
3152640577 .src0_unaligned_size => @intCast(s.cg.unalignedSize(Select.Operand.Ref.src0.deref(s).typeOf(s.cg))),
3152740578 .bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),
3152840579 .src0_bit_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)),
......@@ -31544,7 +40595,20 @@ const Select = struct {
3154440595 .umax => @bitCast(@as(UnsignedImm, std.math.maxInt(UnsignedImm)) >> @truncate(
3154540596 -%op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu),
3154640597 )),
31547 }) + op.imm;
40598 };
40599 const rhs = op.adjust.rhs.toLog2();
40600 const res = res: switch (op.adjust.op) {
40601 .mul => {
40602 const res = @shlWithOverflow(lhs, rhs);
40603 assert(res[1] == 0);
40604 break :res res[0];
40605 },
40606 .div => @shrExact(lhs, rhs),
40607 };
40608 return switch (op.adjust.sign) {
40609 .neg => op.imm - res,
40610 .pos => op.imm + res,
40611 };
3154840612 }
3154940613
3155040614 fn lower(op: Select.Operand, s: *Select) !CodeGen.Operand {
......@@ -31566,6 +40630,7 @@ const Select = struct {
3156640630 } },
3156740631 else => |mcv| .{ .mem = try mcv.mem(s.cg, .{ .size = op.base.size }) },
3156840632 .register => |reg| .{ .reg = s.lowerReg(registerAlias(reg, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8)))) },
40633 .lea_symbol => |sym_off| .{ .imm = .rel(sym_off) },
3156940634 },
3157040635 .simm => .{ .imm = .s(op.adjustedImm(i32, s)) },
3157140636 .uimm => .{ .imm = .u(@bitCast(op.adjustedImm(i64, s))) },
......@@ -31601,6 +40666,7 @@ fn select(
3160140666 src_temps: []Temp,
3160240667 cases: []const Select.Case,
3160340668) !void {
40669 @setEvalBranchQuota(33_600);
3160440670 cases: for (cases) |case| {
3160540671 for (case.required_features) |required_feature| if (required_feature) |feature| if (!cg.hasFeature(feature)) continue :cases;
3160640672 for (case.dst_constraints[0..dst_temps.len], dst_tys) |dst_constraint, dst_ty| if (!dst_constraint.accepts(dst_ty, cg)) continue :cases;
......@@ -31613,6 +40679,16 @@ fn select(
3161340679 for (pattern.src[0..src_temps.len], src_temps) |src_pattern, src_temp| if (!src_pattern.matches(src_temp, cg)) continue :patterns;
3161440680 if (std.debug.runtime_safety) for (pattern.src[src_temps.len..]) |src_pattern| assert(src_pattern == .none);
3161540681
40682 if (case.call_frame.alignment != .none) {
40683 const frame_allocs_slice = cg.frame_allocs.slice();
40684 const stack_frame_size =
40685 &frame_allocs_slice.items(.abi_size)[@intFromEnum(FrameIndex.call_frame)];
40686 stack_frame_size.* = @max(stack_frame_size.*, case.call_frame.size);
40687 const stack_frame_align =
40688 &frame_allocs_slice.items(.abi_align)[@intFromEnum(FrameIndex.call_frame)];
40689 stack_frame_align.* = stack_frame_align.max(case.call_frame.alignment);
40690 }
40691
3161640692 var s: Select = .{
3161740693 .cg = cg,
3161840694 .temps = undefined,
......@@ -31623,15 +40699,32 @@ fn select(
3162340699 const dst_slots = s.temps[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)];
3162440700 const src_slots = s.temps[@intFromEnum(Select.Operand.Ref.src0)..@intFromEnum(Select.Operand.Ref.none)];
3162540701
31626 for (0..case.clobbers.st -| 1) |i| {
31627 const tracked_index: RegisterManager.TrackedIndex = @intCast(RegisterManager.indexOfKnownRegIntoTracked(.st6).? - i);
31628 try cg.register_manager.getRegIndex(tracked_index, null);
31629 _ = cg.register_manager.lockRegIndexAssumeUnused(tracked_index);
40702 caller_preserved: {
40703 const cc = switch (case.clobbers.caller_preserved) {
40704 .none => break :caller_preserved,
40705 .ccc => cg.target.cCallingConvention().?,
40706 .zigcc => .auto,
40707 };
40708 const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: {
40709 const param_gpr = abi.getCAbiIntParamRegs(.auto);
40710 break :err_ret_trace_reg param_gpr[param_gpr.len - 1];
40711 } else .none;
40712 switch (cc) {
40713 else => unreachable,
40714 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| skip: {
40715 if (reg == err_ret_trace_reg) break :skip;
40716 const tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse break :skip;
40717 try cg.register_manager.getRegIndex(tracked_index, null);
40718 assert(cg.register_manager.lockRegIndexAssumeUnused(tracked_index).tracked_index == tracked_index);
40719 },
40720 }
3163040721 }
3163140722
3163240723 @memcpy(src_slots[0..src_temps.len], src_temps);
3163340724 std.mem.swap(Temp, &src_slots[pattern.commute[0]], &src_slots[pattern.commute[1]]);
31634 for (tmp_slots, case.extra_temps) |*slot, spec| slot.* = try spec.create(&s) orelse continue;
40725 for (1..3) |pass| for (tmp_slots, case.extra_temps) |*slot, spec| if (pass == spec.pass()) {
40726 slot.* = try spec.create(&s);
40727 };
3163540728
3163640729 while (true) for (pattern.src[0..src_temps.len], src_temps) |src_pattern, *src_temp| {
3163740730 if (try src_pattern.convert(src_temp, cg)) break;
......@@ -31642,7 +40735,7 @@ fn select(
3164240735 if (case.clobbers.eflags) try cg.spillEflagsIfOccupied();
3164340736
3164440737 for (dst_temps, dst_tys, case.dst_temps[0..dst_temps.len]) |*dst_temp, dst_ty, dst_kind|
31645 dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s)).?;
40738 dst_temp.* = (try Select.TempSpec.create(.{ .type = dst_ty, .kind = dst_kind }, &s));
3164640739 @memcpy(dst_slots[0..dst_temps.len], dst_temps);
3164740740
3164840741 switch (case.each) {
......@@ -31653,9 +40746,24 @@ fn select(
3165340746 }
3165440747 assert(s.top == 0);
3165540748
31656 for (0..case.clobbers.st -| 1) |i| cg.register_manager.unlockReg(.{
31657 .tracked_index = @intCast(RegisterManager.indexOfKnownRegIntoTracked(.st6).? - i),
31658 });
40749 caller_preserved: {
40750 const cc = switch (case.clobbers.caller_preserved) {
40751 .none => break :caller_preserved,
40752 .ccc => cg.target.cCallingConvention().?,
40753 .zigcc => .auto,
40754 };
40755 const err_ret_trace_reg = if (cc == .auto and cg.pt.zcu.comp.config.any_error_tracing) err_ret_trace_reg: {
40756 const param_gpr = abi.getCAbiIntParamRegs(.auto);
40757 break :err_ret_trace_reg param_gpr[param_gpr.len - 1];
40758 } else .none;
40759 switch (cc) {
40760 else => unreachable,
40761 inline .x86_64_sysv, .x86_64_win, .auto => |_, tag| inline for (comptime abi.getCallerPreservedRegs(tag)) |reg| skip: {
40762 if (reg == err_ret_trace_reg) break :skip;
40763 cg.register_manager.unlockReg(.{ .tracked_index = RegisterManager.indexOfKnownRegIntoTracked(reg) orelse break :skip });
40764 },
40765 }
40766 }
3165940767 for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s);
3166040768 for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg);
3166140769 return;
src/arch/x86_64/Encoding.zig+3-2
......@@ -361,7 +361,7 @@ pub const Mnemonic = enum {
361361 addps, addss,
362362 andps,
363363 andnps,
364 cmpps, cmpss,
364 cmpps, cmpss, comiss,
365365 cvtpi2ps, cvtps2pi, cvtsi2ss, cvtss2si, cvttps2pi, cvttss2si,
366366 divps, divss,
367367 fxrstor, fxrstor64, fxsave, fxsave64,
......@@ -386,7 +386,7 @@ pub const Mnemonic = enum {
386386 andpd,
387387 andnpd,
388388 cmppd, //cmpsd,
389 comisd, comiss,
389 comisd,
390390 cvtdq2pd, cvtdq2ps, cvtpd2dq, cvtpd2pi, cvtpd2ps, cvtpi2pd,
391391 cvtps2dq, cvtps2pd, cvtsd2si, cvtsd2ss, cvtsi2sd, cvtss2sd,
392392 cvttpd2dq, cvttpd2pi, cvttps2dq, cvttsd2si,
......@@ -504,6 +504,7 @@ pub const Mnemonic = enum {
504504 vstmxcsr,
505505 vsubpd, vsubps, vsubsd, vsubss,
506506 vtestpd, vtestps,
507 vucomisd, vucomiss,
507508 vxorpd, vxorps,
508509 // F16C
509510 vcvtph2ps, vcvtps2ph,
src/arch/x86_64/Mir.zig+4-4
......@@ -354,6 +354,8 @@ pub const Inst = struct {
354354 fn_env,
355355 /// Float No Wait ___ status word
356356 fn_sw,
357 /// Float Extended ___
358 fx_,
357359
358360 /// ___ in 32-bit and Compatibility Mode
359361 _32,
......@@ -817,8 +819,10 @@ pub const Inst = struct {
817819 /// Round to integer
818820 rndint,
819821 /// Restore x87 FPU state
822 /// Restore x87 FPU, MMX, XMM, and MXCSR state
820823 rstor,
821824 /// Store x87 FPU state
825 /// Save x87 FPU, MMX technology, and MXCSR state
822826 save,
823827 /// Scale
824828 scale,
......@@ -923,10 +927,6 @@ pub const Inst = struct {
923927 /// Extract doubleword
924928 /// Extract quadword
925929 extr,
926 /// Restore x87 FPU, MMX, XMM, and MXCSR state
927 fxrstor,
928 /// Save x87 FPU, MMX technology, and MXCSR state
929 fxsave,
930930 /// Insert byte
931931 /// Insert word
932932 /// Insert doubleword
src/arch/x86_64/bits.zig+5-2
......@@ -366,7 +366,7 @@ pub const Register = enum(u8) {
366366 @intFromEnum(Register.eax) ... @intFromEnum(Register.r15d) => @intFromEnum(Register.eax),
367367 @intFromEnum(Register.ax) ... @intFromEnum(Register.r15w) => @intFromEnum(Register.ax),
368368 @intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al),
369 @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah) - 4,
369 @intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah),
370370 else => unreachable,
371371 // zig fmt: on
372372 };
......@@ -385,7 +385,10 @@ pub const Register = enum(u8) {
385385 }
386386
387387 pub fn to8(reg: Register) Register {
388 return @enumFromInt(@intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.al));
388 return switch (@intFromEnum(reg)) {
389 else => @enumFromInt(@intFromEnum(reg) - reg.gpBase() + @intFromEnum(Register.al)),
390 @intFromEnum(Register.ah)...@intFromEnum(Register.bh) => reg,
391 };
389392 }
390393
391394 fn sseBase(reg: Register) u7 {
src/arch/x86_64/encodings.zig+6
......@@ -437,6 +437,7 @@ pub const table = [_]Entry{
437437 .{ .jmp, .d, &.{ .rel32 }, &.{ 0xe9 }, 0, .none, .none },
438438 .{ .jmp, .m, &.{ .rm64 }, &.{ 0xff }, 4, .none, .none },
439439
440 .{ .lahf, .z, &.{}, &.{ 0x9f }, 0, .none, .@"32bit" },
440441 .{ .lahf, .z, &.{}, &.{ 0x9f }, 0, .none, .sahf },
441442
442443 .{ .lar, .rm, &.{ .r16, .rm16 }, &.{ 0x0f, 0x02 }, 0, .none, .none },
......@@ -744,6 +745,7 @@ pub const table = [_]Entry{
744745
745746 .{ .rsm, .z, &.{}, &.{ 0x0f, 0xaa }, 0, .none, .none },
746747
748 .{ .sahf, .z, &.{}, &.{ 0x9e }, 0, .none, .@"32bit" },
747749 .{ .sahf, .z, &.{}, &.{ 0x9e }, 0, .none, .sahf },
748750
749751 .{ .sal, .m1, &.{ .rm8, .unity }, &.{ 0xd0 }, 4, .none, .none },
......@@ -2275,6 +2277,10 @@ pub const table = [_]Entry{
22752277 .{ .vtestpd, .rm, &.{ .xmm, .xmm_m128 }, &.{ 0x66, 0x0f, 0x38, 0x0f }, 0, .vex_128_w0, .avx },
22762278 .{ .vtestpd, .rm, &.{ .ymm, .ymm_m256 }, &.{ 0x66, 0x0f, 0x38, 0x0f }, 0, .vex_256_w0, .avx },
22772279
2280 .{ .vucomisd, .rm, &.{ .xmm, .xmm_m64 }, &.{ 0x66, 0x0f, 0x2e }, 0, .vex_lig_wig, .avx },
2281
2282 .{ .vucomiss, .rm, &.{ .xmm, .xmm_m32 }, &.{ 0x0f, 0x2e }, 0, .vex_lig_wig, .avx },
2283
22782284 .{ .vxorpd, .rvm, &.{ .xmm, .xmm, .xmm_m128 }, &.{ 0x66, 0x0f, 0x57 }, 0, .vex_128_wig, .avx },
22792285 .{ .vxorpd, .rvm, &.{ .ymm, .ymm, .ymm_m256 }, &.{ 0x66, 0x0f, 0x57 }, 0, .vex_256_wig, .avx },
22802286
src/codegen/c.zig+98-98
......@@ -706,7 +706,7 @@ pub const DeclGen = struct {
706706 const uav_ty = uav_val.typeOf(zcu);
707707
708708 // Render an undefined pointer if we have a pointer to a zero-bit or comptime type.
709 const ptr_ty = Type.fromInterned(uav.orig_ty);
709 const ptr_ty: Type = .fromInterned(uav.orig_ty);
710710 if (ptr_ty.isPtrAtRuntime(zcu) and !uav_ty.isFnOrHasRuntimeBits(zcu)) {
711711 return dg.writeCValue(writer, .{ .undef = ptr_ty });
712712 }
......@@ -782,7 +782,7 @@ pub const DeclGen = struct {
782782 };
783783
784784 // Render an undefined pointer if we have a pointer to a zero-bit or comptime type.
785 const nav_ty = Type.fromInterned(ip.getNav(owner_nav).typeOf(ip));
785 const nav_ty: Type = .fromInterned(ip.getNav(owner_nav).typeOf(ip));
786786 const ptr_ty = try pt.navPtrType(owner_nav);
787787 if (!nav_ty.isFnOrHasRuntimeBits(zcu)) {
788788 return dg.writeCValue(writer, .{ .undef = ptr_ty });
......@@ -819,7 +819,7 @@ pub const DeclGen = struct {
819819 .comptime_alloc_ptr, .comptime_field_ptr => unreachable,
820820 .int => |int| {
821821 const ptr_ctype = try dg.ctypeFromType(int.ptr_ty, .complete);
822 const addr_val = try pt.intValue(Type.usize, int.addr);
822 const addr_val = try pt.intValue(.usize, int.addr);
823823 try writer.writeByte('(');
824824 try dg.renderCType(writer, ptr_ctype);
825825 try writer.print("){x}", .{try dg.fmtIntLiteral(addr_val, .Other)});
......@@ -859,7 +859,7 @@ pub const DeclGen = struct {
859859 try writer.writeByte('(');
860860 try dg.renderCType(writer, ptr_ctype);
861861 try writer.writeByte(')');
862 const offset_val = try pt.intValue(Type.usize, byte_offset);
862 const offset_val = try pt.intValue(.usize, byte_offset);
863863 try writer.writeAll("((char *)");
864864 try dg.renderPointer(writer, field.parent.*, location);
865865 try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});
......@@ -875,7 +875,7 @@ pub const DeclGen = struct {
875875 try writer.writeByte(')');
876876 try dg.renderPointer(writer, elem.parent.*, location);
877877 } else {
878 const index_val = try pt.intValue(Type.usize, elem.elem_idx);
878 const index_val = try pt.intValue(.usize, elem.elem_idx);
879879 // We want to do pointer arithmetic on a pointer to the element type.
880880 // We might have a pointer-to-array. In this case, we must cast first.
881881 const result_ctype = try dg.ctypeFromType(elem.result_ptr_ty, .complete);
......@@ -904,7 +904,7 @@ pub const DeclGen = struct {
904904 if (oac.byte_offset == 0) {
905905 try dg.renderPointer(writer, oac.parent.*, location);
906906 } else {
907 const offset_val = try pt.intValue(Type.usize, oac.byte_offset);
907 const offset_val = try pt.intValue(.usize, oac.byte_offset);
908908 try writer.writeAll("((char *)");
909909 try dg.renderPointer(writer, oac.parent.*, location);
910910 try writer.print(" + {})", .{try dg.fmtIntLiteral(offset_val, .Other)});
......@@ -984,7 +984,7 @@ pub const DeclGen = struct {
984984 try writer.writeAll("((");
985985 try dg.renderCType(writer, ctype);
986986 try writer.print("){x})", .{try dg.fmtIntLiteral(
987 try pt.intValue(Type.usize, val.toUnsignedInt(zcu)),
987 try pt.intValue(.usize, val.toUnsignedInt(zcu)),
988988 .Other,
989989 )});
990990 },
......@@ -1153,7 +1153,7 @@ pub const DeclGen = struct {
11531153 else => |payload| switch (ip.indexToKey(payload)) {
11541154 .undef => |err_ty| try dg.renderUndefValue(
11551155 writer,
1156 Type.fromInterned(err_ty),
1156 .fromInterned(err_ty),
11571157 location,
11581158 ),
11591159 .err => |err| try dg.renderErrorName(writer, err.name),
......@@ -1204,7 +1204,7 @@ pub const DeclGen = struct {
12041204 ),
12051205 },
12061206 .ptr => try writer.writeAll("NULL"),
1207 .len => try dg.renderUndefValue(writer, Type.usize, initializer_type),
1207 .len => try dg.renderUndefValue(writer, .usize, initializer_type),
12081208 else => unreachable,
12091209 }
12101210 }
......@@ -1219,7 +1219,7 @@ pub const DeclGen = struct {
12191219 try writer.writeByte(')');
12201220 }
12211221 const ai = ty.arrayInfo(zcu);
1222 if (ai.elem_type.eql(Type.u8, zcu)) {
1222 if (ai.elem_type.eql(.u8, zcu)) {
12231223 var literal = stringLiteral(writer, ty.arrayLenIncludingSentinel(zcu));
12241224 try literal.start();
12251225 var index: usize = 0;
......@@ -1263,7 +1263,7 @@ pub const DeclGen = struct {
12631263 for (0..tuple.types.len) |field_index| {
12641264 const comptime_val = tuple.values.get(ip)[field_index];
12651265 if (comptime_val != .none) continue;
1266 const field_ty = Type.fromInterned(tuple.types.get(ip)[field_index]);
1266 const field_ty: Type = .fromInterned(tuple.types.get(ip)[field_index]);
12671267 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
12681268
12691269 if (!empty) try writer.writeByte(',');
......@@ -1298,7 +1298,7 @@ pub const DeclGen = struct {
12981298 var field_it = loaded_struct.iterateRuntimeOrder(ip);
12991299 var need_comma = false;
13001300 while (field_it.next()) |field_index| {
1301 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1301 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
13021302 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13031303
13041304 if (need_comma) try writer.writeByte(',');
......@@ -1325,7 +1325,7 @@ pub const DeclGen = struct {
13251325 var eff_num_fields: usize = 0;
13261326
13271327 for (0..loaded_struct.field_types.len) |field_index| {
1328 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1328 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
13291329 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13301330 eff_num_fields += 1;
13311331 }
......@@ -1346,7 +1346,7 @@ pub const DeclGen = struct {
13461346 var eff_index: usize = 0;
13471347 var needs_closing_paren = false;
13481348 for (0..loaded_struct.field_types.len) |field_index| {
1349 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1349 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
13501350 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13511351
13521352 const field_val = switch (ip.indexToKey(val.toIntern()).aggregate.storage) {
......@@ -1382,7 +1382,7 @@ pub const DeclGen = struct {
13821382 // a << a_off | b << b_off | c << c_off
13831383 var empty = true;
13841384 for (0..loaded_struct.field_types.len) |field_index| {
1385 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1385 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
13861386 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
13871387
13881388 if (!empty) try writer.writeAll(" | ");
......@@ -1466,7 +1466,7 @@ pub const DeclGen = struct {
14661466 }
14671467
14681468 const field_index = zcu.unionTagFieldIndex(loaded_union, Value.fromInterned(un.tag)).?;
1469 const field_ty = Type.fromInterned(loaded_union.field_types.get(ip)[field_index]);
1469 const field_ty: Type = .fromInterned(loaded_union.field_types.get(ip)[field_index]);
14701470 const field_name = loaded_union.loadTagType(ip).names.get(ip)[field_index];
14711471 if (loaded_union.flagsUnordered(ip).layout == .@"packed") {
14721472 if (field_ty.hasRuntimeBits(zcu)) {
......@@ -1509,7 +1509,7 @@ pub const DeclGen = struct {
15091509 );
15101510 try writer.writeByte(' ');
15111511 } else for (0..loaded_union.field_types.len) |inner_field_index| {
1512 const inner_field_ty = Type.fromInterned(
1512 const inner_field_ty: Type = .fromInterned(
15131513 loaded_union.field_types.get(ip)[inner_field_index],
15141514 );
15151515 if (!inner_field_ty.hasRuntimeBits(zcu)) continue;
......@@ -1592,7 +1592,7 @@ pub const DeclGen = struct {
15921592 try writer.writeAll("((");
15931593 try dg.renderCType(writer, ctype);
15941594 return writer.print("){x})", .{
1595 try dg.fmtIntLiteral(try pt.undefValue(Type.usize), .Other),
1595 try dg.fmtIntLiteral(try pt.undefValue(.usize), .Other),
15961596 });
15971597 },
15981598 .slice => {
......@@ -1606,14 +1606,14 @@ pub const DeclGen = struct {
16061606 const ptr_ty = ty.slicePtrFieldType(zcu);
16071607 try dg.renderType(writer, ptr_ty);
16081608 return writer.print("){x}, {0x}}}", .{
1609 try dg.fmtIntLiteral(try dg.pt.undefValue(Type.usize), .Other),
1609 try dg.fmtIntLiteral(try dg.pt.undefValue(.usize), .Other),
16101610 });
16111611 },
16121612 },
16131613 .opt_type => |child_type| switch (ctype.info(ctype_pool)) {
16141614 .basic, .pointer => try dg.renderUndefValue(
16151615 writer,
1616 Type.fromInterned(if (ctype.isBool()) .bool_type else child_type),
1616 .fromInterned(if (ctype.isBool()) .bool_type else child_type),
16171617 location,
16181618 ),
16191619 .aligned, .array, .vector, .fwd_decl, .function => unreachable,
......@@ -1622,7 +1622,7 @@ pub const DeclGen = struct {
16221622 .is_null, .payload => {},
16231623 .ptr, .len => return dg.renderUndefValue(
16241624 writer,
1625 Type.fromInterned(child_type),
1625 .fromInterned(child_type),
16261626 location,
16271627 ),
16281628 else => unreachable,
......@@ -1635,7 +1635,7 @@ pub const DeclGen = struct {
16351635 try writer.writeByte('{');
16361636 for (0..aggregate.fields.len) |field_index| {
16371637 if (field_index > 0) try writer.writeByte(',');
1638 try dg.renderUndefValue(writer, Type.fromInterned(
1638 try dg.renderUndefValue(writer, .fromInterned(
16391639 switch (aggregate.fields.at(field_index, ctype_pool).name.index) {
16401640 .is_null => .bool_type,
16411641 .payload => child_type,
......@@ -1660,7 +1660,7 @@ pub const DeclGen = struct {
16601660 var field_it = loaded_struct.iterateRuntimeOrder(ip);
16611661 var need_comma = false;
16621662 while (field_it.next()) |field_index| {
1663 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
1663 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
16641664 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
16651665
16661666 if (need_comma) try writer.writeByte(',');
......@@ -1685,7 +1685,7 @@ pub const DeclGen = struct {
16851685 var need_comma = false;
16861686 for (0..tuple_info.types.len) |field_index| {
16871687 if (tuple_info.values.get(ip)[field_index] != .none) continue;
1688 const field_ty = Type.fromInterned(tuple_info.types.get(ip)[field_index]);
1688 const field_ty: Type = .fromInterned(tuple_info.types.get(ip)[field_index]);
16891689 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
16901690
16911691 if (need_comma) try writer.writeByte(',');
......@@ -1715,13 +1715,13 @@ pub const DeclGen = struct {
17151715 .payload) {
17161716 .tag => try dg.renderUndefValue(
17171717 writer,
1718 Type.fromInterned(loaded_union.enum_tag_ty),
1718 .fromInterned(loaded_union.enum_tag_ty),
17191719 initializer_type,
17201720 ),
17211721 .payload => {
17221722 try writer.writeByte('{');
17231723 for (0..loaded_union.field_types.len) |inner_field_index| {
1724 const inner_field_ty = Type.fromInterned(
1724 const inner_field_ty: Type = .fromInterned(
17251725 loaded_union.field_types.get(ip)[inner_field_index],
17261726 );
17271727 if (!inner_field_ty.hasRuntimeBits(pt.zcu)) continue;
......@@ -1747,7 +1747,7 @@ pub const DeclGen = struct {
17471747 .error_union_type => |error_union_type| switch (ctype.info(ctype_pool)) {
17481748 .basic => try dg.renderUndefValue(
17491749 writer,
1750 Type.fromInterned(error_union_type.error_set_type),
1750 .fromInterned(error_union_type.error_set_type),
17511751 location,
17521752 ),
17531753 .pointer, .aligned, .array, .vector, .fwd_decl, .function => unreachable,
......@@ -1762,7 +1762,7 @@ pub const DeclGen = struct {
17621762 if (field_index > 0) try writer.writeByte(',');
17631763 try dg.renderUndefValue(
17641764 writer,
1765 Type.fromInterned(
1765 .fromInterned(
17661766 switch (aggregate.fields.at(field_index, ctype_pool).name.index) {
17671767 .@"error" => error_union_type.error_set_type,
17681768 .payload => error_union_type.payload_type,
......@@ -1777,7 +1777,7 @@ pub const DeclGen = struct {
17771777 },
17781778 .array_type, .vector_type => {
17791779 const ai = ty.arrayInfo(zcu);
1780 if (ai.elem_type.eql(Type.u8, zcu)) {
1780 if (ai.elem_type.eql(.u8, zcu)) {
17811781 const c_len = ty.arrayLenIncludingSentinel(zcu);
17821782 var literal = stringLiteral(writer, c_len);
17831783 try literal.start();
......@@ -1981,8 +1981,8 @@ pub const DeclGen = struct {
19811981
19821982 const src_is_ptr = src_ty.isPtrAtRuntime(pt.zcu);
19831983 const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {
1984 .unsigned => Type.usize,
1985 .signed => Type.isize,
1984 .unsigned => .usize,
1985 .signed => .isize,
19861986 } else src_ty;
19871987
19881988 const src_bits = src_eff_ty.bitSize(zcu);
......@@ -2022,8 +2022,8 @@ pub const DeclGen = struct {
20222022
20232023 const src_is_ptr = src_ty.isPtrAtRuntime(zcu);
20242024 const src_eff_ty: Type = if (src_is_ptr) switch (dest_int_info.signedness) {
2025 .unsigned => Type.usize,
2026 .signed => Type.isize,
2025 .unsigned => .usize,
2026 .signed => .isize,
20272027 } else src_ty;
20282028
20292029 const src_bits = src_eff_ty.bitSize(zcu);
......@@ -2249,7 +2249,7 @@ pub const DeclGen = struct {
22492249 if (flags.is_threadlocal and !dg.mod.single_threaded) try fwd.writeAll("zig_threadlocal ");
22502250 try dg.renderTypeAndName(
22512251 fwd,
2252 Type.fromInterned(nav.typeOf(ip)),
2252 .fromInterned(nav.typeOf(ip)),
22532253 .{ .nav = nav_index },
22542254 CQualifiers.init(.{ .@"const" = flags.is_const }),
22552255 nav.getAlignment(),
......@@ -2321,7 +2321,7 @@ pub const DeclGen = struct {
23212321
23222322 if (is_big) try writer.print(", {}", .{int_info.signedness == .signed});
23232323 try writer.print(", {}", .{try dg.fmtIntLiteral(
2324 try pt.intValue(if (is_big) Type.u16 else Type.u8, int_info.bits),
2324 try pt.intValue(if (is_big) .u16 else .u8, int_info.bits),
23252325 .FunctionArgument,
23262326 )});
23272327 }
......@@ -2657,7 +2657,7 @@ pub fn genTypeDecl(
26572657 },
26582658 .index => |index| if (!found_existing) {
26592659 const ip = &zcu.intern_pool;
2660 const ty = Type.fromInterned(index);
2660 const ty: Type = .fromInterned(index);
26612661 _ = try renderTypePrefix(.flush, global_ctype_pool, zcu, writer, global_ctype, .suffix, .{});
26622662 try writer.writeByte(';');
26632663 const file_scope = ty.typeDeclInstAllowGeneratedTag(zcu).?.resolveFile(ip);
......@@ -2772,7 +2772,7 @@ pub fn genErrDecls(o: *Object) !void {
27722772 if (val > 1) try writer.writeAll(", ");
27732773 try writer.print("{{" ++ name_prefix ++ "{}, {}}}", .{
27742774 fmtIdent(name),
2775 try o.dg.fmtIntLiteral(try pt.intValue(Type.usize, name.len), .StaticInitializer),
2775 try o.dg.fmtIntLiteral(try pt.intValue(.usize, name.len), .StaticInitializer),
27762776 });
27772777 }
27782778 try writer.writeAll("};\n");
......@@ -2788,8 +2788,8 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn
27882788 const val = lazy_fn.value_ptr;
27892789 switch (key) {
27902790 .tag_name => |enum_ty_ip| {
2791 const enum_ty = Type.fromInterned(enum_ty_ip);
2792 const name_slice_ty = Type.slice_const_u8_sentinel_0;
2791 const enum_ty: Type = .fromInterned(enum_ty_ip);
2792 const name_slice_ty: Type = .slice_const_u8_sentinel_0;
27932793
27942794 try w.writeAll("static ");
27952795 try o.dg.renderType(w, name_slice_ty);
......@@ -2822,7 +2822,7 @@ pub fn genLazyFn(o: *Object, lazy_ctype_pool: *const CType.Pool, lazy_fn: LazyFn
28222822 try o.dg.renderType(w, name_slice_ty);
28232823 try w.print("){{{}, {}}};\n", .{
28242824 fmtIdent("name"),
2825 try o.dg.fmtIntLiteral(try pt.intValue(Type.usize, tag_name_len), .Other),
2825 try o.dg.fmtIntLiteral(try pt.intValue(.usize, tag_name_len), .Other),
28262826 });
28272827
28282828 try w.writeAll(" }\n");
......@@ -2966,7 +2966,7 @@ pub fn genDecl(o: *Object) !void {
29662966 const zcu = pt.zcu;
29672967 const ip = &zcu.intern_pool;
29682968 const nav = ip.getNav(o.dg.pass.nav);
2969 const nav_ty = Type.fromInterned(nav.typeOf(ip));
2969 const nav_ty: Type = .fromInterned(nav.typeOf(ip));
29702970
29712971 if (!nav_ty.isFnOrHasRuntimeBitsIgnoreComptime(zcu)) return;
29722972 switch (ip.indexToKey(nav.status.fully_resolved.val)) {
......@@ -3717,7 +3717,7 @@ fn airArg(f: *Function, inst: Air.Inst.Index) !CValue {
37173717 if (f.liveness.isUnused(inst)) {
37183718 const writer = f.object.writer();
37193719 try writer.writeByte('(');
3720 try f.renderType(writer, Type.void);
3720 try f.renderType(writer, .void);
37213721 try writer.writeByte(')');
37223722 try f.writeCValue(writer, result, .Other);
37233723 try writer.writeAll(";\n");
......@@ -3735,7 +3735,7 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
37353735 const ptr_ty = f.typeOf(ty_op.operand);
37363736 const ptr_scalar_ty = ptr_ty.scalarType(zcu);
37373737 const ptr_info = ptr_scalar_ty.ptrInfo(zcu);
3738 const src_ty = Type.fromInterned(ptr_info.child);
3738 const src_ty: Type = .fromInterned(ptr_info.child);
37393739
37403740 if (!src_ty.hasRuntimeBitsIgnoreComptime(zcu)) {
37413741 try reap(f, inst, &.{ty_op.operand});
......@@ -3953,7 +3953,7 @@ fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue {
39533953 .signed => {
39543954 const c_bits = toCIntBits(scalar_int_info.bits) orelse
39553955 return f.fail("TODO: C backend: implement integer types larger than 128 bits", .{});
3956 const shift_val = try pt.intValue(Type.u8, c_bits - dest_bits);
3956 const shift_val = try pt.intValue(.u8, c_bits - dest_bits);
39573957
39583958 try writer.writeAll("zig_shr_");
39593959 try f.object.dg.renderTypeForBuiltinFnName(writer, scalar_ty);
......@@ -4019,7 +4019,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
40194019 try writer.writeAll("memset(");
40204020 try f.writeCValue(writer, ptr_val, .FunctionArgument);
40214021 try writer.writeAll(", 0xaa, sizeof(");
4022 try f.renderType(writer, Type.fromInterned(ptr_info.child));
4022 try f.renderType(writer, .fromInterned(ptr_info.child));
40234023 try writer.writeAll("));\n");
40244024 }
40254025 return .none;
......@@ -4029,7 +4029,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
40294029 ptr_info.flags.alignment.order(src_ty.abiAlignment(zcu)).compare(.gte)
40304030 else
40314031 true;
4032 const is_array = lowersToArray(Type.fromInterned(ptr_info.child), pt);
4032 const is_array = lowersToArray(.fromInterned(ptr_info.child), pt);
40334033 const need_memcpy = !is_aligned or is_array;
40344034
40354035 const src_val = try f.resolveInst(bin_op.rhs);
......@@ -4040,7 +4040,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
40404040 if (need_memcpy) {
40414041 // For this memcpy to safely work we need the rhs to have the same
40424042 // underlying type as the lhs (i.e. they must both be arrays of the same underlying type).
4043 assert(src_ty.eql(Type.fromInterned(ptr_info.child), zcu));
4043 assert(src_ty.eql(.fromInterned(ptr_info.child), zcu));
40444044
40454045 // If the source is a constant, writeCValue will emit a brace initialization
40464046 // so work around this by initializing into new local.
......@@ -4120,7 +4120,7 @@ fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
41204120
41214121 if (src_ty.isPtrAtRuntime(zcu)) {
41224122 try writer.writeByte('(');
4123 try f.renderType(writer, Type.usize);
4123 try f.renderType(writer, .usize);
41244124 try writer.writeByte(')');
41254125 }
41264126 try f.writeCValue(writer, src_val, .Other);
......@@ -4343,8 +4343,8 @@ fn airEquality(
43434343 try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });
43444344
43454345 const writer = f.object.writer();
4346 const local = try f.allocLocal(inst, Type.bool);
4347 const a = try Assignment.start(f, writer, CType.bool);
4346 const local = try f.allocLocal(inst, .bool);
4347 const a = try Assignment.start(f, writer, .bool);
43484348 try f.writeCValue(writer, local, .Other);
43494349 try a.assign(f, writer);
43504350
......@@ -4401,7 +4401,7 @@ fn airCmpLtErrorsLen(f: *Function, inst: Air.Inst.Index) !CValue {
44014401 try reap(f, inst, &.{un_op});
44024402
44034403 const writer = f.object.writer();
4404 const local = try f.allocLocal(inst, Type.bool);
4404 const local = try f.allocLocal(inst, .bool);
44054405 try f.writeCValue(writer, local, .Other);
44064406 try writer.writeAll(" = ");
44074407 try f.writeCValue(writer, operand, .Other);
......@@ -4517,7 +4517,7 @@ fn airSlice(f: *Function, inst: Air.Inst.Index) !CValue {
45174517 try a.end(f, writer);
45184518 }
45194519 {
4520 const a = try Assignment.start(f, writer, CType.usize);
4520 const a = try Assignment.start(f, writer, .usize);
45214521 try f.writeCValueMember(writer, local, .{ .identifier = "len" });
45224522 try a.assign(f, writer);
45234523 try f.writeCValue(writer, len, .Initializer);
......@@ -4585,9 +4585,9 @@ fn airCall(
45854585 else => unreachable,
45864586 };
45874587 const fn_info = zcu.typeToFunc(if (callee_is_ptr) callee_ty.childType(zcu) else callee_ty).?;
4588 const ret_ty = Type.fromInterned(fn_info.return_type);
4588 const ret_ty: Type = .fromInterned(fn_info.return_type);
45894589 const ret_ctype: CType = if (ret_ty.isNoReturn(zcu))
4590 CType.void
4590 .void
45914591 else
45924592 try f.ctypeFromType(ret_ty, .parameter);
45934593
......@@ -4599,7 +4599,7 @@ fn airCall(
45994599 break :result .none;
46004600 } else if (f.liveness.isUnused(inst)) {
46014601 try writer.writeByte('(');
4602 try f.renderCType(writer, CType.void);
4602 try f.renderCType(writer, .void);
46034603 try writer.writeByte(')');
46044604 break :result .none;
46054605 } else {
......@@ -5081,20 +5081,20 @@ fn airBreakpoint(writer: anytype) !CValue {
50815081
50825082fn airRetAddr(f: *Function, inst: Air.Inst.Index) !CValue {
50835083 const writer = f.object.writer();
5084 const local = try f.allocLocal(inst, Type.usize);
5084 const local = try f.allocLocal(inst, .usize);
50855085 try f.writeCValue(writer, local, .Other);
50865086 try writer.writeAll(" = (");
5087 try f.renderType(writer, Type.usize);
5087 try f.renderType(writer, .usize);
50885088 try writer.writeAll(")zig_return_address();\n");
50895089 return local;
50905090}
50915091
50925092fn airFrameAddress(f: *Function, inst: Air.Inst.Index) !CValue {
50935093 const writer = f.object.writer();
5094 const local = try f.allocLocal(inst, Type.usize);
5094 const local = try f.allocLocal(inst, .usize);
50955095 try f.writeCValue(writer, local, .Other);
50965096 try writer.writeAll(" = (");
5097 try f.renderType(writer, Type.usize);
5097 try f.renderType(writer, .usize);
50985098 try writer.writeAll(")zig_frame_address();\n");
50995099 return local;
51005100}
......@@ -5179,10 +5179,10 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
51795179
51805180 try writer.writeAll("switch (");
51815181
5182 const lowered_condition_ty = if (condition_ty.toIntern() == .bool_type)
5183 Type.u1
5182 const lowered_condition_ty: Type = if (condition_ty.toIntern() == .bool_type)
5183 .u1
51845184 else if (condition_ty.isPtrAtRuntime(zcu))
5185 Type.usize
5185 .usize
51865186 else
51875187 condition_ty;
51885188 if (condition_ty.toIntern() != lowered_condition_ty.toIntern()) {
......@@ -5219,7 +5219,7 @@ fn airSwitchBr(f: *Function, inst: Air.Inst.Index, is_dispatch_loop: bool) !void
52195219 }
52205220 if (condition_ty.isPtrAtRuntime(zcu)) {
52215221 try writer.writeByte('(');
5222 try f.renderType(writer, Type.usize);
5222 try f.renderType(writer, .usize);
52235223 try writer.writeByte(')');
52245224 }
52255225 try f.object.dg.renderValue(writer, (try f.air.value(item, pt)).?, .Other);
......@@ -5604,8 +5604,8 @@ fn airIsNull(
56045604 const operand = try f.resolveInst(un_op);
56055605 try reap(f, inst, &.{un_op});
56065606
5607 const local = try f.allocLocal(inst, Type.bool);
5608 const a = try Assignment.start(f, writer, CType.bool);
5607 const local = try f.allocLocal(inst, .bool);
5608 const a = try Assignment.start(f, writer, .bool);
56095609 try f.writeCValue(writer, local, .Other);
56105610 try a.assign(f, writer);
56115611
......@@ -5750,7 +5750,7 @@ fn fieldLocation(
57505750} {
57515751 const zcu = pt.zcu;
57525752 const ip = &zcu.intern_pool;
5753 const container_ty = Type.fromInterned(ip.indexToKey(container_ptr_ty.toIntern()).ptr_type.child);
5753 const container_ty: Type = .fromInterned(ip.indexToKey(container_ptr_ty.toIntern()).ptr_type.child);
57545754 switch (ip.indexToKey(container_ty.toIntern())) {
57555755 .struct_type => {
57565756 const loaded_struct = ip.loadStructType(container_ty.toIntern());
......@@ -5781,7 +5781,7 @@ fn fieldLocation(
57815781 const loaded_union = ip.loadUnionType(container_ty.toIntern());
57825782 switch (loaded_union.flagsUnordered(ip).layout) {
57835783 .auto, .@"extern" => {
5784 const field_ty = Type.fromInterned(loaded_union.field_types.get(ip)[field_index]);
5784 const field_ty: Type = .fromInterned(loaded_union.field_types.get(ip)[field_index]);
57855785 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu))
57865786 return if (loaded_union.hasTag(ip) and !container_ty.unionHasAllZeroBitFieldTypes(zcu))
57875787 .{ .field = .{ .identifier = "payload" } }
......@@ -5850,7 +5850,7 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
58505850 switch (fieldLocation(container_ptr_ty, field_ptr_ty, extra.field_index, pt)) {
58515851 .begin => try f.writeCValue(writer, field_ptr_val, .Initializer),
58525852 .field => |field| {
5853 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
5853 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
58545854
58555855 try writer.writeAll("((");
58565856 try f.renderType(writer, u8_ptr_ty);
......@@ -5863,14 +5863,14 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue {
58635863 try writer.writeAll("))");
58645864 },
58655865 .byte_offset => |byte_offset| {
5866 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
5866 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
58675867
58685868 try writer.writeAll("((");
58695869 try f.renderType(writer, u8_ptr_ty);
58705870 try writer.writeByte(')');
58715871 try f.writeCValue(writer, field_ptr_val, .Other);
58725872 try writer.print(" - {})", .{
5873 try f.fmtIntLiteral(try pt.intValue(Type.usize, byte_offset)),
5873 try f.fmtIntLiteral(try pt.intValue(.usize, byte_offset)),
58745874 });
58755875 },
58765876 }
......@@ -5908,14 +5908,14 @@ fn fieldPtr(
59085908 try f.writeCValueDerefMember(writer, container_ptr_val, field);
59095909 },
59105910 .byte_offset => |byte_offset| {
5911 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, Type.u8);
5911 const u8_ptr_ty = try pt.adjustPtrTypeChild(field_ptr_ty, .u8);
59125912
59135913 try writer.writeAll("((");
59145914 try f.renderType(writer, u8_ptr_ty);
59155915 try writer.writeByte(')');
59165916 try f.writeCValue(writer, container_ptr_val, .Other);
59175917 try writer.print(" + {})", .{
5918 try f.fmtIntLiteral(try pt.intValue(Type.usize, byte_offset)),
5918 try f.fmtIntLiteral(try pt.intValue(.usize, byte_offset)),
59195919 });
59205920 },
59215921 }
......@@ -6158,7 +6158,7 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue {
61586158 const writer = f.object.writer();
61596159 const local = try f.allocLocal(inst, inst_ty);
61606160 {
6161 const a = try Assignment.start(f, writer, CType.bool);
6161 const a = try Assignment.start(f, writer, .bool);
61626162 try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });
61636163 try a.assign(f, writer);
61646164 try writer.writeAll("false");
......@@ -6322,12 +6322,12 @@ fn airIsErr(f: *Function, inst: Air.Inst.Index, is_ptr: bool, operator: []const
63226322 const operand = try f.resolveInst(un_op);
63236323 try reap(f, inst, &.{un_op});
63246324 const operand_ty = f.typeOf(un_op);
6325 const local = try f.allocLocal(inst, Type.bool);
6325 const local = try f.allocLocal(inst, .bool);
63266326 const err_union_ty = if (is_ptr) operand_ty.childType(zcu) else operand_ty;
63276327 const payload_ty = err_union_ty.errorUnionPayload(zcu);
63286328 const error_ty = err_union_ty.errorUnionSet(zcu);
63296329
6330 const a = try Assignment.start(f, writer, CType.bool);
6330 const a = try Assignment.start(f, writer, .bool);
63316331 try f.writeCValue(writer, local, .Other);
63326332 try a.assign(f, writer);
63336333 const err_int_ty = try pt.errorIntType();
......@@ -6385,17 +6385,17 @@ fn airArrayToSlice(f: *Function, inst: Air.Inst.Index) !CValue {
63856385 if (operand_child_ctype.info(ctype_pool) == .array) {
63866386 try writer.writeByte('&');
63876387 try f.writeCValueDeref(writer, operand);
6388 try writer.print("[{}]", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 0))});
6388 try writer.print("[{}]", .{try f.fmtIntLiteral(try pt.intValue(.usize, 0))});
63896389 } else try f.writeCValue(writer, operand, .Initializer);
63906390 }
63916391 try a.end(f, writer);
63926392 }
63936393 {
6394 const a = try Assignment.start(f, writer, CType.usize);
6394 const a = try Assignment.start(f, writer, .usize);
63956395 try f.writeCValueMember(writer, local, .{ .identifier = "len" });
63966396 try a.assign(f, writer);
63976397 try writer.print("{}", .{
6398 try f.fmtIntLiteral(try pt.intValue(Type.usize, array_ty.arrayLen(zcu))),
6398 try f.fmtIntLiteral(try pt.intValue(.usize, array_ty.arrayLen(zcu))),
63996399 });
64006400 try a.end(f, writer);
64016401 }
......@@ -6627,7 +6627,7 @@ fn airCmpBuiltinCall(
66276627 try writer.writeByte(')');
66286628 if (!ref_ret) try writer.print("{s}{}", .{
66296629 compareOperatorC(operator),
6630 try f.fmtIntLiteral(try pt.intValue(Type.i32, 0)),
6630 try f.fmtIntLiteral(try pt.intValue(.i32, 0)),
66316631 });
66326632 try writer.writeAll(";\n");
66336633 try v.end(f, inst, writer);
......@@ -6707,7 +6707,7 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue
67076707 try a.end(f, writer);
67086708 }
67096709 {
6710 const a = try Assignment.start(f, writer, CType.bool);
6710 const a = try Assignment.start(f, writer, .bool);
67116711 try f.writeCValueMember(writer, local, .{ .identifier = "is_null" });
67126712 try a.assign(f, writer);
67136713 try writer.print("zig_cmpxchg_{s}((zig_atomic(", .{flavor});
......@@ -6935,12 +6935,12 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
69356935 },
69366936 });
69376937
6938 const index = try f.allocLocal(inst, Type.usize);
6938 const index = try f.allocLocal(inst, .usize);
69396939
69406940 try writer.writeAll("for (");
69416941 try f.writeCValue(writer, index, .Other);
69426942 try writer.writeAll(" = ");
6943 try f.object.dg.renderValue(writer, try pt.intValue(Type.usize, 0), .Initializer);
6943 try f.object.dg.renderValue(writer, try pt.intValue(.usize, 0), .Initializer);
69446944 try writer.writeAll("; ");
69456945 try f.writeCValue(writer, index, .Other);
69466946 try writer.writeAll(" != ");
......@@ -6976,7 +6976,7 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
69766976 return .none;
69776977 }
69786978
6979 const bitcasted = try bitcast(f, Type.u8, value, elem_ty);
6979 const bitcasted = try bitcast(f, .u8, value, elem_ty);
69806980
69816981 try writer.writeAll("memset(");
69826982 switch (dest_ty.ptrSize(zcu)) {
......@@ -7038,7 +7038,7 @@ fn writeArrayLen(f: *Function, writer: ArrayListWriter, dest_ptr: CValue, dest_t
70387038 const zcu = pt.zcu;
70397039 switch (dest_ty.ptrSize(zcu)) {
70407040 .one => try writer.print("{}", .{
7041 try f.fmtIntLiteral(try pt.intValue(Type.usize, dest_ty.childType(zcu).arrayLen(zcu))),
7041 try f.fmtIntLiteral(try pt.intValue(.usize, dest_ty.childType(zcu).arrayLen(zcu))),
70427042 }),
70437043 .many, .c => unreachable,
70447044 .slice => try f.writeCValueMember(writer, dest_ptr, .{ .identifier = "len" }),
......@@ -7200,11 +7200,11 @@ fn airShuffle(f: *Function, inst: Air.Inst.Index) !CValue {
72007200 for (0..extra.mask_len) |index| {
72017201 try f.writeCValue(writer, local, .Other);
72027202 try writer.writeByte('[');
7203 try f.object.dg.renderValue(writer, try pt.intValue(Type.usize, index), .Other);
7203 try f.object.dg.renderValue(writer, try pt.intValue(.usize, index), .Other);
72047204 try writer.writeAll("] = ");
72057205
72067206 const mask_elem = (try mask.elemValue(pt, index)).toSignedInt(zcu);
7207 const src_val = try pt.intValue(Type.usize, @as(u64, @intCast(mask_elem ^ mask_elem >> 63)));
7207 const src_val = try pt.intValue(.usize, @as(u64, @intCast(mask_elem ^ mask_elem >> 63)));
72087208
72097209 try f.writeCValue(writer, if (mask_elem >= 0) lhs else rhs, .Other);
72107210 try writer.writeByte('[');
......@@ -7377,7 +7377,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
73777377 switch (ip.indexToKey(inst_ty.toIntern())) {
73787378 inline .array_type, .vector_type => |info, tag| {
73797379 const a: Assignment = .{
7380 .ctype = try f.ctypeFromType(Type.fromInterned(info.child), .complete),
7380 .ctype = try f.ctypeFromType(.fromInterned(info.child), .complete),
73817381 };
73827382 for (resolved_elements, 0..) |element, i| {
73837383 try a.restart(f, writer);
......@@ -7402,7 +7402,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
74027402 .auto, .@"extern" => {
74037403 var field_it = loaded_struct.iterateRuntimeOrder(ip);
74047404 while (field_it.next()) |field_index| {
7405 const field_ty = Type.fromInterned(loaded_struct.field_types.get(ip)[field_index]);
7405 const field_ty: Type = .fromInterned(loaded_struct.field_types.get(ip)[field_index]);
74067406 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
74077407
74087408 const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));
......@@ -7466,8 +7466,8 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
74667466 if (field_ty.isPtrAtRuntime(zcu)) {
74677467 try writer.writeByte('(');
74687468 try f.renderType(writer, switch (int_info.signedness) {
7469 .unsigned => Type.usize,
7470 .signed => Type.isize,
7469 .unsigned => .usize,
7470 .signed => .isize,
74717471 });
74727472 try writer.writeByte(')');
74737473 }
......@@ -7501,7 +7501,7 @@ fn airAggregateInit(f: *Function, inst: Air.Inst.Index) !CValue {
75017501 },
75027502 .tuple_type => |tuple_info| for (0..tuple_info.types.len) |field_index| {
75037503 if (tuple_info.values.get(ip)[field_index] != .none) continue;
7504 const field_ty = Type.fromInterned(tuple_info.types.get(ip)[field_index]);
7504 const field_ty: Type = .fromInterned(tuple_info.types.get(ip)[field_index]);
75057505 if (!field_ty.hasRuntimeBitsIgnoreComptime(zcu)) continue;
75067506
75077507 const a = try Assignment.start(f, writer, try f.ctypeFromType(field_ty, .complete));
......@@ -8141,13 +8141,13 @@ fn formatIntLiteral(
81418141 } = switch (data.ctype.info(ctype_pool)) {
81428142 .basic => |basic_info| switch (basic_info) {
81438143 else => .{
8144 .ctype = CType.void,
8144 .ctype = .void,
81458145 .count = 1,
81468146 .endian = .little,
81478147 .homogeneous = true,
81488148 },
81498149 .zig_u128, .zig_i128 => .{
8150 .ctype = CType.u64,
8150 .ctype = .u64,
81518151 .count = 2,
81528152 .endian = .big,
81538153 .homogeneous = false,
......@@ -8253,7 +8253,7 @@ fn formatIntLiteral(
82538253 .int_info = c_limb_int_info,
82548254 .kind = data.kind,
82558255 .ctype = c_limb_ctype,
8256 .val = try pt.intValue_big(Type.comptime_int, c_limb_mut.toConst()),
8256 .val = try pt.intValue_big(.comptime_int, c_limb_mut.toConst()),
82578257 }, fmt, options, writer);
82588258 }
82598259 }
......@@ -8330,15 +8330,15 @@ const Vectorize = struct {
83308330 const pt = f.object.dg.pt;
83318331 const zcu = pt.zcu;
83328332 return if (ty.zigTypeTag(zcu) == .vector) index: {
8333 const local = try f.allocLocal(inst, Type.usize);
8333 const local = try f.allocLocal(inst, .usize);
83348334
83358335 try writer.writeAll("for (");
83368336 try f.writeCValue(writer, local, .Other);
8337 try writer.print(" = {d}; ", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 0))});
8337 try writer.print(" = {d}; ", .{try f.fmtIntLiteral(try pt.intValue(.usize, 0))});
83388338 try f.writeCValue(writer, local, .Other);
8339 try writer.print(" < {d}; ", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, ty.vectorLen(zcu)))});
8339 try writer.print(" < {d}; ", .{try f.fmtIntLiteral(try pt.intValue(.usize, ty.vectorLen(zcu)))});
83408340 try f.writeCValue(writer, local, .Other);
8341 try writer.print(" += {d}) {{\n", .{try f.fmtIntLiteral(try pt.intValue(Type.usize, 1))});
8341 try writer.print(" += {d}) {{\n", .{try f.fmtIntLiteral(try pt.intValue(.usize, 1))});
83428342 f.object.indent_writer.pushIndent();
83438343
83448344 break :index .{ .index = local };
src/codegen/c/Type.zig+388-56
......@@ -1289,26 +1289,26 @@ pub const Pool = struct {
12891289 kind: Kind,
12901290 ) !CType {
12911291 switch (int_info.bits) {
1292 0 => return CType.void,
1292 0 => return .void,
12931293 1...8 => switch (int_info.signedness) {
1294 .signed => return CType.i8,
1295 .unsigned => return CType.u8,
1294 .signed => return .i8,
1295 .unsigned => return .u8,
12961296 },
12971297 9...16 => switch (int_info.signedness) {
1298 .signed => return CType.i16,
1299 .unsigned => return CType.u16,
1298 .signed => return .i16,
1299 .unsigned => return .u16,
13001300 },
13011301 17...32 => switch (int_info.signedness) {
1302 .signed => return CType.i32,
1303 .unsigned => return CType.u32,
1302 .signed => return .i32,
1303 .unsigned => return .u32,
13041304 },
13051305 33...64 => switch (int_info.signedness) {
1306 .signed => return CType.i64,
1307 .unsigned => return CType.u64,
1306 .signed => return .i64,
1307 .unsigned => return .u64,
13081308 },
13091309 65...128 => switch (int_info.signedness) {
1310 .signed => return CType.i128,
1311 .unsigned => return CType.u128,
1310 .signed => return .i128,
1311 .unsigned => return .u128,
13121312 },
13131313 else => {
13141314 const target = &mod.resolved_target.result;
......@@ -1357,19 +1357,19 @@ pub const Pool = struct {
13571357 .null_type,
13581358 .undefined_type,
13591359 .enum_literal_type,
1360 => return CType.void,
1361 .u1_type, .u8_type => return CType.u8,
1362 .i8_type => return CType.i8,
1363 .u16_type => return CType.u16,
1364 .i16_type => return CType.i16,
1365 .u29_type, .u32_type => return CType.u32,
1366 .i32_type => return CType.i32,
1367 .u64_type => return CType.u64,
1368 .i64_type => return CType.i64,
1369 .u80_type, .u128_type => return CType.u128,
1370 .i128_type => return CType.i128,
1371 .usize_type => return CType.usize,
1372 .isize_type => return CType.isize,
1360 => return .void,
1361 .u1_type, .u8_type => return .u8,
1362 .i8_type => return .i8,
1363 .u16_type => return .u16,
1364 .i16_type => return .i16,
1365 .u29_type, .u32_type => return .u32,
1366 .i32_type => return .i32,
1367 .u64_type => return .u64,
1368 .i64_type => return .i64,
1369 .u80_type, .u128_type => return .u128,
1370 .i128_type => return .i128,
1371 .usize_type => return .usize,
1372 .isize_type => return .isize,
13731373 .c_char_type => return .{ .index = .char },
13741374 .c_short_type => return .{ .index = .short },
13751375 .c_ushort_type => return .{ .index = .@"unsigned short" },
......@@ -1380,12 +1380,12 @@ pub const Pool = struct {
13801380 .c_longlong_type => return .{ .index = .@"long long" },
13811381 .c_ulonglong_type => return .{ .index = .@"unsigned long long" },
13821382 .c_longdouble_type => return .{ .index = .@"long double" },
1383 .f16_type => return CType.f16,
1384 .f32_type => return CType.f32,
1385 .f64_type => return CType.f64,
1386 .f80_type => return CType.f80,
1387 .f128_type => return CType.f128,
1388 .bool_type, .optional_noreturn_type => return CType.bool,
1383 .f16_type => return .f16,
1384 .f32_type => return .f32,
1385 .f64_type => return .f64,
1386 .f80_type => return .f80,
1387 .f128_type => return .f128,
1388 .bool_type, .optional_noreturn_type => return .bool,
13891389 .noreturn_type,
13901390 .anyframe_type,
13911391 .generic_poison_type,
......@@ -1397,19 +1397,20 @@ pub const Pool = struct {
13971397 .signedness = .unsigned,
13981398 .bits = pt.zcu.errorSetBits(),
13991399 }, mod, kind),
1400
14001401 .manyptr_u8_type,
14011402 => return pool.getPointer(allocator, .{
1402 .elem_ctype = CType.u8,
1403 .elem_ctype = .u8,
14031404 }),
14041405 .manyptr_const_u8_type,
14051406 .manyptr_const_u8_sentinel_0_type,
14061407 => return pool.getPointer(allocator, .{
1407 .elem_ctype = CType.u8,
1408 .elem_ctype = .u8,
14081409 .@"const" = true,
14091410 }),
14101411 .single_const_pointer_to_comptime_int_type,
14111412 => return pool.getPointer(allocator, .{
1412 .elem_ctype = CType.void,
1413 .elem_ctype = .void,
14131414 .@"const" = true,
14141415 }),
14151416 .slice_const_u8_type,
......@@ -1420,14 +1421,14 @@ pub const Pool = struct {
14201421 .{
14211422 .name = .{ .index = .ptr },
14221423 .ctype = try pool.getPointer(allocator, .{
1423 .elem_ctype = CType.u8,
1424 .elem_ctype = .u8,
14241425 .@"const" = true,
14251426 }),
14261427 .alignas = AlignAs.fromAbiAlignment(Type.ptrAbiAlignment(target.*)),
14271428 },
14281429 .{
14291430 .name = .{ .index = .len },
1430 .ctype = CType.usize,
1431 .ctype = .usize,
14311432 .alignas = AlignAs.fromAbiAlignment(
14321433 Type.intAbiAlignment(target.ptrBitWidth(), target.*),
14331434 ),
......@@ -1436,6 +1437,337 @@ pub const Pool = struct {
14361437 return pool.fromFields(allocator, .@"struct", &fields, kind);
14371438 },
14381439
1440 .vector_16_i8_type => {
1441 const vector_ctype = try pool.getVector(allocator, .{
1442 .elem_ctype = .i8,
1443 .len = 16,
1444 });
1445 if (!kind.isParameter()) return vector_ctype;
1446 var fields = [_]Info.Field{
1447 .{
1448 .name = .{ .index = .array },
1449 .ctype = vector_ctype,
1450 .alignas = AlignAs.fromAbiAlignment(Type.i8.abiAlignment(zcu)),
1451 },
1452 };
1453 return pool.fromFields(allocator, .@"struct", &fields, kind);
1454 },
1455 .vector_32_i8_type => {
1456 const vector_ctype = try pool.getVector(allocator, .{
1457 .elem_ctype = .i8,
1458 .len = 32,
1459 });
1460 if (!kind.isParameter()) return vector_ctype;
1461 var fields = [_]Info.Field{
1462 .{
1463 .name = .{ .index = .array },
1464 .ctype = vector_ctype,
1465 .alignas = AlignAs.fromAbiAlignment(Type.i8.abiAlignment(zcu)),
1466 },
1467 };
1468 return pool.fromFields(allocator, .@"struct", &fields, kind);
1469 },
1470 .vector_16_u8_type => {
1471 const vector_ctype = try pool.getVector(allocator, .{
1472 .elem_ctype = .u8,
1473 .len = 16,
1474 });
1475 if (!kind.isParameter()) return vector_ctype;
1476 var fields = [_]Info.Field{
1477 .{
1478 .name = .{ .index = .array },
1479 .ctype = vector_ctype,
1480 .alignas = AlignAs.fromAbiAlignment(Type.u8.abiAlignment(zcu)),
1481 },
1482 };
1483 return pool.fromFields(allocator, .@"struct", &fields, kind);
1484 },
1485 .vector_32_u8_type => {
1486 const vector_ctype = try pool.getVector(allocator, .{
1487 .elem_ctype = .u8,
1488 .len = 32,
1489 });
1490 if (!kind.isParameter()) return vector_ctype;
1491 var fields = [_]Info.Field{
1492 .{
1493 .name = .{ .index = .array },
1494 .ctype = vector_ctype,
1495 .alignas = AlignAs.fromAbiAlignment(Type.u8.abiAlignment(zcu)),
1496 },
1497 };
1498 return pool.fromFields(allocator, .@"struct", &fields, kind);
1499 },
1500 .vector_8_i16_type => {
1501 const vector_ctype = try pool.getVector(allocator, .{
1502 .elem_ctype = .i16,
1503 .len = 8,
1504 });
1505 if (!kind.isParameter()) return vector_ctype;
1506 var fields = [_]Info.Field{
1507 .{
1508 .name = .{ .index = .array },
1509 .ctype = vector_ctype,
1510 .alignas = AlignAs.fromAbiAlignment(Type.i16.abiAlignment(zcu)),
1511 },
1512 };
1513 return pool.fromFields(allocator, .@"struct", &fields, kind);
1514 },
1515 .vector_16_i16_type => {
1516 const vector_ctype = try pool.getVector(allocator, .{
1517 .elem_ctype = .i16,
1518 .len = 16,
1519 });
1520 if (!kind.isParameter()) return vector_ctype;
1521 var fields = [_]Info.Field{
1522 .{
1523 .name = .{ .index = .array },
1524 .ctype = vector_ctype,
1525 .alignas = AlignAs.fromAbiAlignment(Type.i16.abiAlignment(zcu)),
1526 },
1527 };
1528 return pool.fromFields(allocator, .@"struct", &fields, kind);
1529 },
1530 .vector_8_u16_type => {
1531 const vector_ctype = try pool.getVector(allocator, .{
1532 .elem_ctype = .u16,
1533 .len = 8,
1534 });
1535 if (!kind.isParameter()) return vector_ctype;
1536 var fields = [_]Info.Field{
1537 .{
1538 .name = .{ .index = .array },
1539 .ctype = vector_ctype,
1540 .alignas = AlignAs.fromAbiAlignment(Type.u16.abiAlignment(zcu)),
1541 },
1542 };
1543 return pool.fromFields(allocator, .@"struct", &fields, kind);
1544 },
1545 .vector_16_u16_type => {
1546 const vector_ctype = try pool.getVector(allocator, .{
1547 .elem_ctype = .u16,
1548 .len = 16,
1549 });
1550 if (!kind.isParameter()) return vector_ctype;
1551 var fields = [_]Info.Field{
1552 .{
1553 .name = .{ .index = .array },
1554 .ctype = vector_ctype,
1555 .alignas = AlignAs.fromAbiAlignment(Type.u16.abiAlignment(zcu)),
1556 },
1557 };
1558 return pool.fromFields(allocator, .@"struct", &fields, kind);
1559 },
1560 .vector_4_i32_type => {
1561 const vector_ctype = try pool.getVector(allocator, .{
1562 .elem_ctype = .i32,
1563 .len = 4,
1564 });
1565 if (!kind.isParameter()) return vector_ctype;
1566 var fields = [_]Info.Field{
1567 .{
1568 .name = .{ .index = .array },
1569 .ctype = vector_ctype,
1570 .alignas = AlignAs.fromAbiAlignment(Type.i32.abiAlignment(zcu)),
1571 },
1572 };
1573 return pool.fromFields(allocator, .@"struct", &fields, kind);
1574 },
1575 .vector_8_i32_type => {
1576 const vector_ctype = try pool.getVector(allocator, .{
1577 .elem_ctype = .i32,
1578 .len = 8,
1579 });
1580 if (!kind.isParameter()) return vector_ctype;
1581 var fields = [_]Info.Field{
1582 .{
1583 .name = .{ .index = .array },
1584 .ctype = vector_ctype,
1585 .alignas = AlignAs.fromAbiAlignment(Type.i32.abiAlignment(zcu)),
1586 },
1587 };
1588 return pool.fromFields(allocator, .@"struct", &fields, kind);
1589 },
1590 .vector_4_u32_type => {
1591 const vector_ctype = try pool.getVector(allocator, .{
1592 .elem_ctype = .u32,
1593 .len = 4,
1594 });
1595 if (!kind.isParameter()) return vector_ctype;
1596 var fields = [_]Info.Field{
1597 .{
1598 .name = .{ .index = .array },
1599 .ctype = vector_ctype,
1600 .alignas = AlignAs.fromAbiAlignment(Type.u32.abiAlignment(zcu)),
1601 },
1602 };
1603 return pool.fromFields(allocator, .@"struct", &fields, kind);
1604 },
1605 .vector_8_u32_type => {
1606 const vector_ctype = try pool.getVector(allocator, .{
1607 .elem_ctype = .u32,
1608 .len = 8,
1609 });
1610 if (!kind.isParameter()) return vector_ctype;
1611 var fields = [_]Info.Field{
1612 .{
1613 .name = .{ .index = .array },
1614 .ctype = vector_ctype,
1615 .alignas = AlignAs.fromAbiAlignment(Type.u32.abiAlignment(zcu)),
1616 },
1617 };
1618 return pool.fromFields(allocator, .@"struct", &fields, kind);
1619 },
1620 .vector_2_i64_type => {
1621 const vector_ctype = try pool.getVector(allocator, .{
1622 .elem_ctype = .i64,
1623 .len = 2,
1624 });
1625 if (!kind.isParameter()) return vector_ctype;
1626 var fields = [_]Info.Field{
1627 .{
1628 .name = .{ .index = .array },
1629 .ctype = vector_ctype,
1630 .alignas = AlignAs.fromAbiAlignment(Type.i64.abiAlignment(zcu)),
1631 },
1632 };
1633 return pool.fromFields(allocator, .@"struct", &fields, kind);
1634 },
1635 .vector_4_i64_type => {
1636 const vector_ctype = try pool.getVector(allocator, .{
1637 .elem_ctype = .i64,
1638 .len = 4,
1639 });
1640 if (!kind.isParameter()) return vector_ctype;
1641 var fields = [_]Info.Field{
1642 .{
1643 .name = .{ .index = .array },
1644 .ctype = vector_ctype,
1645 .alignas = AlignAs.fromAbiAlignment(Type.i64.abiAlignment(zcu)),
1646 },
1647 };
1648 return pool.fromFields(allocator, .@"struct", &fields, kind);
1649 },
1650 .vector_2_u64_type => {
1651 const vector_ctype = try pool.getVector(allocator, .{
1652 .elem_ctype = .u64,
1653 .len = 2,
1654 });
1655 if (!kind.isParameter()) return vector_ctype;
1656 var fields = [_]Info.Field{
1657 .{
1658 .name = .{ .index = .array },
1659 .ctype = vector_ctype,
1660 .alignas = AlignAs.fromAbiAlignment(Type.u64.abiAlignment(zcu)),
1661 },
1662 };
1663 return pool.fromFields(allocator, .@"struct", &fields, kind);
1664 },
1665 .vector_4_u64_type => {
1666 const vector_ctype = try pool.getVector(allocator, .{
1667 .elem_ctype = .u64,
1668 .len = 4,
1669 });
1670 if (!kind.isParameter()) return vector_ctype;
1671 var fields = [_]Info.Field{
1672 .{
1673 .name = .{ .index = .array },
1674 .ctype = vector_ctype,
1675 .alignas = AlignAs.fromAbiAlignment(Type.u64.abiAlignment(zcu)),
1676 },
1677 };
1678 return pool.fromFields(allocator, .@"struct", &fields, kind);
1679 },
1680 .vector_4_f16_type => {
1681 const vector_ctype = try pool.getVector(allocator, .{
1682 .elem_ctype = .f16,
1683 .len = 4,
1684 });
1685 if (!kind.isParameter()) return vector_ctype;
1686 var fields = [_]Info.Field{
1687 .{
1688 .name = .{ .index = .array },
1689 .ctype = vector_ctype,
1690 .alignas = AlignAs.fromAbiAlignment(Type.f16.abiAlignment(zcu)),
1691 },
1692 };
1693 return pool.fromFields(allocator, .@"struct", &fields, kind);
1694 },
1695 .vector_8_f16_type => {
1696 const vector_ctype = try pool.getVector(allocator, .{
1697 .elem_ctype = .f16,
1698 .len = 8,
1699 });
1700 if (!kind.isParameter()) return vector_ctype;
1701 var fields = [_]Info.Field{
1702 .{
1703 .name = .{ .index = .array },
1704 .ctype = vector_ctype,
1705 .alignas = AlignAs.fromAbiAlignment(Type.f16.abiAlignment(zcu)),
1706 },
1707 };
1708 return pool.fromFields(allocator, .@"struct", &fields, kind);
1709 },
1710 .vector_4_f32_type => {
1711 const vector_ctype = try pool.getVector(allocator, .{
1712 .elem_ctype = .f32,
1713 .len = 4,
1714 });
1715 if (!kind.isParameter()) return vector_ctype;
1716 var fields = [_]Info.Field{
1717 .{
1718 .name = .{ .index = .array },
1719 .ctype = vector_ctype,
1720 .alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)),
1721 },
1722 };
1723 return pool.fromFields(allocator, .@"struct", &fields, kind);
1724 },
1725 .vector_8_f32_type => {
1726 const vector_ctype = try pool.getVector(allocator, .{
1727 .elem_ctype = .f32,
1728 .len = 8,
1729 });
1730 if (!kind.isParameter()) return vector_ctype;
1731 var fields = [_]Info.Field{
1732 .{
1733 .name = .{ .index = .array },
1734 .ctype = vector_ctype,
1735 .alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)),
1736 },
1737 };
1738 return pool.fromFields(allocator, .@"struct", &fields, kind);
1739 },
1740 .vector_2_f64_type => {
1741 const vector_ctype = try pool.getVector(allocator, .{
1742 .elem_ctype = .f64,
1743 .len = 2,
1744 });
1745 if (!kind.isParameter()) return vector_ctype;
1746 var fields = [_]Info.Field{
1747 .{
1748 .name = .{ .index = .array },
1749 .ctype = vector_ctype,
1750 .alignas = AlignAs.fromAbiAlignment(Type.f64.abiAlignment(zcu)),
1751 },
1752 };
1753 return pool.fromFields(allocator, .@"struct", &fields, kind);
1754 },
1755 .vector_4_f64_type => {
1756 const vector_ctype = try pool.getVector(allocator, .{
1757 .elem_ctype = .f64,
1758 .len = 4,
1759 });
1760 if (!kind.isParameter()) return vector_ctype;
1761 var fields = [_]Info.Field{
1762 .{
1763 .name = .{ .index = .array },
1764 .ctype = vector_ctype,
1765 .alignas = AlignAs.fromAbiAlignment(Type.f64.abiAlignment(zcu)),
1766 },
1767 };
1768 return pool.fromFields(allocator, .@"struct", &fields, kind);
1769 },
1770
14391771 .undef,
14401772 .zero,
14411773 .zero_usize,
......@@ -1521,7 +1853,7 @@ pub const Pool = struct {
15211853 },
15221854 .{
15231855 .name = .{ .index = .len },
1524 .ctype = CType.usize,
1856 .ctype = .usize,
15251857 .alignas = AlignAs.fromAbiAlignment(
15261858 Type.intAbiAlignment(target.ptrBitWidth(), target.*),
15271859 ),
......@@ -1532,7 +1864,7 @@ pub const Pool = struct {
15321864 },
15331865 .array_type => |array_info| {
15341866 const len = array_info.lenIncludingSentinel();
1535 if (len == 0) return CType.void;
1867 if (len == 0) return .void;
15361868 const elem_type = Type.fromInterned(array_info.child);
15371869 const elem_ctype = try pool.fromType(
15381870 allocator,
......@@ -1542,7 +1874,7 @@ pub const Pool = struct {
15421874 mod,
15431875 kind.noParameter(),
15441876 );
1545 if (elem_ctype.index == .void) return CType.void;
1877 if (elem_ctype.index == .void) return .void;
15461878 const array_ctype = try pool.getArray(allocator, .{
15471879 .elem_ctype = elem_ctype,
15481880 .len = len,
......@@ -1558,7 +1890,7 @@ pub const Pool = struct {
15581890 return pool.fromFields(allocator, .@"struct", &fields, kind);
15591891 },
15601892 .vector_type => |vector_info| {
1561 if (vector_info.len == 0) return CType.void;
1893 if (vector_info.len == 0) return .void;
15621894 const elem_type = Type.fromInterned(vector_info.child);
15631895 const elem_ctype = try pool.fromType(
15641896 allocator,
......@@ -1568,7 +1900,7 @@ pub const Pool = struct {
15681900 mod,
15691901 kind.noParameter(),
15701902 );
1571 if (elem_ctype.index == .void) return CType.void;
1903 if (elem_ctype.index == .void) return .void;
15721904 const vector_ctype = try pool.getVector(allocator, .{
15731905 .elem_ctype = elem_ctype,
15741906 .len = vector_info.len,
......@@ -1584,7 +1916,7 @@ pub const Pool = struct {
15841916 return pool.fromFields(allocator, .@"struct", &fields, kind);
15851917 },
15861918 .opt_type => |payload_type| {
1587 if (ip.isNoReturn(payload_type)) return CType.void;
1919 if (ip.isNoReturn(payload_type)) return .void;
15881920 const payload_ctype = try pool.fromType(
15891921 allocator,
15901922 scratch,
......@@ -1593,7 +1925,7 @@ pub const Pool = struct {
15931925 mod,
15941926 kind.noParameter(),
15951927 );
1596 if (payload_ctype.index == .void) return CType.bool;
1928 if (payload_ctype.index == .void) return .bool;
15971929 switch (payload_type) {
15981930 .anyerror_type => return payload_ctype,
15991931 else => switch (ip.indexToKey(payload_type)) {
......@@ -1606,7 +1938,7 @@ pub const Pool = struct {
16061938 var fields = [_]Info.Field{
16071939 .{
16081940 .name = .{ .index = .is_null },
1609 .ctype = CType.bool,
1941 .ctype = .bool,
16101942 .alignas = AlignAs.fromAbiAlignment(.@"1"),
16111943 },
16121944 .{
......@@ -1666,7 +1998,7 @@ pub const Pool = struct {
16661998 if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))
16671999 fwd_decl
16682000 else
1669 CType.void;
2001 .void;
16702002 const scratch_top = scratch.items.len;
16712003 defer scratch.shrinkRetainingCapacity(scratch_top);
16722004 try scratch.ensureUnusedCapacity(
......@@ -1710,7 +2042,7 @@ pub const Pool = struct {
17102042 scratch.items.len - scratch_top,
17112043 @typeInfo(Field).@"struct".fields.len,
17122044 ));
1713 if (fields_len == 0) return CType.void;
2045 if (fields_len == 0) return .void;
17142046 try pool.ensureUnusedCapacity(allocator, 1);
17152047 const extra_index = try pool.addHashedExtra(allocator, &hasher, Aggregate, .{
17162048 .fwd_decl = fwd_decl.index,
......@@ -1762,7 +2094,7 @@ pub const Pool = struct {
17622094 scratch.items.len - scratch_top,
17632095 @typeInfo(Field).@"struct".fields.len,
17642096 ));
1765 if (fields_len == 0) return CType.void;
2097 if (fields_len == 0) return .void;
17662098 if (kind.isForward()) {
17672099 try pool.ensureUnusedCapacity(allocator, 1);
17682100 const extra_index = try pool.addHashedExtra(
......@@ -1801,7 +2133,7 @@ pub const Pool = struct {
18012133 if (kind.isForward()) return if (ty.hasRuntimeBitsIgnoreComptime(zcu))
18022134 fwd_decl
18032135 else
1804 CType.void;
2136 .void;
18052137 const loaded_tag = loaded_union.loadTagType(ip);
18062138 const scratch_top = scratch.items.len;
18072139 defer scratch.shrinkRetainingCapacity(scratch_top);
......@@ -1848,7 +2180,7 @@ pub const Pool = struct {
18482180 @typeInfo(Field).@"struct".fields.len,
18492181 ));
18502182 if (!has_tag) {
1851 if (fields_len == 0) return CType.void;
2183 if (fields_len == 0) return .void;
18522184 try pool.ensureUnusedCapacity(allocator, 1);
18532185 const extra_index = try pool.addHashedExtra(
18542186 allocator,
......@@ -1915,7 +2247,7 @@ pub const Pool = struct {
19152247 struct_fields_len += 1;
19162248 }
19172249 }
1918 if (struct_fields_len == 0) return CType.void;
2250 if (struct_fields_len == 0) return .void;
19192251 sortFields(struct_fields[0..struct_fields_len]);
19202252 return pool.getAggregate(allocator, .{
19212253 .tag = .@"struct",
......@@ -1929,7 +2261,7 @@ pub const Pool = struct {
19292261 }, mod, kind),
19302262 }
19312263 },
1932 .opaque_type => return CType.void,
2264 .opaque_type => return .void,
19332265 .enum_type => return pool.fromType(
19342266 allocator,
19352267 scratch,
......@@ -1938,7 +2270,7 @@ pub const Pool = struct {
19382270 mod,
19392271 kind,
19402272 ),
1941 .func_type => |func_info| if (func_info.is_generic) return CType.void else {
2273 .func_type => |func_info| if (func_info.is_generic) return .void else {
19422274 const scratch_top = scratch.items.len;
19432275 defer scratch.shrinkRetainingCapacity(scratch_top);
19442276 try scratch.ensureUnusedCapacity(allocator, func_info.param_types.len);
......@@ -1952,7 +2284,7 @@ pub const Pool = struct {
19522284 pt,
19532285 mod,
19542286 kind.asParameter(),
1955 ) else CType.void;
2287 ) else .void;
19562288 for (0..func_info.param_types.len) |param_index| {
19572289 const param_type = Type.fromInterned(
19582290 func_info.param_types.get(ip)[param_index],
......@@ -2033,7 +2365,7 @@ pub const Pool = struct {
20332365 pub fn eql(map_adapter: @This(), _: CType, _: void, pool_index: usize) bool {
20342366 return map_adapter.source_info.eqlAdapted(
20352367 map_adapter.source_pool,
2036 CType.fromPoolIndex(pool_index),
2368 .fromPoolIndex(pool_index),
20372369 map_adapter.pool,
20382370 map_adapter.pool_adapter,
20392371 );
......@@ -2047,7 +2379,7 @@ pub const Pool = struct {
20472379 .pool_adapter = pool_adapter,
20482380 });
20492381 errdefer _ = pool.map.pop();
2050 const ctype = CType.fromPoolIndex(gop.index);
2382 const ctype: CType = .fromPoolIndex(gop.index);
20512383 if (!gop.found_existing) switch (source_info) {
20522384 .basic => unreachable,
20532385 .pointer => |pointer_info| pool.items.appendAssumeCapacity(.{
......@@ -2232,7 +2564,7 @@ pub const Pool = struct {
22322564 CTypeAdapter{ .pool = pool },
22332565 );
22342566 if (!gop.found_existing) pool.items.appendAssumeCapacity(.{ .tag = tag, .data = data });
2235 return CType.fromPoolIndex(gop.index);
2567 return .fromPoolIndex(gop.index);
22362568 }
22372569
22382570 fn tagExtra(
......@@ -2290,7 +2622,7 @@ pub const Pool = struct {
22902622 pool.extra.shrinkRetainingCapacity(extra_index)
22912623 else
22922624 pool.items.appendAssumeCapacity(.{ .tag = tag, .data = extra_index });
2293 return CType.fromPoolIndex(gop.index);
2625 return .fromPoolIndex(gop.index);
22942626 }
22952627
22962628 fn sortFields(fields: []Info.Field) void {
test/behavior/abs.zig+1-1
......@@ -335,12 +335,12 @@ fn testAbsUnsignedIntVectors(comptime len: comptime_int) !void {
335335
336336test "@abs float vectors" {
337337 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
338 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
339338 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
340339 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
341340 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
342341 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
343342 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
343 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
344344
345345 // https://github.com/ziglang/zig/issues/12827
346346 if (builtin.zig_backend == .stage2_llvm and
test/behavior/floatop.zig+1
......@@ -1654,6 +1654,7 @@ test "runtime isNan(inf * 0)" {
16541654}
16551655
16561656test "optimized float mode" {
1657 if (builtin.zig_backend != .stage2_llvm) return error.SkipZigTest;
16571658 if (builtin.mode == .Debug) return error.SkipZigTest;
16581659
16591660 const big = 0x1p40;
test/behavior/maximum_minimum.zig+3-5
......@@ -33,8 +33,7 @@ test "@max on vectors" {
3333 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
3434 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
3535 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
36 if (builtin.zig_backend == .stage2_x86_64 and
37 !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .sse4_1)) return error.SkipZigTest;
36 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
3837
3938 const S = struct {
4039 fn doTheTest() !void {
......@@ -89,8 +88,7 @@ test "@min for vectors" {
8988 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
9089 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
9190 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
92 if (builtin.zig_backend == .stage2_x86_64 and
93 !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .sse4_1)) return error.SkipZigTest;
91 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
9492
9593 const S = struct {
9694 fn doTheTest() !void {
......@@ -304,7 +302,7 @@ test "@min/@max notices bounds from vector types when element of comptime-known
304302 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
305303 if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
306304 if (builtin.zig_backend == .stage2_x86_64 and
307 !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .avx)) return error.SkipZigTest;
305 !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .sse4_1)) return error.SkipZigTest;
308306
309307 var x: @Vector(2, u32) = .{ 1_000_000, 12345 };
310308 _ = &x;
test/behavior/x86_64/build.zig+1
......@@ -32,6 +32,7 @@ pub fn build(b: *std.Build) void {
3232 .cpu_features_sub = std.Target.x86.featureSet(&.{
3333 .cmov,
3434 //.sse,
35 .sse2,
3536 }),
3637 },
3738 //.{
test/behavior/x86_64/math.zig+576-37
......@@ -1,11 +1,11 @@
11const builtin = @import("builtin");
22const inf = math.inf;
33const math = std.math;
4const max = math.floatMax;
5const min = math.floatMin;
4const fmax = math.floatMax;
5const fmin = math.floatMin;
66const nan = math.nan;
77const std = @import("std");
8const trueMin = math.floatTrueMin;
8const tmin = math.floatTrueMin;
99
1010const Gpr = switch (builtin.cpu.arch) {
1111 else => unreachable,
......@@ -17,15 +17,34 @@ const Sse = if (std.Target.x86.featureSetHas(builtin.cpu.features, .avx))
1717else
1818 @Vector(16, u8);
1919
20inline fn sign(rhs: anytype) bool {
21 return @call(.always_inline, math.signbit, .{rhs});
20inline fn sign(rhs: anytype) switch (@typeInfo(@TypeOf(rhs))) {
21 else => bool,
22 .vector => |vector| @Vector(vector.len, bool),
23} {
24 switch (@typeInfo(@TypeOf(rhs))) {
25 else => {
26 const I = @Type(.{ .int = .{
27 .signedness = .unsigned,
28 .bits = @bitSizeOf(@TypeOf(rhs)),
29 } });
30 return @as(I, @bitCast(rhs)) & @as(I, 1) << (@bitSizeOf(I) - 1) != 0;
31 },
32 .vector => |vector| {
33 const I = @Type(.{ .int = .{
34 .signedness = .unsigned,
35 .bits = @bitSizeOf(vector.child),
36 } });
37 const V = @Vector(vector.len, I);
38 return @as(V, @bitCast(rhs)) & @as(V, @splat(@as(I, 1) << (@bitSizeOf(I) - 1))) != @as(V, @splat(0));
39 },
40 }
2241}
2342inline fn boolAnd(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
2443 switch (@typeInfo(@TypeOf(lhs))) {
2544 .bool => return lhs and rhs,
2645 .vector => |vector| switch (vector.child) {
2746 bool => {
28 const Bits = @Vector(vector.len, u1);
47 const Bits = @Type(.{ .int = .{ .signedness = .unsigned, .bits = vector.len } });
2948 const lhs_bits: Bits = @bitCast(lhs);
3049 const rhs_bits: Bits = @bitCast(rhs);
3150 return @bitCast(lhs_bits & rhs_bits);
......@@ -41,7 +60,7 @@ inline fn boolOr(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) {
4160 .bool => return lhs or rhs,
4261 .vector => |vector| switch (vector.child) {
4362 bool => {
44 const Bits = @Vector(vector.len, u1);
63 const Bits = @Type(.{ .int = .{ .signedness = .unsigned, .bits = vector.len } });
4564 const lhs_bits: Bits = @bitCast(lhs);
4665 const rhs_bits: Bits = @bitCast(rhs);
4766 return @bitCast(lhs_bits | rhs_bits);
......@@ -69,12 +88,40 @@ noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected)) !void {
6988 }) return error.Unexpected;
7089}
7190test checkExpected {
91 if (checkExpected(nan(f16), nan(f16)) == error.Unexpected) return error.Unexpected;
92 if (checkExpected(nan(f16), -nan(f16)) != error.Unexpected) return error.Unexpected;
93 if (checkExpected(@as(f16, 0.0), @as(f16, 0.0)) == error.Unexpected) return error.Unexpected;
94 if (checkExpected(@as(f16, -0.0), @as(f16, -0.0)) == error.Unexpected) return error.Unexpected;
95 if (checkExpected(@as(f16, -0.0), @as(f16, 0.0)) != error.Unexpected) return error.Unexpected;
96 if (checkExpected(@as(f16, 0.0), @as(f16, -0.0)) != error.Unexpected) return error.Unexpected;
97
7298 if (checkExpected(nan(f32), nan(f32)) == error.Unexpected) return error.Unexpected;
7399 if (checkExpected(nan(f32), -nan(f32)) != error.Unexpected) return error.Unexpected;
74100 if (checkExpected(@as(f32, 0.0), @as(f32, 0.0)) == error.Unexpected) return error.Unexpected;
75101 if (checkExpected(@as(f32, -0.0), @as(f32, -0.0)) == error.Unexpected) return error.Unexpected;
76102 if (checkExpected(@as(f32, -0.0), @as(f32, 0.0)) != error.Unexpected) return error.Unexpected;
77103 if (checkExpected(@as(f32, 0.0), @as(f32, -0.0)) != error.Unexpected) return error.Unexpected;
104
105 if (checkExpected(nan(f64), nan(f64)) == error.Unexpected) return error.Unexpected;
106 if (checkExpected(nan(f64), -nan(f64)) != error.Unexpected) return error.Unexpected;
107 if (checkExpected(@as(f64, 0.0), @as(f64, 0.0)) == error.Unexpected) return error.Unexpected;
108 if (checkExpected(@as(f64, -0.0), @as(f64, -0.0)) == error.Unexpected) return error.Unexpected;
109 if (checkExpected(@as(f64, -0.0), @as(f64, 0.0)) != error.Unexpected) return error.Unexpected;
110 if (checkExpected(@as(f64, 0.0), @as(f64, -0.0)) != error.Unexpected) return error.Unexpected;
111
112 if (checkExpected(nan(f80), nan(f80)) == error.Unexpected) return error.Unexpected;
113 if (checkExpected(nan(f80), -nan(f80)) != error.Unexpected) return error.Unexpected;
114 if (checkExpected(@as(f80, 0.0), @as(f80, 0.0)) == error.Unexpected) return error.Unexpected;
115 if (checkExpected(@as(f80, -0.0), @as(f80, -0.0)) == error.Unexpected) return error.Unexpected;
116 if (checkExpected(@as(f80, -0.0), @as(f80, 0.0)) != error.Unexpected) return error.Unexpected;
117 if (checkExpected(@as(f80, 0.0), @as(f80, -0.0)) != error.Unexpected) return error.Unexpected;
118
119 if (checkExpected(nan(f128), nan(f128)) == error.Unexpected) return error.Unexpected;
120 if (checkExpected(nan(f128), -nan(f128)) != error.Unexpected) return error.Unexpected;
121 if (checkExpected(@as(f128, 0.0), @as(f128, 0.0)) == error.Unexpected) return error.Unexpected;
122 if (checkExpected(@as(f128, -0.0), @as(f128, -0.0)) == error.Unexpected) return error.Unexpected;
123 if (checkExpected(@as(f128, -0.0), @as(f128, 0.0)) != error.Unexpected) return error.Unexpected;
124 if (checkExpected(@as(f128, 0.0), @as(f128, -0.0)) != error.Unexpected) return error.Unexpected;
78125}
79126
80127fn Unary(comptime op: anytype) type {
......@@ -498,96 +545,96 @@ fn Unary(comptime op: anytype) type {
498545 fn testFloatTypes() !void {
499546 try testArgs(f16, -nan(f16));
500547 try testArgs(f16, -inf(f16));
501 try testArgs(f16, -max(f16));
548 try testArgs(f16, -fmax(f16));
502549 try testArgs(f16, -10.0);
503550 try testArgs(f16, -1.0);
504551 try testArgs(f16, -0.1);
505 try testArgs(f16, -min(f16));
506 try testArgs(f16, -trueMin(f16));
552 try testArgs(f16, -fmin(f16));
553 try testArgs(f16, -tmin(f16));
507554 try testArgs(f16, -0.0);
508555 try testArgs(f16, 0.0);
509 try testArgs(f16, trueMin(f16));
510 try testArgs(f16, min(f16));
556 try testArgs(f16, tmin(f16));
557 try testArgs(f16, fmin(f16));
511558 try testArgs(f16, 0.1);
512559 try testArgs(f16, 1.0);
513560 try testArgs(f16, 10.0);
514 try testArgs(f16, max(f16));
561 try testArgs(f16, fmax(f16));
515562 try testArgs(f16, inf(f16));
516563 try testArgs(f16, nan(f16));
517564
518565 try testArgs(f32, -nan(f32));
519566 try testArgs(f32, -inf(f32));
520 try testArgs(f32, -max(f32));
567 try testArgs(f32, -fmax(f32));
521568 try testArgs(f32, -10.0);
522569 try testArgs(f32, -1.0);
523570 try testArgs(f32, -0.1);
524 try testArgs(f32, -min(f32));
525 try testArgs(f32, -trueMin(f32));
571 try testArgs(f32, -fmin(f32));
572 try testArgs(f32, -tmin(f32));
526573 try testArgs(f32, -0.0);
527574 try testArgs(f32, 0.0);
528 try testArgs(f32, trueMin(f32));
529 try testArgs(f32, min(f32));
575 try testArgs(f32, tmin(f32));
576 try testArgs(f32, fmin(f32));
530577 try testArgs(f32, 0.1);
531578 try testArgs(f32, 1.0);
532579 try testArgs(f32, 10.0);
533 try testArgs(f32, max(f32));
580 try testArgs(f32, fmax(f32));
534581 try testArgs(f32, inf(f32));
535582 try testArgs(f32, nan(f32));
536583
537584 try testArgs(f64, -nan(f64));
538585 try testArgs(f64, -inf(f64));
539 try testArgs(f64, -max(f64));
586 try testArgs(f64, -fmax(f64));
540587 try testArgs(f64, -10.0);
541588 try testArgs(f64, -1.0);
542589 try testArgs(f64, -0.1);
543 try testArgs(f64, -min(f64));
544 try testArgs(f64, -trueMin(f64));
590 try testArgs(f64, -fmin(f64));
591 try testArgs(f64, -tmin(f64));
545592 try testArgs(f64, -0.0);
546593 try testArgs(f64, 0.0);
547 try testArgs(f64, trueMin(f64));
548 try testArgs(f64, min(f64));
594 try testArgs(f64, tmin(f64));
595 try testArgs(f64, fmin(f64));
549596 try testArgs(f64, 0.1);
550597 try testArgs(f64, 1.0);
551598 try testArgs(f64, 10.0);
552 try testArgs(f64, max(f64));
599 try testArgs(f64, fmax(f64));
553600 try testArgs(f64, inf(f64));
554601 try testArgs(f64, nan(f64));
555602
556603 try testArgs(f80, -nan(f80));
557604 try testArgs(f80, -inf(f80));
558 try testArgs(f80, -max(f80));
605 try testArgs(f80, -fmax(f80));
559606 try testArgs(f80, -10.0);
560607 try testArgs(f80, -1.0);
561608 try testArgs(f80, -0.1);
562 try testArgs(f80, -min(f80));
563 try testArgs(f80, -trueMin(f80));
609 try testArgs(f80, -fmin(f80));
610 try testArgs(f80, -tmin(f80));
564611 try testArgs(f80, -0.0);
565612 try testArgs(f80, 0.0);
566 try testArgs(f80, trueMin(f80));
567 try testArgs(f80, min(f80));
613 try testArgs(f80, tmin(f80));
614 try testArgs(f80, fmin(f80));
568615 try testArgs(f80, 0.1);
569616 try testArgs(f80, 1.0);
570617 try testArgs(f80, 10.0);
571 try testArgs(f80, max(f80));
618 try testArgs(f80, fmax(f80));
572619 try testArgs(f80, inf(f80));
573620 try testArgs(f80, nan(f80));
574621
575622 try testArgs(f128, -nan(f128));
576623 try testArgs(f128, -inf(f128));
577 try testArgs(f128, -max(f128));
624 try testArgs(f128, -fmax(f128));
578625 try testArgs(f128, -10.0);
579626 try testArgs(f128, -1.0);
580627 try testArgs(f128, -0.1);
581 try testArgs(f128, -min(f128));
582 try testArgs(f128, -trueMin(f128));
628 try testArgs(f128, -fmin(f128));
629 try testArgs(f128, -tmin(f128));
583630 try testArgs(f128, -0.0);
584631 try testArgs(f128, 0.0);
585 try testArgs(f128, trueMin(f128));
586 try testArgs(f128, min(f128));
632 try testArgs(f128, tmin(f128));
633 try testArgs(f128, fmin(f128));
587634 try testArgs(f128, 0.1);
588635 try testArgs(f128, 1.0);
589636 try testArgs(f128, 10.0);
590 try testArgs(f128, max(f128));
637 try testArgs(f128, fmax(f128));
591638 try testArgs(f128, inf(f128));
592639 try testArgs(f128, nan(f128));
593640 }
......@@ -1136,6 +1183,145 @@ fn Unary(comptime op: anytype) type {
11361183 try testArgs(@Vector(3, i1025), .{ -1 << 1024, -1, 0 });
11371184 try testArgs(@Vector(3, u1025), .{ 0, 1, 1 << 1024 });
11381185 }
1186 fn testFloatVectorTypes() !void {
1187 try testArgs(@Vector(1, f16), .{
1188 -0x1.17cp-12,
1189 });
1190 try testArgs(@Vector(2, f16), .{
1191 0x1.47cp9, 0x1.3acp9,
1192 });
1193 try testArgs(@Vector(4, f16), .{
1194 0x1.ab4p0, -0x1.7fcp-7, -0x1.1cp0, -0x1.f14p12,
1195 });
1196 try testArgs(@Vector(8, f16), .{
1197 -0x1.8d8p8, 0x1.83p10, -0x1.5ap-1, -0x1.d78p13, -0x1.608p12, 0x1.e8p-9, -0x1.688p-10, -0x1.738p9,
1198 });
1199 try testArgs(@Vector(16, f16), .{
1200 0x1.da8p-1, -0x1.ed4p-10, -0x1.dc8p1, 0x1.b78p-14, nan(f16), 0x1.9d8p8, nan(f16), 0x1.d5p13,
1201 -0x1.2dp13, 0x1.6c4p12, 0x1.a9cp-11, -0x1.0ecp8, 0x0.4ccp-14, -0x1.0a8p-6, -0x1.5bcp-14, 0x1.6d8p-9,
1202 });
1203 try testArgs(@Vector(32, f16), .{
1204 0x1.d5cp-6, -0x1.a98p5, 0x1.49cp5, -0x1.e4p-1, -0x1.21p-13, -0x1.c94p-1, -0x1.adcp-5, -0x1.524p-1,
1205 -0x1.0d8p-3, -0x1.5c4p-2, 0x1.f84p-2, 0x1.664p1, -0x1.f64p13, -0x1.bf4p4, -0x1.4b8p0, -0x0.f64p-14,
1206 -0x1.3f8p1, 0x1.098p2, -0x1.a44p8, 0x1.048p13, 0x1.fd4p-11, 0x1.18p-9, -0x1.504p2, 0x1.d04p7,
1207 -nan(f16), 0x1.a94p2, 0x0.5e8p-14, -0x1.7acp-7, 0x1.4c8p-3, 0x1.518p-4, nan(f16), 0x1.8f8p10,
1208 });
1209 try testArgs(@Vector(64, f16), .{
1210 -0x1.c2p2, 0x0.2fcp-14, 0x1.de8p0, -0x1.714p2, 0x1.f9p-7, -0x1.11cp-13, -0x1.558p10, -0x1.2acp-7,
1211 0x1.348p14, 0x1.2dcp7, -0x1.8acp-12, -0x1.2cp2, 0x1.868p1, -0x1.1f8p-14, 0x1.638p7, -0x1.734p-5,
1212 0x0.b98p-14, -0x1.7f4p-12, -0x1.38cp15, 0x1.50cp15, 0x1.91cp8, 0x1.cb4p-1, 0x1.fc4p-13, 0x1.9a4p0,
1213 0x1.18p-4, 0x1.60cp10, 0x1.6fp-12, 0x1.b48p6, 0x1.37cp-11, 0x1.424p7, 0x1.44cp13, 0x1.aep5,
1214 0x1.968p14, 0x1.e8p13, -0x1.bp2, -0x1.644p5, 0x1.de4p-8, -0x1.5b4p-14, -0x1.4ap1, -0x1.868p9,
1215 -0x1.d14p0, 0x1.d7cp15, 0x1.3c8p14, 0x1.2ccp-14, -0x1.ee4p8, 0x1.49p-3, 0x1.35cp12, 0x1.d34p6,
1216 0x1.7acp3, -0x1.fa4p2, 0x1.7b4p13, -0x1.cf4p-12, -0x1.ebcp-10, -0x1.5p-3, 0x1.4bp-6, 0x1.83p12,
1217 -0x1.f9cp-8, -0x1.43p-8, -0x1.99p-1, -0x1.dacp3, -0x1.728p-4, -0x1.03cp4, 0x1.604p-2, -0x1.0ep13,
1218 });
1219
1220 try testArgs(@Vector(1, f32), .{
1221 -0x1.17cp-12,
1222 });
1223 try testArgs(@Vector(2, f32), .{
1224 -0x1.a3123ap90, -0x1.4a2ec6p-54,
1225 });
1226 try testArgs(@Vector(4, f32), .{
1227 -0x1.8a41p77, -0x1.7c54e2p-61, -0x1.498556p-41, 0x1.d77c22p-20,
1228 });
1229 try testArgs(@Vector(8, f32), .{
1230 0x1.943da4p-86, 0x1.528792p95, -0x1.9c9bfap-26, -0x1.8df936p-90,
1231 -0x1.6a70cep56, 0x1.626638p-48, 0x1.7bb2bap-57, -0x1.ac5104p94,
1232 });
1233 try testArgs(@Vector(16, f32), .{
1234 0x1.157044p115, -0x1.416c04p-111, 0x1.a8f164p-104, 0x1.9b6678p84,
1235 -0x1.9d065cp9, -0x1.e8c4b4p126, -0x1.ddb968p84, -0x1.fec8c8p74,
1236 0x1.64ffb2p59, 0x1.548922p20, 0x1.7270fcp22, -0x1.abac68p33,
1237 0x1.faabfp33, -0x1.8aee82p55, 0x1.1bf8fp75, 0x1.33c46ap-66,
1238 });
1239 try testArgs(@Vector(32, f32), .{
1240 -0x1.039b68p37, -0x1.34de4ap-74, -0x1.05d78ap-76, -0x1.be0f5ap-47,
1241 0x1.032204p-38, 0x1.ef8e2ap-78, -0x1.b013ecp-80, 0x1.71fe4cp99,
1242 0x1.abdadap-14, 0x1.56a9a8p-48, -0x1.8bbd7ep9, 0x1.edd308p-72,
1243 -0x1.92fafcp-121, -0x1.50812p19, 0x1.f4ddc4p28, -0x1.6f0b12p-50,
1244 -0x1.12ab02p127, 0x1.24df48p21, -0x1.993c3p-14, -0x1.4cc476p-112,
1245 0x1.13d9a8p-40, 0x1.a6e652p-9, -0x1.9c730cp-21, -0x1.a75aaap-70,
1246 -0x1.39e632p-111, 0x1.8e8da8p-45, 0x1.b5652cp31, 0x1.258366p44,
1247 0x1.d473aap92, -0x1.951b64p9, 0x1.542edp15, -0x0.f6222ap-126,
1248 });
1249
1250 try testArgs(@Vector(1, f64), .{
1251 -0x1.0114613df6f97p816,
1252 });
1253 try testArgs(@Vector(2, f64), .{
1254 -0x1.8404dad72003cp720, -0x1.6b14b40bcf3b7p-176,
1255 });
1256 try testArgs(@Vector(4, f64), .{
1257 -0x1.04e1acbfddd9cp681, -0x1.ed553cc056da7p-749,
1258 0x1.3d3f703a0c893p-905, 0x1.0b35633fa78fp691,
1259 });
1260 try testArgs(@Vector(8, f64), .{
1261 -0x1.901a2a60f0562p-301, -0x1.2516175ad61ecp-447,
1262 0x1.e7b12124846bfp564, 0x1.9291384bd7259p209,
1263 -0x1.a7bf62f803c98p900, 0x1.4e2e26257bb3p987,
1264 -0x1.413ca9a32d894p811, 0x1.61b1dd9432e95p479,
1265 });
1266 try testArgs(@Vector(16, f64), .{
1267 -0x1.8fc7286d95f54p-235, -0x1.796a7ea8372b6p-837,
1268 -0x1.8c0f930539acbp-98, -0x1.ec80dfbf0b931p-430,
1269 -0x1.e3d80c640652fp-1019, 0x1.8241238fb542fp161,
1270 -0x1.e1f1a79d50263p137, -0x1.9ac5cb2771c28p-791,
1271 0x1.4d8f00fe881e7p-401, -0x1.87fbd7bfd99d7p346,
1272 -0x1.a8a7cc575335ep1017, 0x1.37bb88dc3fd8bp-355,
1273 0x1.9d53d346c0e65p929, -0x1.bbae3d0229c34p289,
1274 -0x1.cb8ef994d5ce5p25, 0x1.ba20af512616ap50,
1275 });
1276
1277 try testArgs(@Vector(1, f80), .{
1278 -0x1.a2e9410a7dfedabp-2324,
1279 });
1280 try testArgs(@Vector(2, f80), .{
1281 -0x1.a2e9410a7dfedabp-2324,
1282 0x1.2b17da3b9746885p-8665,
1283 });
1284 try testArgs(@Vector(4, f80), .{
1285 -0x1.c488fedb7ab646cep-13007,
1286 0x1.e914deaccaa50016p2073,
1287 -0x1.d1c7ae8ec3c9df86p10642,
1288 -0x1.2da1658f337fa01p9893,
1289 });
1290 try testArgs(@Vector(8, f80), .{
1291 -0x1.bed8a74c43750656p890,
1292 -0x1.7bf57f38004ac976p8481,
1293 -0x1.9cdc10ac0657d328p7884,
1294 0x1.c86f61883da149fp12293,
1295 -0x1.528d6957df6bfdd8p14125,
1296 -0x1.5ebb4006d0243bfep14530,
1297 -0x1.94b9b18636d12402p-1845,
1298 -0x1.25439a6d68add188p5962,
1299 });
1300
1301 try testArgs(@Vector(1, f128), .{
1302 -0x1.d1e6fc3b1e66632e7b79051a47dap14300,
1303 });
1304 try testArgs(@Vector(2, f128), .{
1305 0x1.84b3ac8ffe5893b2c6af8d68de9dp-83,
1306 -0x1.438ca2c8a0d8e3ee9062d351c46ep-10235,
1307 });
1308 try testArgs(@Vector(4, f128), .{
1309 0x1.04eb03882d4fd1b090e714d3e5ep806,
1310 -0x1.4082b29f7c26e701764c915642ffp-6182,
1311 -0x1.b6f1e8565e5040415110f18b519ap13383,
1312 0x1.1c29f8c162cead9061c5797ea15ap11957,
1313 });
1314 try testArgs(@Vector(8, f128), .{
1315 -0x1.53d7f00cd204d80e5ff5bb665773p11218,
1316 -0x1.4daa1c81cffe28e8fa5cd703c287p2362,
1317 -0x1.cc6a71c3ad4560871efdbd025cd7p-8116,
1318 -0x1.87f8553cf8772fb6b78e7df3e3bap14523,
1319 -0x1.14b6880f6678f86dfb543dde1c6ep2105,
1320 0x1.9d2d4398414da9d857e76e8fd7ccp-13668,
1321 0x1.a37f07af240ded458d103c022064p-1158,
1322 0x1.425d53e6bd6070b847e5da1ed593p1394,
1323 });
1324 }
11391325 };
11401326}
11411327
......@@ -1205,26 +1391,51 @@ fn Binary(comptime op: anytype) type {
12051391 );
12061392 }
12071393 fn testIntTypes() !void {
1394 try testArgs(i8, 0x48, 0x6c);
12081395 try testArgs(u8, 0xbb, 0x43);
1396 try testArgs(i16, -0x0fdf, 0x302e);
12091397 try testArgs(u16, 0xb8bf, 0x626d);
1398 try testArgs(i32, -0x6280178f, 0x6802c034);
12101399 try testArgs(u32, 0x80d7a2c6, 0xbff6a402);
1400 try testArgs(i64, 0x0365a53b8ee0c987, -0x1bb6d3013500a7d2);
12111401 try testArgs(u64, 0x71138bc6b4a38898, 0x1bc4043de9438c7b);
1402 try testArgs(i128, 0x76d428c46cdeaa2ac43de8abffb22f6d, 0x427f7545abe434a12544fdbe2a012889);
12121403 try testArgs(u128, 0xe05fc132ef2cd8affee00a907f0a851f, 0x29f912a72cfc6a7c6973426a9636da9a);
1404 try testArgs(
1405 i256,
1406 -0x53d4148cee74ea43477a65b3daa7b8fdadcbf4508e793f4af113b8d8da5a7eb6,
1407 -0x30dcbaf7b9b7a3df033694e6795444d842fb0b8f79bc18b3ea8a6b7ccad3ea91,
1408 );
12131409 try testArgs(
12141410 u256,
12151411 0xb7935f5c2f3b1ae7a422c0a7c446884294b7d5370bada307d2fe5a4c4284a999,
12161412 0x310e6e196ba4f143b8d285ca6addf7f3bb3344224aff221b27607a31e148be08,
12171413 );
1414 try testArgs(
1415 i258,
1416 -0x0eee283365108dbeea0bec82f5147418d8ffe86f9eed00e414b4eccd65c21239a,
1417 -0x122c730073fc29a24cd6e3e6263566879bc5325d8566b8db31fcb4a76f7ab95eb,
1418 );
12181419 try testArgs(
12191420 u258,
12201421 0x186d5ddaab8cb8cb04e5b41e36f812e039d008baf49f12894c39e29a07796d800,
12211422 0x2072daba6ffad168826163eb136f6d28ca4360c8e7e5e41e29755e19e4753a4f5,
12221423 );
1424 try testArgs(
1425 i495,
1426 0x2fe6bc5448c55ce18252e2c9d44777505dfe63ff249a8027a6626c7d8dd9893fd5731e51474727be556f757facb586a4e04bbc0148c6c7ad692302f46fbd,
1427 -0x016a358821ef8240172f3a08e8830c06e6bcf2225f5f4d41ed42b44d249385f55cc594e1278ecac31c73faed890e5054af1a561483bb1bb6fb1f753514cf,
1428 );
12231429 try testArgs(
12241430 u495,
12251431 0x6eaf4e252b3bf74b75bac59e0b43ca5326bad2a25b3fdb74a67ef132ac5e47d72eebc3316fb2351ee66c50dc5afb92a75cea9b0e35160652c7db39eeb158,
12261432 0x49fbed744a92b549d8c05bb3512c617d24dd824f3f69bdf3923bc326a75674b85f5b828d2566fab9c86f571d12c2a63c9164feb0d191d27905533d09622a,
12271433 );
1434 try testArgs(
1435 i512,
1436 -0x3a6876ca92775286c6e1504a64a9b8d56985bebf4a1b66539d404e0e96f24b226f70c4bcff295fdc2043b82513b2052dc45fd78f7e9e80e5b3e101757289f054,
1437 0x5080c516a819bd32a0a5f0976441bbfbcf89e77684f1f10eb326aeb28e1f8d593278cff60fc99b8ffc87d8696882c64728dd3c322b7142803f4341f85a03bc10,
1438 );
12281439 try testArgs(
12291440 u512,
12301441 0xe5b1fedca3c77db765e517aabd05ffc524a3a8aff1784bbf67c45b894447ede32b65b9940e78173c591e56e078932d465f235aece7ad47b7f229df7ba8f12295,
......@@ -1232,6 +1443,69 @@ fn Binary(comptime op: anytype) type {
12321443 );
12331444 }
12341445 fn testIntVectorTypes() !void {
1446 try testArgs(@Vector(1, i8), .{
1447 -0x54,
1448 }, .{
1449 0x0f,
1450 });
1451 try testArgs(@Vector(2, i8), .{
1452 -0x4d, 0x55,
1453 }, .{
1454 0x7d, -0x5d,
1455 });
1456 try testArgs(@Vector(4, i8), .{
1457 0x73, 0x6f, 0x6e, -0x49,
1458 }, .{
1459 -0x66, 0x23, 0x21, -0x56,
1460 });
1461 try testArgs(@Vector(8, i8), .{
1462 0x44, -0x37, 0x33, -0x2b, -0x1f, 0x3e, 0x50, -0x4d,
1463 }, .{
1464 0x6a, 0x1a, -0x0e, 0x4c, -0x46, 0x03, -0x17, 0x3e,
1465 });
1466 try testArgs(@Vector(16, i8), .{
1467 -0x52, 0x1a, -0x4b, 0x4e, -0x75, 0x33, -0x43, 0x30, 0x71, -0x30, -0x73, -0x53, 0x64, 0x1f, -0x27, 0x36,
1468 }, .{
1469 0x65, 0x77, -0x62, 0x0f, 0x15, 0x52, 0x5c, 0x12, -0x10, 0x36, 0x6d, 0x42, -0x24, -0x79, -0x32, -0x75,
1470 });
1471 try testArgs(@Vector(32, i8), .{
1472 -0x12, -0x1e, 0x18, 0x6e, 0x31, 0x53, -0x6a, -0x34, 0x13, 0x4d, 0x30, -0x7d, -0x31, 0x1e, -0x24, 0x32,
1473 -0x1e, -0x01, 0x55, 0x33, -0x75, -0x44, -0x57, 0x2b, -0x66, 0x19, 0x7f, -0x28, -0x3f, -0x7e, -0x5d, -0x06,
1474 }, .{
1475 0x05, -0x23, 0x43, -0x54, -0x41, 0x7f, -0x6a, -0x31, 0x04, 0x15, -0x7a, -0x37, 0x6d, 0x16, 0x00, 0x4a,
1476 0x15, 0x55, -0x4a, 0x16, -0x73, -0x0c, 0x1c, -0x26, -0x14, 0x00, 0x55, 0x7b, 0x16, -0x2e, -0x5f, -0x67,
1477 });
1478 try testArgs(@Vector(64, i8), .{
1479 -0x05, 0x76, 0x4e, -0x5c, 0x7b, -0x1a, -0x38, -0x2e, 0x3d, 0x36, 0x01, 0x30, -0x02, -0x71, -0x24, 0x24,
1480 -0x2e, -0x6e, -0x60, 0x74, -0x80, -0x1c, -0x34, -0x08, -0x33, 0x77, 0x1c, -0x0f, 0x45, -0x51, -0x1d, 0x35,
1481 -0x45, 0x44, 0x27, -0x3c, 0x6b, 0x58, -0x6a, -0x26, 0x06, -0x30, -0x21, -0x0a, 0x60, -0x11, -0x05, 0x75,
1482 0x38, 0x72, -0x6d, -0x1f, -0x7f, 0x74, -0x6b, -0x14, -0x80, 0x35, -0x0f, -0x1e, 0x6a, 0x17, -0x74, -0x6c,
1483 }, .{
1484 -0x5d, 0x2d, 0x55, 0x40, -0x7c, 0x67, 0x61, 0x5f, 0x14, 0x5b, -0x0c, -0x4d, -0x5f, 0x25, 0x36, 0x3c,
1485 -0x75, -0x48, -0x2b, 0x76, -0x57, -0x4a, 0x1d, 0x65, -0x32, 0x18, -0x2a, -0x0a, -0x6e, -0x3c, -0x62, 0x4e,
1486 -0x24, -0x3c, 0x7d, -0x79, -0x1a, -0x14, -0x03, -0x56, 0x7a, 0x5f, 0x64, -0x68, 0x5f, -0x10, -0x63, -0x07,
1487 0x79, -0x44, 0x47, 0x7d, 0x6e, 0x77, 0x03, -0x4e, 0x67, 0x38, 0x46, -0x44, -0x41, 0x66, -0x16, -0x0a,
1488 });
1489 try testArgs(@Vector(128, i8), .{
1490 0x30, 0x70, -0x2a, -0x29, -0x35, -0x69, -0x18, 0x2b, 0x4a, -0x17, -0x5f, -0x36, 0x34, -0x26, 0x03, -0x2d,
1491 -0x75, -0x27, -0x07, -0x49, -0x58, 0x00, -0x45, 0x5d, -0x11, -0x68, 0x34, 0x73, -0x4d, 0x7f, -0x25, -0x6a,
1492 0x46, -0x1d, -0x68, 0x04, 0x64, -0x0d, 0x30, 0x27, -0x24, 0x67, 0x3c, -0x7c, -0x2e, -0x24, 0x24, 0x3e,
1493 -0x2c, -0x05, 0x4e, -0x17, 0x6d, 0x57, 0x76, 0x35, -0x3d, 0x51, 0x71, -0x4e, 0x50, 0x26, 0x4a, -0x42,
1494 0x73, -0x36, -0x5d, 0x2a, 0x55, 0x33, -0x2b, -0x76, 0x08, 0x43, 0x77, -0x73, -0x0a, 0x5c, -0x03, -0x50,
1495 -0x0a, -0x1c, -0x20, 0x3c, -0x7e, 0x60, 0x11, -0x77, 0x25, -0x71, 0x31, 0x2d, -0x4b, -0x26, -0x2a, 0x7f,
1496 -0x1f, 0x23, -0x34, -0x1f, 0x35, 0x0d, 0x3e, 0x76, -0x08, 0x2c, 0x12, 0x3e, -0x09, -0x3e, 0x4b, -0x52,
1497 -0x1a, -0x44, -0x53, -0x41, -0x6d, -0x5e, -0x06, -0x04, 0x3f, -0x2e, 0x01, 0x54, 0x19, -0x5a, -0x62, -0x3a,
1498 }, .{
1499 0x42, -0x11, -0x08, -0x64, -0x55, 0x31, 0x27, -0x66, 0x38, 0x5a, 0x25, -0x68, 0x0b, -0x41, -0x0d, 0x60,
1500 -0x17, -0x6d, 0x62, -0x65, -0x5e, -0x1c, -0x35, 0x28, 0x1c, -0x74, -0x7f, -0x1c, 0x3a, 0x4e, 0x05, -0x08,
1501 0x30, -0x77, 0x03, 0x68, -0x2c, 0x5c, 0x74, 0x6a, -0x21, 0x0a, 0x36, -0x55, 0x21, 0x29, -0x05, 0x70,
1502 0x23, 0x3b, 0x0a, 0x7a, 0x19, 0x14, 0x65, -0x1d, 0x2b, 0x65, 0x33, 0x2a, 0x52, -0x63, 0x57, 0x10,
1503 -0x1b, 0x26, -0x46, -0x7e, -0x25, 0x79, -0x01, -0x0d, -0x49, -0x4d, 0x74, 0x03, 0x77, 0x16, 0x03, -0x3d,
1504 0x1c, 0x25, 0x5a, -0x2f, -0x16, -0x5f, -0x36, -0x55, -0x44, -0x0c, -0x0f, 0x7b, -0x15, -0x1d, 0x32, 0x31,
1505 0x6e, -0x44, -0x4a, -0x64, 0x67, 0x04, 0x47, 0x00, 0x3c, -0x0a, -0x79, 0x3d, 0x48, 0x5a, 0x61, -0x2c,
1506 0x6d, -0x68, -0x71, -0x6b, -0x11, 0x44, -0x75, -0x55, -0x67, -0x52, 0x64, -0x3d, -0x05, -0x76, -0x6d, -0x44,
1507 });
1508
12351509 try testArgs(@Vector(1, u8), .{
12361510 0x1f,
12371511 }, .{
......@@ -1295,6 +1569,67 @@ fn Binary(comptime op: anytype) type {
12951569 0x56, 0x4f, 0xf1, 0xaa, 0x0a, 0x0f, 0xdb, 0x1b, 0xc8, 0x45, 0x9b, 0x12, 0xb4, 0x1a, 0xe4, 0xa3,
12961570 });
12971571
1572 try testArgs(@Vector(1, i16), .{
1573 -0x7b9c,
1574 }, .{
1575 0x600a,
1576 });
1577 try testArgs(@Vector(2, i16), .{
1578 0x43cc, -0x1421,
1579 }, .{
1580 -0x2b0e, 0x4d99,
1581 });
1582 try testArgs(@Vector(4, i16), .{
1583 0x558f, 0x6d92, 0x488f, 0x0a04,
1584 }, .{
1585 -0x01a9,
1586 0x2ee4,
1587 0x24a9,
1588 -0x5fee,
1589 });
1590 try testArgs(@Vector(8, i16), .{
1591 -0x7e5d, -0x02e4, -0x3a72, -0x2e30, 0x7c87, 0x3ea0, 0x4f02, 0x06e4,
1592 }, .{
1593 -0x417f, 0x5a13, -0x117b, 0x4c28, -0x3769, -0x56a8, 0x1656, -0x4431,
1594 });
1595 try testArgs(@Vector(16, i16), .{
1596 0x04be, 0x774a, 0x7395, -0x6ca2, -0x21a0, 0x35be, 0x186c, 0x5991,
1597 -0x1a82, 0x4527, -0x2278, -0x3554, 0x42c1, 0x7f53, -0x670d, 0x1fad,
1598 }, .{
1599 0x7a7d, 0x47dd, 0x1975, 0x4028, 0x26ef, -0x24f5, -0x77c9, -0x19a5,
1600 -0x4b04, -0x6939, -0x1b8d, 0x3718, -0x78e6, 0x0941, -0x1208, -0x392d,
1601 });
1602 try testArgs(@Vector(32, i16), .{
1603 0x4cde, 0x3ab0, 0x354e, 0x0bc0, -0x5333, 0x4857, -0x7ccf, -0x69da,
1604 0x6ab8, 0x2bf3, 0x1c5a, 0x7b11, -0x5653, 0x7bc5, 0x497e, -0x0b55,
1605 0x7aa8, -0x5a8c, -0x6d05, 0x6210, 0x1b64, 0x3f6f, 0x1a02, 0x65e4,
1606 -0x6795, 0x5867, -0x6faf, -0x07cb, -0x762c, -0x7500, 0x1f1c, -0x4348,
1607 }, .{
1608 0x72f6, -0x5405, -0x3aac, 0x2857, 0x34cd, -0x1dce, -0x56d8, 0x7150,
1609 -0x6549, 0x61bd, -0x3a9f, -0x1e02, -0x5a5a, -0x7910, -0x166d, 0x7c8e,
1610 -0x5292, -0x6c6e, -0x37e3, 0x1514, 0x1787, 0x58cb, -0x4d99, -0x6c15,
1611 0x592e, -0x045f, 0x7682, -0x1eef, 0x1fb2, -0x7117, -0x2a17, -0x2d8e,
1612 });
1613 try testArgs(@Vector(64, i16), .{
1614 0x29c3, -0x1b1f, -0x17ce, -0x50d0, -0x5de3, 0x5ffd, 0x184a, -0x7769,
1615 0x445e, 0x0d8a, 0x7844, -0x757d, 0x2b32, 0x5374, -0x6ab2, -0x71c4,
1616 0x38f9, 0x347f, 0x2d4c, 0x69a4, -0x2f92, -0x4479, 0x427b, -0x0c5f,
1617 0x15ae, 0x2c86, 0x1864, -0x0095, 0x6803, -0x3484, 0x1001, -0x0560,
1618 -0x0824, 0x7bf6, 0x7a3c, -0x458a, -0x65cc, -0x54b1, -0x75c6, 0x782e,
1619 0x35a7, -0x3188, -0x58ba, 0x40d0, -0x4a9c, 0x6b79, 0x1ef5, 0x67a2,
1620 -0x3fb8, 0x1885, -0x093d, -0x4802, 0x0379, 0x2f52, 0x7f1f, 0x256c,
1621 0x1052, 0x1b3b, -0x6146, 0x7e0d, 0x79ca, -0x79ee, 0x3d58, 0x7482,
1622 }, .{
1623 -0x0017, -0x3fdd, -0x6f93, 0x6178, 0x5c2b, 0x4eb3, 0x685b, 0x12c8,
1624 0x0290, -0x34f4, -0x6572, 0x3ab6, -0x3ed1, -0x5e5f, 0x3a90, -0x4540,
1625 -0x2098, 0x6bde, 0x1246, 0x2212, -0x4d6a, -0x2a5a, 0x5cc4, -0x240f,
1626 0x51b2, 0x5ec0, -0x5b5f, -0x1b6e, -0x57a5, -0x06bd, -0x5132, 0x7889,
1627 0x2817, 0x6ada, -0x6b46, -0x6a37, -0x6475, -0x5ff4, 0x5a27, 0x1dfa,
1628 0x6bd6, -0x49da, -0x09bf, -0x7c53, 0x2cd3, -0x6be0, -0x2dca, 0x44bd,
1629 -0x1b95, 0x7680, -0x5bb0, 0x7ad7, -0x1988, 0x149f, 0x631e, -0x1d2d,
1630 0x632b, 0x55c7, -0x3433, 0x0dde, -0x27a7, 0x560e, -0x2063, 0x4570,
1631 });
1632
12981633 try testArgs(@Vector(1, u16), .{
12991634 0x9d6f,
13001635 }, .{
......@@ -1353,6 +1688,59 @@ fn Binary(comptime op: anytype) type {
13531688 0x2c02, 0xff5b, 0x19ca, 0xbbf5, 0x870e, 0xc9ca, 0x47bb, 0xcfcc,
13541689 });
13551690
1691 try testArgs(@Vector(1, i32), .{
1692 0x7aef7b1e,
1693 }, .{
1694 0x60310858,
1695 });
1696 try testArgs(@Vector(2, i32), .{
1697 -0x21910ac9, 0x669f37ef,
1698 }, .{
1699 0x1a2a1681, 0x003b1fdf,
1700 });
1701 try testArgs(@Vector(4, i32), .{
1702 0x7906cf0d, 0x4818a45f, -0x0a2833b6, 0x51a018c9,
1703 }, .{
1704 -0x05a3e6a7, -0x47f4a500, 0x50d1141f, -0x264c85c2,
1705 });
1706 try testArgs(@Vector(8, i32), .{
1707 0x7566235a, -0x7720144f, -0x7d4f5489, 0x3cd736c8,
1708 -0x77388801, 0x4e7f955a, 0x4cdf52bc, 0x50b0b53f,
1709 }, .{
1710 0x00ed6fc5, 0x37320361, 0x70c563c2, -0x09acb495,
1711 0x0688e83f, 0x797295c4, -0x23bfbfdb, 0x38552096,
1712 });
1713 try testArgs(@Vector(16, i32), .{
1714 -0x0214589d, 0x74a7537f, 0x7a7dcb26, 0x3e2e4c44,
1715 -0x23bfc358, 0x60e8ef18, 0x5524a7bc, -0x3d88c153,
1716 -0x7dc8ff0f, 0x6e2698f6, 0x05641ab8, -0x45e9e405,
1717 -0x7c1a04d0, -0x4a8d1e91, 0x41d56723, 0x4ba924ab,
1718 }, .{
1719 -0x528dc756, -0x6bc217f4, 0x40789b06, 0x65f08d3a,
1720 -0x077140ea, -0x43bdaa79, 0x5d98f4e7, -0x2356a1ca,
1721 -0x36ef2b49, -0x7cd09b06, 0x71c8176e, 0x5b005860,
1722 0x6ce8cfab, -0x49fd7609, 0x6cbb4e33, 0x6c7c121d,
1723 });
1724 try testArgs(@Vector(32, i32), .{
1725 0x7d22905d, -0x354e4bbe, -0x68662618, -0x246e1858,
1726 -0x1c4285a9, -0x0338059c, -0x60f5bbf4, -0x04f06917,
1727 -0x55f837b6, -0x2fba5fe3, 0x092aabf4, -0x5f533b31,
1728 0x6e81a558, -0x7bcac358, 0x6c4d8d04, 0x3e2f9852,
1729 -0x78589b1a, -0x68a00fd4, -0x77d55e25, 0x7f79b51c,
1730 -0x66b88f45, 0x7f6dc8a5, -0x27299a82, -0x426c8e1c,
1731 0x0c288f16, 0x158f8c3f, 0x26708be1, -0x0b73626e,
1732 -0x32df1bee, 0x196330f4, -0x68bb9529, -0x26376ab6,
1733 }, .{
1734 0x63bd0bd4, 0x4e507611, -0x5e5222b8, -0x35d8e114,
1735 0x1feab77b, -0x20de7dfd, -0x0ed0b09f, -0x7fc3d585,
1736 -0x2d3018e9, -0x261d431b, 0x54451864, 0x1415288f,
1737 -0x3ab89593, -0x7060e4c1, -0x54fcd501, -0x26324630,
1738 0x53fc8294, 0x2d4aceef, -0x4ac8efd2, -0x2fec97b7,
1739 -0x4de3a2fc, 0x2269fe52, -0x58c8b473, -0x21026285,
1740 -0x23438776, 0x3d5c8c41, -0x1fc946b2, -0x161c7005,
1741 0x44913ff1, -0x76e2bfaa, -0x54636350, -0x6ec53870,
1742 });
1743
13561744 try testArgs(@Vector(1, u32), .{
13571745 0x1d0d9cc4,
13581746 }, .{
......@@ -1406,6 +1794,54 @@ fn Binary(comptime op: anytype) type {
14061794 0xf080e943, 0xc8718d14, 0x3f920382, 0x18d101b5,
14071795 });
14081796
1797 try testArgs(@Vector(1, i64), .{
1798 0x4a31679b316d8b59,
1799 }, .{
1800 0x34a583368386afde,
1801 });
1802 try testArgs(@Vector(2, i64), .{
1803 0x3bae373f9cb990b3, -0x7e8c6c876e8fd34a,
1804 }, .{
1805 0x09dbef6f7cb9c726, 0x48dfeca879b0df51,
1806 });
1807 try testArgs(@Vector(4, i64), .{
1808 -0x2bd24dd5f5da94bf, -0x144113bae33082c2,
1809 0x51e8cb7027ba4b12, -0x47b02168e2e22f13,
1810 }, .{
1811 0x769f113245641b91, -0x414d0e24ea97bc53,
1812 -0x0d2a570e7ef9e923, -0x070513d46d3b5a4c,
1813 });
1814 try testArgs(@Vector(8, i64), .{
1815 0x10bb6779b6a55ca9, 0x5f6ffd567a187af4,
1816 -0x6ba191b1168486b4, -0x441b92ce455870a1,
1817 0x2b6fdefbec9386ad, -0x6fdd3938d79217e4,
1818 0x6aa8fe1fb891501f, 0x20802f5bbdf6dc50,
1819 }, .{
1820 -0x7500319df437b479, 0x00ceb712d4fa62d4,
1821 0x67e715b9e99e660d, -0x17ae00e1f0009ec2,
1822 -0x5b700b948503acdf, -0x3ff61fb5cce5a530,
1823 0x55a3efac2e3694a4, 0x7f951a8d842f1670,
1824 });
1825 try testArgs(@Vector(16, i64), .{
1826 0x37a205109a685810, -0x50ff5d13134ccaa6,
1827 0x26813391c5505d5d, -0x502cdc01603a2f21,
1828 -0x6b1b44b1c850c7ea, 0x1f6db974ace9dd70,
1829 -0x47d15da8b519e328, 0x3ac0763abbf79d8d,
1830 0x5f12e0dc1aed4a4f, -0x46a973e16061e928,
1831 -0x3f59a3fa9699b4d5, -0x2f5012d390c78315,
1832 -0x40e510dea2c47e9c, 0x221c51defe0acc9a,
1833 -0x385fd6f1d390b84b, 0x35932fe2783fa6b9,
1834 }, .{
1835 0x0ba5202b71ad73dd, 0x65c8d2d5e2a14fe5,
1836 0x2e4d97cd66c41a3d, 0x14babbb47da51193,
1837 0x59d1d12b42ade3aa, -0x3c3617e556dfa8fb,
1838 -0x5a36602ba43279c4, -0x61f1ddda13665d9f,
1839 -0x50cd6128589ddd04, 0x135ae0dcc85674ae,
1840 -0x25e80592affc038d, 0x07e184c44fbe9b12,
1841 -0x70ede1b90964bbaa, 0x3ec48b32e8efd98e,
1842 -0x5267d41d85a29f46, 0x53099805f9116b60,
1843 });
1844
14091845 try testArgs(@Vector(1, u64), .{
14101846 0x333f593bf9d08546,
14111847 }, .{
......@@ -1454,6 +1890,49 @@ fn Binary(comptime op: anytype) type {
14541890 0xed533d18f8657f3f, 0x1ddd7cd7f6bab957,
14551891 });
14561892
1893 try testArgs(@Vector(1, i128), .{
1894 -0x3bb56309fcad13fc1011dc671cf57bdc,
1895 }, .{
1896 -0x05338bb517db516ee08c45d1408e5836,
1897 });
1898 try testArgs(@Vector(2, i128), .{
1899 0x295f2901e3837e5592b9435f8c4df8a7,
1900 -0x1f246b0ff2d02a6bf30a63392fc63371,
1901 }, .{
1902 -0x31060c09e29b545670c4cbc721a4e26b,
1903 -0x631eb286321325d51c617aa798195392,
1904 });
1905 try testArgs(@Vector(4, i128), .{
1906 0x47110102c74f620f08e5b7c5dbe193c2,
1907 -0x61d12d2650413ad3ffeeeab3ba57e1f0,
1908 0x449781e64b29dc8a17a88f4b7a5b0717,
1909 0x0d2170e9238d12a585dc5377566e1938,
1910 }, .{
1911 0x0bf948e19bd01823dcb3887937d97079,
1912 -0x16f933ab12bfba3560d0d39ffe69b64a,
1913 0x3d0bfce3907a5cd157348f0329e2548e,
1914 -0x3c2d182e2e238a4bebd7defbd7f9699a,
1915 });
1916 try testArgs(@Vector(8, i128), .{
1917 -0x775678727c721662f02480619acbfc82,
1918 -0x6f504fcbff673cb91e4706af4373665f,
1919 -0x670f888d4186387c3106d125b856c294,
1920 0x0641e7efdfdd924d126b446d874154f8,
1921 0x57d7aef0f82d3351917f43c8f677392b,
1922 -0x4077e745dede8367d145c94f20ab8810,
1923 -0x0344a74fb60e1f1f72ba8ec288b05939,
1924 -0x0be3ce9be461aca1d25ad8e74dcc36e1,
1925 }, .{
1926 -0x4a873d91e5a2331def0d34c008d33d83,
1927 0x2744cecfd4c683bdd12f3cfc11d7f520,
1928 -0x0cb8e468fc1de93a7c5ad2a5a61e8f50,
1929 -0x1a3be9e58e918d6586cc4948a54515d3,
1930 -0x512ec6f88c3a34950a8aaee47130120b,
1931 -0x2e772e4a8812e553bcf9b2754a493709,
1932 0x0c7b137937dc25f9f9cbaf4d7a88ee6b,
1933 -0x2ecdd5eb81eb0e98ed8d0aa9516c1617,
1934 });
1935
14571936 try testArgs(@Vector(1, u128), .{
14581937 0x5f11e16b0ca3392f907a857881455d2e,
14591938 }, .{
......@@ -1497,6 +1976,30 @@ fn Binary(comptime op: anytype) type {
14971976 0xa858bce5ad0e48c13588a4e170e8667c,
14981977 });
14991978
1979 try testArgs(@Vector(1, i256), .{
1980 0x1fe30aed39db1accf4d1b43845aec28c1094b500492555fdf59b4f2f85c6a1ce,
1981 }, .{
1982 0x6932f4faf261c45ecd701a4fe3015d4255e486b04c4ab448fe162980cead63fb,
1983 });
1984 try testArgs(@Vector(2, i256), .{
1985 -0x23daa9bab59dc1e685f4220c189930c3420a55784f0dec1028c2778d907ccfe2,
1986 0x521c992e4f46d61709d39e076ed94d5d884585f85ccbf71ca4d593da34f61bf5,
1987 }, .{
1988 0x2d880cb5aa793218a32411389db31e935932029645573a9625dd174099c9e5b2,
1989 0x2394a6cde7e8b2dc2995f07f22f815baa6c223d99c0b1ec4b2d8abd0094db853,
1990 });
1991 try testArgs(@Vector(4, i256), .{
1992 0x244e66ed932a4d970fd8735c10bfbd5f59bd4452c20fa0fcf873823b8c9e6321,
1993 -0x31577b747614b1ab83fd0178293cd80b3cb92e739459b2d038688a2471f6d659,
1994 -0x0dbdfc3d8bbd7cab6a33598cef29125aab7571fb0db9a528e42966963d6ce0e7,
1995 -0x72c58cce172d8a34019a44407a4baf1f8f8a4a611711bd5bb4daa2a2739dd67b,
1996 }, .{
1997 -0x2e88bc68893fc2d61af0e5ccb541f31fa6169504e8cfcbeab0b74a03b9e86c33,
1998 -0x7eba0783f3382b59a17ffbea57ba1dd8fa30e2d4f7eba7ed68d336d3c37b4561,
1999 -0x66d1463efd38e9e994e126d09b5c65c8efc932ffea9ec6cdf6042561ba05f801,
2000 0x2024bbacefbabbfd5b32a09be631451764a1f889a77918f9094382dc6d02aef2,
2001 });
2002
15002003 try testArgs(@Vector(1, u256), .{
15012004 0x28df37e1f57a56133ba3f5b5b2164ce24eb6c29a8973a597fd91fbee8ab4bafb,
15022005 }, .{
......@@ -1521,6 +2024,19 @@ fn Binary(comptime op: anytype) type {
15212024 0xe47a122bd45d5e7d69722d864a6b795ddee965a0993094f8791dd309d692de8b,
15222025 });
15232026
2027 try testArgs(@Vector(1, i512), .{
2028 -0x439ba81b44584e0c4d7abc80d18ab9d679a4e921884e877b28d04eb15b2d3e7be8d670b0aba2c4cc25c12655e1899ab514d0a6e50a221bcf076d506e6411d5c2,
2029 }, .{
2030 0x18b1d3be5a03310d82859a4ab72f056a33d1a4b554522bcc062fb33eda3b8111045ee79e045dd1a665d250b897f6f2e12003a03313c2547698f8c1eab452eae1,
2031 });
2032 try testArgs(@Vector(2, i512), .{
2033 0x28e2ab84d87d5fb12be65d8650de67b992dd162fe563ca74b62f51f2f32e1084e03e32c8370930816445ac5052b4d345059c8ace582e3ef44377b160e265ec9b,
2034 -0x3a96548c707219326c42063997e71bc7a17b3067d402063843f84c86e747b71e09338079c28943d20601c0cde018bad57f5615fc89784bcb6232e45c54dff1db,
2035 }, .{
2036 0x64beecc90609b7156653b75a861e174c58fb42d5c7bf8d793efbb1cbe785c6b8cd52ce5f9aa859f174123c387820d40a2f93122b81396d739eb85c3ea33fcd37,
2037 -0x3632e347bc6d794940424ca0945dafa04328a924ec6b0ccdedcda6d296e09aa2dd5dca83b934cac752993238aa4fe826be8d62991c9347bae6f01bc0b1b4223d,
2038 });
2039
15242040 try testArgs(@Vector(1, u512), .{
15252041 0x651058c1d89a8f34cfc5e66b6d25294eecfcc4a7e1e4a356eb51ee7d7b2db25378e4afee51b7d18d16e520772a60c50a02d7966f40ced1870b32c658e5821397,
15262042 }, .{
......@@ -1534,6 +2050,12 @@ fn Binary(comptime op: anytype) type {
15342050 0x8fa3d86099e9e2789d72f8e792290356d659ab20ac0414ff94745984c6ae7d986082197bb849889f912e896670aa2c1a11bd7e66e3f650710b0f0a18a1533f90,
15352051 });
15362052
2053 try testArgs(@Vector(1, i1024), .{
2054 -0x4fe568569c0531c9bfbbda1516e93a6c61a3d035c98e13fdc85225165a3bea84d5dc6b610ced008f9321453af42ea50bbf6881d40d2759b73b9b6186c0d6d243f367e292cbbf6b5c5c30d7f4e8de19701c7b0fc9e67cdf31228daa1675a4887f6c4f1588b48855d6f4730a21f27dec8a756c568727709b65cd531020d53ff394,
2055 }, .{
2056 -0x7cab2a053dfbf944cd342460350c989fd1b4469a6c7b54ddcacd54e605d29c03651b5c463495610d82269c9ac5b51bfd07816a0f7b1ab50cb598989ed64607b3faff79a190702eb285b0fedc050ec1a71537abc47ec590eb671d4f76b19567049ba4789d1a4348385607a0320fbff9b78260536a9b6030bddb0b09da689d1687,
2057 });
2058
15372059 try testArgs(@Vector(1, u1024), .{
15382060 0x0ca1a0dfaf8bb1da714b457d23c71aef948e66c7cd45c0aa941498a796fb18502ec32f34e885d0a107d44ae81595f8b52c2f0fb38e584b7139903a0e8a823ae20d01ca0662722dd474e7efc40f32d74cc065d97d8a09d0447f1ab6107fa0a57f3f8c866ae872506627ce82f18add79cee8dc69837f4ead3ca770c4d622d7e544,
15392061 }, .{
......@@ -1558,6 +2080,7 @@ test abs {
15582080 try Unary(abs).testIntTypes();
15592081 try Unary(abs).testIntVectorTypes();
15602082 try Unary(abs).testFloatTypes();
2083 try Unary(abs).testFloatVectorTypes();
15612084}
15622085
15632086inline fn clz(comptime Type: type, rhs: Type) @TypeOf(@clz(rhs)) {
......@@ -1591,3 +2114,19 @@ test bitXor {
15912114 try Binary(bitXor).testIntTypes();
15922115 try Binary(bitXor).testIntVectorTypes();
15932116}
2117
2118inline fn min(comptime Type: type, lhs: Type, rhs: Type) Type {
2119 return @min(lhs, rhs);
2120}
2121test min {
2122 try Binary(min).testIntTypes();
2123 try Binary(min).testIntVectorTypes();
2124}
2125
2126inline fn max(comptime Type: type, lhs: Type, rhs: Type) Type {
2127 return @max(lhs, rhs);
2128}
2129test max {
2130 try Binary(max).testIntTypes();
2131 try Binary(max).testIntVectorTypes();
2132}
test/cases/compile_errors/anytype_param_requires_comptime.zig+1-1
......@@ -15,6 +15,6 @@ pub export fn entry() void {
1515// error
1616//
1717// :7:25: error: unable to resolve comptime value
18// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_441.C' must be comptime-known
18// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_463.C' must be comptime-known
1919// :4:16: note: struct requires comptime because of this field
2020// :4:16: note: types are not available at runtime
test/cases/compile_errors/bogus_method_call_on_slice.zig+1-1
......@@ -16,5 +16,5 @@ pub export fn entry2() void {
1616//
1717// :3:6: error: no field or member function named 'copy' in '[]const u8'
1818// :9:8: error: no field or member function named 'bar' in '@TypeOf(.{})'
19// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_445'
19// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_467'
2020// :12:6: note: struct declared here
test/cases/compile_errors/coerce_anon_struct.zig+1-1
......@@ -6,6 +6,6 @@ export fn foo() void {
66
77// error
88//
9// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_434'
9// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_456'
1010// :3:16: note: struct declared here
1111// :1:11: note: struct declared here
test/src/Debugger.zig+119-110
......@@ -526,8 +526,9 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
526526 \\ var null_u32: ?u32 = null;
527527 \\ var maybe_u32: ?u32 = null;
528528 \\ var nonnull_u32: ?u32 = 456;
529 \\ null_u32 = null_u32;
529530 \\ maybe_u32 = 123;
530 \\ _ = .{ &null_u32, &nonnull_u32 };
531 \\ nonnull_u32 = nonnull_u32;
531532 \\ }
532533 \\}
533534 \\
......@@ -539,7 +540,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
539540 \\frame variable -- null_u32 maybe_u32 nonnull_u32
540541 \\breakpoint delete --force 1
541542 \\
542 \\breakpoint set --file optionals.zig --source-pattern-regexp '_ = \.{ &null_u32, &nonnull_u32 };'
543 \\breakpoint set --file optionals.zig --source-pattern-regexp 'nonnull_u32 = nonnull_u32;'
543544 \\process continue
544545 \\frame variable --show-types -- null_u32 maybe_u32 nonnull_u32
545546 \\breakpoint delete --force 2
......@@ -1285,10 +1286,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
12851286 \\ mod1.m1cfi(r0pai ^ 8);
12861287 \\}
12871288 \\pub fn r0cf(r0ca: u32) void {
1288 \\ _ = r0ca;
1289 \\ var discard = r0ca;
1290 \\ _ = &discard;
12891291 \\}
12901292 \\pub inline fn r0cfi(r0cai: u32) void {
1291 \\ _ = r0cai;
1293 \\ var discard = r0cai;
1294 \\ _ = &discard;
12921295 \\}
12931296 \\pub fn main() void {
12941297 \\ root0.r0pf(12);
......@@ -1331,10 +1334,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
13311334 \\ mod1.m1cfi(r1pai ^ 8);
13321335 \\}
13331336 \\pub fn r1cf(r1ca: u32) void {
1334 \\ _ = r1ca;
1337 \\ var discard = r1ca;
1338 \\ _ = &discard;
13351339 \\}
13361340 \\pub inline fn r1cfi(r1cai: u32) void {
1337 \\ _ = r1cai;
1341 \\ var discard = r1cai;
1342 \\ _ = &discard;
13381343 \\}
13391344 \\
13401345 ,
......@@ -1368,10 +1373,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
13681373 \\ mod1.m1cfi(m0pai ^ 8);
13691374 \\}
13701375 \\pub fn m0cf(m0ca: u32) void {
1371 \\ _ = m0ca;
1376 \\ var discard = m0ca;
1377 \\ _ = &discard;
13721378 \\}
13731379 \\pub inline fn m0cfi(m0cai: u32) void {
1374 \\ _ = m0cai;
1380 \\ var discard = m0cai;
1381 \\ _ = &discard;
13751382 \\}
13761383 \\
13771384 ,
......@@ -1404,10 +1411,12 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
14041411 \\ mod1.m1cfi(m1pai ^ 8);
14051412 \\}
14061413 \\pub fn m1cf(m1ca: u32) void {
1407 \\ _ = m1ca;
1414 \\ var discard = m1ca;
1415 \\ _ = &discard;
14081416 \\}
14091417 \\pub inline fn m1cfi(m1cai: u32) void {
1410 \\ _ = m1cai;
1418 \\ var discard = m1cai;
1419 \\ _ = &discard;
14111420 \\}
14121421 \\
14131422 ,
......@@ -1416,13 +1425,13 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
14161425 \\settings set frame-format 'frame #${frame.index}:{ ${module.file.basename}{\`${function.name-with-args}{${frame.no-debug}${function.pc-offset}}}}{ at ${line.file.basename}:${line.number}{:${line.column}}}{${function.is-optimized} [opt]}{${frame.is-artificial} [artificial]}\n'
14171426 \\
14181427 \\breakpoint set --file root0.zig --line 26
1419 \\breakpoint set --file root0.zig --line 29
1428 \\breakpoint set --file root0.zig --line 30
14201429 \\breakpoint set --file root1.zig --line 26
1421 \\breakpoint set --file root1.zig --line 29
1430 \\breakpoint set --file root1.zig --line 30
14221431 \\breakpoint set --file mod0.zig --line 26
1423 \\breakpoint set --file mod0.zig --line 29
1432 \\breakpoint set --file mod0.zig --line 30
14241433 \\breakpoint set --file mod1.zig --line 26
1425 \\breakpoint set --file mod1.zig --line 29
1434 \\breakpoint set --file mod1.zig --line 30
14261435 \\
14271436 \\process launch
14281437 \\thread backtrace --count 3
......@@ -1563,259 +1572,259 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
15631572 &.{
15641573 \\ * frame #0: inline_call`root0.r0cf(r0ca=13) at root0.zig:26:5
15651574 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:6:15
1566 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1575 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15671576 ,
1568 \\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:29:5
1577 \\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:30:5
15691578 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:7:16
1570 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1579 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15711580 ,
15721581 \\ * frame #0: inline_call`root1.r1cf(r1ca=15) at root1.zig:26:5
15731582 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:8:15
1574 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1583 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15751584 ,
1576 \\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:29:5
1585 \\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:30:5
15771586 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:9:16
1578 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1587 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15791588 ,
15801589 \\ * frame #0: inline_call`mod0.m0cf(m0ca=9) at mod0.zig:26:5
15811590 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:10:14
1582 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1591 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15831592 ,
1584 \\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:29:5
1593 \\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:30:5
15851594 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:11:15
1586 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1595 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15871596 ,
15881597 \\ * frame #0: inline_call`mod1.m1cf(m1ca=11) at mod1.zig:26:5
15891598 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:12:14
1590 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1599 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15911600 ,
1592 \\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:29:5
1601 \\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:30:5
15931602 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:13:15
1594 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1603 \\ frame #2: inline_call`root0.main at root0.zig:34:15
15951604 ,
15961605 \\ * frame #0: inline_call`root0.r0cf(r0ca=22) at root0.zig:26:5
15971606 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:16:15
1598 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1607 \\ frame #2: inline_call`root0.main at root0.zig:35:16
15991608 ,
1600 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:29:5
1609 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:30:5
16011610 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:17:16
1602 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1611 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16031612 ,
16041613 \\ * frame #0: inline_call`root1.r1cf(r1ca=20) at root1.zig:26:5
16051614 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:18:15
1606 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1615 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16071616 ,
1608 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:29:5
1617 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:30:5
16091618 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:19:16
1610 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1619 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16111620 ,
16121621 \\ * frame #0: inline_call`mod0.m0cf(m0ca=18) at mod0.zig:26:5
16131622 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:20:14
1614 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1623 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16151624 ,
1616 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:29:5
1625 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:30:5
16171626 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:21:15
1618 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1627 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16191628 ,
16201629 \\ * frame #0: inline_call`mod1.m1cf(m1ca=16) at mod1.zig:26:5
16211630 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:22:14
1622 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1631 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16231632 ,
1624 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:29:5
1633 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:30:5
16251634 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:23:15
1626 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1635 \\ frame #2: inline_call`root0.main at root0.zig:35:16
16271636 ,
16281637 \\ * frame #0: inline_call`root0.r0cf(r0ca=35) at root0.zig:26:5
16291638 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:6:15
1630 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1639 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16311640 ,
1632 \\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:29:5
1641 \\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:30:5
16331642 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:7:16
1634 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1643 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16351644 ,
16361645 \\ * frame #0: inline_call`root1.r1cf(r1ca=33) at root1.zig:26:5
16371646 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:8:15
1638 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1647 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16391648 ,
1640 \\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:29:5
1649 \\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:30:5
16411650 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:9:16
1642 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1651 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16431652 ,
16441653 \\ * frame #0: inline_call`mod0.m0cf(m0ca=39) at mod0.zig:26:5
16451654 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:10:14
1646 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1655 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16471656 ,
1648 \\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:29:5
1657 \\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:30:5
16491658 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:11:15
1650 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1659 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16511660 ,
16521661 \\ * frame #0: inline_call`mod1.m1cf(m1ca=37) at mod1.zig:26:5
16531662 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:12:14
1654 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1663 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16551664 ,
1656 \\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:29:5
1665 \\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:30:5
16571666 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:13:15
1658 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1667 \\ frame #2: inline_call`root0.main at root0.zig:36:15
16591668 ,
16601669 \\ * frame #0: inline_call`root0.r0cf(r0ca=44) at root0.zig:26:5
16611670 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:16:15
1662 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1671 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16631672 ,
1664 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:29:5
1673 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:30:5
16651674 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:17:16
1666 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1675 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16671676 ,
16681677 \\ * frame #0: inline_call`root1.r1cf(r1ca=46) at root1.zig:26:5
16691678 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:18:15
1670 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1679 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16711680 ,
1672 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:29:5
1681 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:30:5
16731682 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:19:16
1674 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1683 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16751684 ,
16761685 \\ * frame #0: inline_call`mod0.m0cf(m0ca=40) at mod0.zig:26:5
16771686 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:20:14
1678 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1687 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16791688 ,
1680 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:29:5
1689 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:30:5
16811690 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:21:15
1682 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1691 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16831692 ,
16841693 \\ * frame #0: inline_call`mod1.m1cf(m1ca=42) at mod1.zig:26:5
16851694 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:22:14
1686 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1695 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16871696 ,
1688 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:29:5
1697 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:30:5
16891698 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:23:15
1690 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1699 \\ frame #2: inline_call`root0.main at root0.zig:37:16
16911700 ,
16921701 \\ * frame #0: inline_call`root0.r0cf(r0ca=57) at root0.zig:26:5
16931702 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:6:15
1694 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1703 \\ frame #2: inline_call`root0.main at root0.zig:38:14
16951704 ,
1696 \\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:29:5
1705 \\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:30:5
16971706 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:7:16
1698 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1707 \\ frame #2: inline_call`root0.main at root0.zig:38:14
16991708 ,
17001709 \\ * frame #0: inline_call`root1.r1cf(r1ca=59) at root1.zig:26:5
17011710 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:8:15
1702 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1711 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17031712 ,
1704 \\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:29:5
1713 \\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:30:5
17051714 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:9:16
1706 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1715 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17071716 ,
17081717 \\ * frame #0: inline_call`mod0.m0cf(m0ca=61) at mod0.zig:26:5
17091718 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:10:14
1710 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1719 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17111720 ,
1712 \\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:29:5
1721 \\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:30:5
17131722 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:11:15
1714 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1723 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17151724 ,
17161725 \\ * frame #0: inline_call`mod1.m1cf(m1ca=63) at mod1.zig:26:5
17171726 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:12:14
1718 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1727 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17191728 ,
1720 \\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:29:5
1729 \\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:30:5
17211730 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:13:15
1722 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1731 \\ frame #2: inline_call`root0.main at root0.zig:38:14
17231732 ,
17241733 \\ * frame #0: inline_call`root0.r0cf(r0ca=66) at root0.zig:26:5
17251734 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:16:15
1726 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1735 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17271736 ,
1728 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:29:5
1737 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:30:5
17291738 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:17:16
1730 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1739 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17311740 ,
17321741 \\ * frame #0: inline_call`root1.r1cf(r1ca=64) at root1.zig:26:5
17331742 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:18:15
1734 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1743 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17351744 ,
1736 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:29:5
1745 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:30:5
17371746 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:19:16
1738 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1747 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17391748 ,
17401749 \\ * frame #0: inline_call`mod0.m0cf(m0ca=70) at mod0.zig:26:5
17411750 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:20:14
1742 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1751 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17431752 ,
1744 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:29:5
1753 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:30:5
17451754 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:21:15
1746 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1755 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17471756 ,
17481757 \\ * frame #0: inline_call`mod1.m1cf(m1ca=68) at mod1.zig:26:5
17491758 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:22:14
1750 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1759 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17511760 ,
1752 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:29:5
1761 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:30:5
17531762 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:23:15
1754 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1763 \\ frame #2: inline_call`root0.main at root0.zig:39:15
17551764 ,
17561765 \\ * frame #0: inline_call`root0.r0cf(r0ca=79) at root0.zig:26:5
17571766 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:6:15
1758 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1767 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17591768 ,
1760 \\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:29:5
1769 \\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:30:5
17611770 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:7:16
1762 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1771 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17631772 ,
17641773 \\ * frame #0: inline_call`root1.r1cf(r1ca=77) at root1.zig:26:5
17651774 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:8:15
1766 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1775 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17671776 ,
1768 \\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:29:5
1777 \\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:30:5
17691778 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:9:16
1770 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1779 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17711780 ,
17721781 \\ * frame #0: inline_call`mod0.m0cf(m0ca=75) at mod0.zig:26:5
17731782 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:10:14
1774 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1783 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17751784 ,
1776 \\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:29:5
1785 \\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:30:5
17771786 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:11:15
1778 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1787 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17791788 ,
17801789 \\ * frame #0: inline_call`mod1.m1cf(m1ca=73) at mod1.zig:26:5
17811790 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:12:14
1782 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1791 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17831792 ,
1784 \\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:29:5
1793 \\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:30:5
17851794 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:13:15
1786 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1795 \\ frame #2: inline_call`root0.main at root0.zig:40:14
17871796 ,
17881797 \\ * frame #0: inline_call`root0.r0cf(r0ca=88) at root0.zig:26:5
17891798 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:16:15
1790 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1799 \\ frame #2: inline_call`root0.main at root0.zig:41:15
17911800 ,
1792 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:29:5
1801 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:30:5
17931802 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:17:16
1794 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1803 \\ frame #2: inline_call`root0.main at root0.zig:41:15
17951804 ,
17961805 \\ * frame #0: inline_call`root1.r1cf(r1ca=90) at root1.zig:26:5
17971806 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:18:15
1798 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1807 \\ frame #2: inline_call`root0.main at root0.zig:41:15
17991808 ,
1800 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:29:5
1809 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:30:5
18011810 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:19:16
1802 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1811 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18031812 ,
18041813 \\ * frame #0: inline_call`mod0.m0cf(m0ca=92) at mod0.zig:26:5
18051814 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:20:14
1806 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1815 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18071816 ,
1808 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:29:5
1817 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:30:5
18091818 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:21:15
1810 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1819 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18111820 ,
18121821 \\ * frame #0: inline_call`mod1.m1cf(m1ca=94) at mod1.zig:26:5
18131822 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:22:14
1814 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1823 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18151824 ,
1816 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:29:5
1825 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:30:5
18171826 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:23:15
1818 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1827 \\ frame #2: inline_call`root0.main at root0.zig:41:15
18191828 },
18201829 );
18211830 db.addLldbTest(