From 932298679fdcefd1e4329e90697d91ae77fa0e21 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Thu, 17 Apr 2025 21:34:49 -0400 Subject: [PATCH] x86_64: rewrite scalar `@shlWithOverflow` --- src/arch/x86_64/CodeGen.zig | 3428 ++++++++++++++++++++++++++++++- test/behavior/x86_64/binary.zig | 10 + 2 files changed, 3415 insertions(+), 23 deletions(-) diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index f0478d7e23..822305baf5 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -73,10 +73,6 @@ mir_instructions: std.MultiArrayList(Mir.Inst) = .empty, mir_extra: std.ArrayListUnmanaged(u32) = .empty, mir_table: std.ArrayListUnmanaged(Mir.Inst.Index) = .empty, -/// Byte offset within the source file of the ending curly. -end_di_line: u32, -end_di_column: u32, - /// The value is an offset into the `Function` `code` from the beginning. /// To perform the reloc, write 32-bit signed little-endian integer /// which is a relative jump, based on the address following the reloc. @@ -912,8 +908,6 @@ pub fn generate( .err_ret_trace_reg = undefined, // populated after `resolveCallingConventionValues` .fn_type = fn_type, .src_loc = src_loc, - .end_di_line = func.rbrace_line, - .end_di_column = func.rbrace_column, }; defer { function.frame_allocs.deinit(gpa); @@ -1000,6 +994,16 @@ pub fn generate( else => |e| return e, }; + // Drop them off at the rbrace. + if (debug_output != .none) _ = try function.addInst(.{ + .tag = .pseudo, + .ops = .pseudo_dbg_line_line_column, + .data = .{ .line_column = .{ + .line = func.rbrace_line, + .column = func.rbrace_column, + } }, + }); + var mir: Mir = .{ .instructions = function.mir_instructions.toOwnedSlice(), .extra = try function.mir_extra.toOwnedSlice(gpa), @@ -1076,8 +1080,6 @@ pub fn generateLazy( .err_ret_trace_reg = undefined, .fn_type = undefined, .src_loc = src_loc, - .end_di_line = undefined, // no debug info yet - .end_di_column = undefined, // no debug info yet }; defer { function.inst_tracking.deinit(gpa); @@ -2381,16 +2383,6 @@ fn gen(self: *CodeGen) InnerError!void { try self.genBody(self.air.getMainBody()); if (self.debug_output != .none) try self.asmPseudo(.pseudo_dbg_epilogue_begin_none); } - - // Drop them off at the rbrace. - if (self.debug_output != .none) _ = try self.addInst(.{ - .tag = .pseudo, - .ops = .pseudo_dbg_line_line_column, - .data = .{ .line_column = .{ - .line = self.end_di_line, - .column = self.end_di_column, - } }, - }); } fn checkInvariantsAfterAirInst(self: *CodeGen) void { @@ -2416,7 +2408,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { - @setEvalBranchQuota(15_100); + @setEvalBranchQuota(15_800); const pt = cg.pt; const zcu = pt.zcu; const ip = &zcu.intern_pool; @@ -2457,8 +2449,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .mul_sat => try cg.airMulSat(inst), .shl_sat => try cg.airShlSat(inst), - .shl_with_overflow => try cg.airShlWithOverflow(inst), - .bitcast => try cg.airBitCast(inst), .splat => try cg.airSplat(inst), @@ -33385,6 +33375,3352 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { try res[0].withOverflow(&res[1], cg); try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); }, + .shl_with_overflow => |air_tag| if (use_old) try cg.airShlWithOverflow(inst) else fallback: { + const ty_pl = air_datas[@intFromEnum(inst)].ty_pl; + const bin_op = cg.air.extraData(Air.Bin, ty_pl.payload).data; + if (cg.typeOf(bin_op.lhs).isVector(zcu)) break :fallback try cg.airShlWithOverflow(inst); + var ops = try cg.tempsFromOperands(inst, .{ bin_op.lhs, bin_op.rhs }); + var res: [2]Temp = undefined; + cg.select(&res, &.{ ty_pl.ty.toType(), .u1 }, &ops, comptime &.{ .{ + .src_constraints = .{ .{ .exact_signed_int = 8 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .mut_mem, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._l, .sa, .dst0b, .src1b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 8 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .mut_mem, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._l, .sh, .dst0b, .src1b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_signed_int = 8 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_mut_gpr, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .add, .dst0b, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 8 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_mut_gpr, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .add, .dst0b, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .byte }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .extra_temps = .{ + .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0b, .uia(8, .src0, .add_src1_sub_bit_size), ._, ._ }, + .{ ._, ._r, .sa, .tmp0b, .uia(8, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0b, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .nbe } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, + .{ ._, ._, .@"and", .dst0b, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + .{ ._, ._l, .sh, .dst0b, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .src0b, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_signed_int = 8 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0b, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 8 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sh, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sh, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0b, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .byte }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .i8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._l, .sa, .tmp0b, .uia(8, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._r, .sa, .tmp0b, .uia(8, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0b, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sh, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._, .@"and", .tmp0b, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sh, .tmp0b, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0b, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_signed_int = 16 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .mut_mem, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._l, .sa, .dst0w, .src1b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .mut_mem, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._l, .sh, .dst0w, .src1b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_signed_int = 8 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_mut_gpr, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .add, .dst0w, .src0w, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 8 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_mut_gpr, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .add, .dst0w, .src0w, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .word }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .extra_temps = .{ + .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0d, .uia(32, .src0, .add_src1_sub_bit_size), ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .uia(32, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0w, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .fast_imm16, null, null, null }, + .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .nbe } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, + .{ ._, ._, .@"and", .dst0w, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + .{ ._, ._l, .sh, .dst0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .src0w, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .extra_temps = .{ + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .nbe } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, + .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + .{ ._, ._l, .sh, .dst0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .src0w, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_signed_int = 16 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0w, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0w, .src0w, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sh, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sh, .tmp0w, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0w, .src0w, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .word }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._l, .sa, .tmp0d, .uia(32, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .uia(32, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0w, .src0w, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sh, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .@"and", .tmp0d, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0w, .src0w, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_signed_int = 32 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .mut_mem, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._l, .sa, .dst0d, .src1b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .mut_mem, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._l, .sh, .dst0d, .src1b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_signed_int = 32 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_mut_gpr, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .add, .dst0d, .src0d, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_mut_gpr, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .add, .dst0d, .src0d, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .dword }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0d, .uia(32, .src0, .add_src1_sub_bit_size), ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .uia(32, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .src0d, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .nbe } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, + .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + .{ ._, ._l, .sh, .dst0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .src0d, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_signed_int = 32 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .src0d, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sh, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .src0d, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .dword }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._l, .sa, .tmp0d, .uia(32, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .uia(32, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .src0d, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._l, .sh, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .@"and", .tmp0d, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .exact_signed_int = 64 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .mut_mem, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._l, .sa, .dst0q, .src1b, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .mut_mem, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._l, .sh, .dst0q, .src1b, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .exact_signed_int = 64 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_mut_gpr, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .add, .dst0q, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_mut_gpr, .{ .imm = 1 }, .none } }, + }, + .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .add, .dst0q, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .qword }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .add_src1_sub_bit_size), ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._, .mov, .dst0q, .tmp0q, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0q, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .imm8, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .nbe } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax_shr_src1), ._, ._ }, + .{ ._, ._, .mov, .dst0q, .src0q, ._, ._ }, + .{ ._, ._, .@"and", .dst0q, .tmp0q, ._, ._ }, + .{ ._, ._l, .sh, .dst0q, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .src0q, .tmp0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .exact_signed_int = 64 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._l, .sa, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._, .mov, .dst0q, .tmp0q, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0q, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._l, .sh, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._, .mov, .dst0q, .tmp0q, ._, ._ }, + .{ ._, ._r, .sh, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0q, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .qword }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._l, .sa, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size), ._, ._ }, + .{ ._, ._, .mov, .dst0q, .tmp0q, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0q, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .byte }, .any }, + .patterns = &.{ + .{ .src = .{ .to_gpr, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .ne } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp1q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._l, .sh, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ }, + .{ ._, ._, .mov, .dst0q, .tmp0q, ._, ._ }, + .{ ._, ._r, .sh, .tmp0q, .src1b, ._, ._ }, + .{ ._, ._, .cmp, .tmp0q, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .sub, .tmp6d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._r, .sa, .tmp7q, .ui(63), ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._c, .de, .tmp6d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._r, .sa, .tmp7q, .ui(63), ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .sub, .tmp6d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._r, .sa, .tmp7q, .ui(63), ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._c, .de, .tmp6d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._r, .sa, .tmp7q, .ui(63), ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .@"test", .tmp4q, .tmp4q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .@"test", .tmp4q, .tmp4q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .@"test", .tmp4q, .tmp4q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .@"test", .tmp4q, .tmp4q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .sub, .tmp6d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._r, .sa, .tmp7q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._c, .de, .tmp6d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._r, .sa, .tmp7q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .sub, .tmp6d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._r, .sa, .tmp7q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._c, .de, .tmp6d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._r, .sa, .tmp7q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .@"test", .tmp4q, .tmp4q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .@"test", .tmp4q, .tmp4q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .@"test", .tmp4q, .tmp4q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .@"test", .tmp4q, .tmp4q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .sub, .tmp6d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._l, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp6q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp6q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._c, .de, .tmp6d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._l, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp6q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp6q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .sub, .tmp6d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._l, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp6q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp6q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._c, .de, .tmp6d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._l, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp6q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp6q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .bmi, .slow_incdec, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .andn, .tmp5q, .tmp2q, .tmp3q, ._ }, + .{ ._, ._, .@"and", .tmp2q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp2q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .bmi, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .andn, .tmp5q, .tmp2q, .tmp3q, ._ }, + .{ ._, ._, .@"and", .tmp2q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp2q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .@"and", .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .@"and", .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .bmi, .slow_incdec, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .andn, .tmp5q, .tmp2q, .tmp3q, ._ }, + .{ ._, ._, .@"and", .tmp2q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp2q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .bmi, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .andn, .tmp5q, .tmp2q, .tmp3q, ._ }, + .{ ._, ._, .@"and", .tmp2q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp2q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .@"and", .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-2, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp4q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -16), ._, ._ }, + .{ ._, ._, .@"and", .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .sub, .tmp6d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._l, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp6q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .ui(63), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._c, .de, .tmp6d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._l, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp6q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .ui(63), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .sub, .tmp6d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._l, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp6q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .ui(63), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.src0q, .add_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._ld, .sh, .tmp5q, .tmp4q, .src1b, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp7q, .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .leasi(.tmp2q, .@"8", .tmp6), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._c, .de, .tmp6d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp6q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp4q, ._, ._ }, + .{ ._, ._, .mov, .tmp4q, .tmp6q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp4q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp6q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .mov, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._l, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp6q, ._, ._ }, + .{ ._, ._, .xor, .tmp7q, .tmp6q, ._, ._ }, + .{ ._, ._r, .sa, .tmp6q, .ui(63), ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp7q, ._, ._ }, + .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp5q, .tmp6q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .bmi, .slow_incdec, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .andn, .tmp5q, .tmp2q, .tmp3q, ._ }, + .{ ._, ._, .@"and", .tmp2q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp2q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .bmi, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .andn, .tmp5q, .tmp2q, .tmp3q, ._ }, + .{ ._, ._, .@"and", .tmp2q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp2q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .@"and", .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .byte }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1b, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .@"and", .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .bmi, .slow_incdec, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .andn, .tmp5q, .tmp2q, .tmp3q, ._ }, + .{ ._, ._, .@"and", .tmp2q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp2q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .bmi, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp2q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .andn, .tmp5q, .tmp2q, .tmp3q, ._ }, + .{ ._, ._, .@"and", .tmp2q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp2q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._, .sub, .tmp5d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._nae, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._ae, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .@"and", .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ + .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } }, + .{ .unsigned_int = .word }, + .any, + }, + .patterns = &.{ + .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{ .mem, .{ .cc = .nz } }, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src1w, ._, ._ }, + .{ ._, ._, .mov, .tmp1d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, ._r, .sh, .tmp0d, .ui(6), ._, ._ }, + .{ ._, ._, .sub, .tmp1d, .tmp0d, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .lea(.tmp2q), ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._ld, .sh, .tmp4q, .tmp3q, .src1b, ._ }, + .{ ._, ._, .@"test", .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._z, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, + .{ .@"0:", ._, .@"or", .tmp4q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ }, + .{ ._, ._c, .de, .tmp5d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._s, .j, .@"1f", ._, ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .memsid(.dst0, .@"8", .tmp0, 8), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp5q, .memsi(.src0q, .@"8", .tmp1), ._, ._ }, + .{ ._, ._ld, .sh, .tmp3q, .tmp5q, .src1b, ._ }, + .{ ._, ._, .mov, .leasi(.tmp2q, .@"8", .tmp1), .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ .@"1:", ._l, .sh, .tmp3q, .src1b, ._, ._ }, + .{ .@"0:", ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp3q, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._ns, .j, .@"0b", ._, ._, ._ }, + .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, + .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ }, + .{ ._, ._, .@"and", .tmp3q, .tmp5q, ._, ._ }, + .{ ._, ._, .xor, .tmp5q, .tmp3q, ._, ._ }, + .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp3q, ._, ._ }, + .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ }, + } }, + } }) catch |err| switch (err) { + error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ + @tagName(air_tag), + ty_pl.ty.toType().fmt(pt), + ops[0].tracking(cg), + ops[1].tracking(cg), + }), + else => |e| return e, + }; + try res[0].withOverflow(&res[1], cg); + try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg); + }, .alloc => if (use_old) try cg.airAlloc(inst) else { const ty = air_datas[@intFromEnum(inst)].ty; const slot = try cg.tempInit(ty, .{ .lea_frame = .{ @@ -104574,7 +107910,6 @@ fn genSetReg( .none, .unreach, .dead, - .register_overflow, .elementwise_regs_then_frame, .reserved_frame, => unreachable, @@ -104886,6 +108221,39 @@ fn genSetReg( }, else => unreachable, }), + .register_overflow => |src_reg_ov| { + const ip = &zcu.intern_pool; + const first_ty: Type = .fromInterned(first_ty: switch (ip.indexToKey(ty.toIntern())) { + .tuple_type => |tuple_type| { + const tuple_field_types = tuple_type.types.get(ip); + assert(tuple_field_types.len == 2 and tuple_field_types[1] == .u1_type); + break :first_ty tuple_field_types[0]; + }, + .opt_type => |opt_child| { + assert(!ty.optionalReprIsPayload(zcu)); + break :first_ty opt_child; + }, + else => std.debug.panic("{s}: {}\n", .{ @src().fn_name, ty.fmt(pt) }), + }); + const first_size: u31 = @intCast(first_ty.abiSize(zcu)); + const frame_size = std.math.ceilPowerOfTwoAssert(u32, abi_size); + const frame_index = try self.allocFrameIndex(.init(.{ + .size = frame_size, + .alignment = .fromNonzeroByteUnits(frame_size), + })); + try self.asmMemoryRegister(.{ ._, .mov }, .{ + .base = .{ .frame = frame_index }, + .mod = .{ .rm = .{ .size = .fromSize(first_size) } }, + }, registerAlias(src_reg_ov.reg, first_size)); + try self.asmSetccMemory(src_reg_ov.eflags, .{ + .base = .{ .frame = frame_index }, + .mod = .{ .rm = .{ .size = .byte, .disp = first_size } }, + }); + try self.asmRegisterMemory(.{ ._, .mov }, registerAlias(dst_reg, abi_size), .{ + .base = .{ .frame = frame_index }, + .mod = .{ .rm = .{ .size = .fromSize(frame_size) } }, + }); + }, .register_mask => |src_reg_mask| { assert(src_reg_mask.reg.class() == .sse); const has_avx = self.hasFeature(.avx); @@ -115808,6 +119176,7 @@ const Select = struct { const Src = union(enum) { none, + imm: i16, imm8, imm16, imm32, @@ -115855,6 +119224,10 @@ const Select = struct { fn matches(src: Src, temp: Temp, cg: *CodeGen) bool { return switch (src) { .none => temp.tracking(cg).short == .none, + .imm => |specific_imm| switch (temp.tracking(cg).short) { + .immediate => |imm| @as(i64, @bitCast(imm)) == specific_imm, + else => false, + }, .imm8 => switch (temp.tracking(cg).short) { .immediate => |imm| std.math.cast(u8, imm) != null or std.math.cast(i8, @as(i64, @bitCast(imm))) != null, @@ -115965,7 +119338,7 @@ const Select = struct { fn convert(src: Src, temp: *Temp, cg: *CodeGen) InnerError!bool { return switch (src) { - .none, .imm8, .imm16, .imm32, .simm32 => false, + .none, .imm, .imm8, .imm16, .imm32, .simm32 => false, .mem, .to_mem => try temp.toBase(false, cg), .mut_mem, .to_mut_mem => try temp.toBase(true, cg), .to_reg => |reg| try temp.toReg(reg, cg), @@ -116414,10 +119787,12 @@ const Select = struct { dst0_elem_size, src0_elem_size_mul_src1, src1, + src1_sub_bit_size, log2_src0_elem_size, smin, smax, umax, + umax_shr_src1, repeat, }, op: enum(u2) { mul, div, div_8_down, rem_8_mul }, @@ -116473,6 +119848,7 @@ const Select = struct { const add_src1_div_8_down_4: Adjust = .{ .sign = .pos, .lhs = .src1, .op = .div_8_down, .rhs = .@"4" }; const add_src1_rem_32: Adjust = .{ .sign = .pos, .lhs = .src1, .op = .rem_8_mul, .rhs = .@"4" }; const add_src1_rem_64: Adjust = .{ .sign = .pos, .lhs = .src1, .op = .rem_8_mul, .rhs = .@"8" }; + const add_src1_sub_bit_size: Adjust = .{ .sign = .pos, .lhs = .src1_sub_bit_size, .op = .mul, .rhs = .@"1" }; const add_log2_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .log2_src0_elem_size, .op = .mul, .rhs = .@"1" }; const add_dst0_elem_size: Adjust = .{ .sign = .pos, .lhs = .dst0_elem_size, .op = .mul, .rhs = .@"1" }; const add_elem_limbs: Adjust = .{ .sign = .pos, .lhs = .elem_limbs, .op = .mul, .rhs = .@"1" }; @@ -116480,6 +119856,7 @@ const Select = struct { const sub_smin: Adjust = .{ .sign = .neg, .lhs = .smin, .op = .mul, .rhs = .@"1" }; const add_umax: Adjust = .{ .sign = .pos, .lhs = .umax, .op = .mul, .rhs = .@"1" }; const sub_umax: Adjust = .{ .sign = .neg, .lhs = .umax, .op = .mul, .rhs = .@"1" }; + const add_umax_shr_src1: Adjust = .{ .sign = .pos, .lhs = .umax_shr_src1, .op = .mul, .rhs = .@"1" }; const repeat: Adjust = .{ .sign = .pos, .lhs = .repeat, .op = .mul, .rhs = .@"1" }; }; const Ref = enum(u5) { @@ -117182,6 +120559,8 @@ const Select = struct { .src0_elem_size_mul_src1 => @intCast(Select.Operand.Ref.src0.typeOf(s).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu) * Select.Operand.Ref.src1.valueOf(s).immediate), .src1 => @intCast(Select.Operand.Ref.src1.valueOf(s).immediate), + .src1_sub_bit_size => @as(SignedImm, @intCast(Select.Operand.Ref.src1.valueOf(s).immediate)) - + @as(SignedImm, @intCast(op.flags.base.ref.typeOf(s).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu))), .log2_src0_elem_size => @intCast(std.math.log2(Select.Operand.Ref.src0.typeOf(s).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu))), .smin => @as(SignedImm, std.math.minInt(SignedImm)) >> @truncate( -%op.flags.base.ref.typeOf(s).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), @@ -117192,6 +120571,9 @@ const Select = struct { .umax => @bitCast(@as(UnsignedImm, std.math.maxInt(UnsignedImm)) >> @truncate( -%op.flags.base.ref.typeOf(s).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), )), + .umax_shr_src1 => @bitCast(@as(UnsignedImm, std.math.maxInt(UnsignedImm)) >> @truncate( + Select.Operand.Ref.src1.valueOf(s).immediate -% op.flags.base.ref.typeOf(s).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), + )), .repeat => switch (SignedImm) { else => unreachable, i64 => return @as(i64, op.imm) << 32 | @as(u32, @bitCast(op.imm)), diff --git a/test/behavior/x86_64/binary.zig b/test/behavior/x86_64/binary.zig index 4e749304c7..7e1b0d9bd6 100644 --- a/test/behavior/x86_64/binary.zig +++ b/test/behavior/x86_64/binary.zig @@ -5477,6 +5477,16 @@ test mulWithOverflow { try test_mul_with_overflow.testInts(); } +inline fn shlWithOverflow(comptime Type: type, lhs: Type, rhs: Type) struct { Type, u1 } { + const bit_cast_rhs: @Type(.{ .int = .{ .signedness = .unsigned, .bits = @bitSizeOf(Type) } }) = @bitCast(rhs); + const truncate_rhs: Log2Int(Type) = @truncate(bit_cast_rhs); + return @shlWithOverflow(lhs, if (comptime cast(Log2Int(Type), @bitSizeOf(Type))) |bits| truncate_rhs % bits else truncate_rhs); +} +test shlWithOverflow { + const test_shl_with_overflow = binary(shlWithOverflow, .{}); + try test_shl_with_overflow.testInts(); +} + inline fn equal(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs == rhs) { return lhs == rhs; }