x86_64: rewrite scalar @shlWithOverflow

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