Commit 932298679f
Changed files (2)
src
arch
x86_64
test
behavior
x86_64
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),
@@ -32923,455 +32913,3801 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
} },
}, .{
- .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .adx, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .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 = .{ .reg = .rdx } },
+ .{ .type = .isize, .kind = .{ .reg = .rcx } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, ._z, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .leaad(.tmp0, .sub_src0_size, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ .@"1:", ._x, .mul, .tmp8q, .tmp7q, .leai(.tmp1q, .tmp5), ._ },
+ .{ ._, ._x, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp5, .add_src0_size, -8), .tmp7q, ._, ._ },
+ .{ ._, ._rcxz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .memia(.dst0q, .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .lead(.tmp5, 8), ._, ._ },
+ .{ ._, ._mp, .j, .@"1b", ._, ._, ._ },
+ .{ .@"2:", ._, .mov, .memi(.dst0q, .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp4d, .tmp0d, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._x, .adc, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leai(.tmp1q, .tmp4), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp4d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ } }) 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);
+ },
+ .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 = .qword } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .unsigned_int = .byte },
.any,
},
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
+ .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .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 = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .{ .cc = .nz } },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .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, ._, ._ },
- .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
- .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
- .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
- .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
- .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
- .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
- .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
- .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
- .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
- .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
- .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
- .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
- .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
- .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
- .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
- .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ .{ ._, ._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", null, null, null },
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
.src_constraints = .{
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .unsigned_int = .byte },
.any,
},
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
+ .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .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 = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .{ .cc = .nz } },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .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, ._, ._ },
- .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
- .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
- .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
- .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
- .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
- .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
- .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
- .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
- .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
- .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
- .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
- .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
- .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
- .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
- .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
- .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
- .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ .{ ._, ._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", .bmi2, .adx, null },
+ .required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{
.{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .unsigned_int = .byte },
.any,
},
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
+ .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .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 = .{ .reg = .rdx } },
- .{ .type = .isize, .kind = .{ .reg = .rcx } },
- .{ .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 = &.{
- .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .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, ._, ._ },
- .{ .@"0:", ._, .xor, .tmp4d, .tmp4d, ._, ._ },
- .{ ._, ._, .@"or", .tmp4q, .memi(.src0q, .tmp0), ._, ._ },
- .{ ._, ._z, .j, .@"2f", ._, ._, ._ },
- .{ ._, ._, .lea, .tmp5p, .leaad(.tmp0, .sub_src0_size, 8), ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ .@"1:", ._x, .mul, .tmp8q, .tmp7q, .leai(.tmp1q, .tmp5), ._ },
- .{ ._, ._x, .adc, .tmp7q, .tmp6q, ._, ._ },
- .{ ._, ._, .mov, .memiad(.dst0q, .tmp5, .add_src0_size, -8), .tmp7q, ._, ._ },
- .{ ._, ._rcxz, .j, .@"1f", ._, ._, ._ },
- .{ ._, ._x, .ado, .tmp8q, .memia(.dst0q, .tmp5, .add_src0_size), ._, ._ },
- .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
- .{ ._, ._, .lea, .tmp5p, .lead(.tmp5, 8), ._, ._ },
- .{ ._, ._mp, .j, .@"1b", ._, ._, ._ },
- .{ .@"2:", ._, .mov, .memi(.dst0q, .tmp0), .tmp4q, ._, ._ },
- .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
- .{ .@"1:", ._, .mov, .tmp4d, .tmp0d, ._, ._ },
- .{ ._, ._x, .ado, .tmp8q, .tmp3q, ._, ._ },
- .{ ._, ._x, .adc, .tmp8q, .tmp3q, ._, ._ },
- .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
- .{ .@"1:", ._, .@"or", .tmp8q, .leai(.tmp1q, .tmp4), ._, ._ },
- .{ .@"2:", ._, .sub, .tmp4d, .si(8), ._, ._ },
- .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
- .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
- .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
- .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
- .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._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", .bmi2, .slow_incdec, null },
+ .required_features = .{ .@"64bit", .bmi, .slow_incdec, null },
.src_constraints = .{
.{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .unsigned_int = .word },
.any,
},
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
+ .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .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 = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .{ .type = .u8, .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 = &.{
- .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .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, ._, ._ },
- .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
- .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
- .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
- .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
- .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
- .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
- .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
- .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
- .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
- .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
- .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
- .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
- .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
- .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._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, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
- .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
- .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .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", .bmi2, null, null },
+ .required_features = .{ .@"64bit", .bmi, null, null },
.src_constraints = .{
.{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .unsigned_int = .word },
.any,
},
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
+ .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .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 = .isize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
- .{ .type = .u8, .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 = &.{
- .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .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, ._, ._ },
- .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
- .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
- .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
- .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
- .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
- .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
- .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
- .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
- .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
- .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
- .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
- .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
- .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
- .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._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, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
- .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
- .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .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 } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .unsigned_int = .word },
.any,
},
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
+ .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .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 = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .{ .cc = .nz } },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .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, ._, ._ },
- .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
- .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
- .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
- .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
- .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
- .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
- .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
- .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
- .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
- .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
- .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
- .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
- .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._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, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
- .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
- .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .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 } },
- .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .unsigned_int = .word },
.any,
},
.patterns = &.{
- .{ .src = .{ .to_mem, .to_mem, .none } },
+ .{ .src = .{ .to_mem, .{ .to_reg = .cl }, .none } },
},
.extra_temps = .{
- .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .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 = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u64, .kind = .{ .reg = .rax } },
- .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
.unused,
.unused,
},
.dst_temps = .{ .mem, .{ .cc = .nz } },
.clobbers = .{ .eflags = true },
.each = .{ .once = &.{
- .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
- .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
- .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
- .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .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, ._, ._ },
- .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
- .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
- .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
- .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
- .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
- .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
- .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
- .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
- .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
- .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
- .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
- .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
- .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
- .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
- .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
- .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
- .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
- .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
- .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
- .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
- .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
- .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._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, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
- .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
- .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
- .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
- .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
- .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .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} {} {} {}", .{
@@ -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)),
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;
}