commit c82e1fe880629beea5660c675cfc698807205601 (tree)
parent 9e21ba12d55c638cbc4898ae0f88f63821004f74
Author: Jacob Young <15544577+jacobly0@users.noreply.github.com>
Date: Fri, 11 Apr 2025 05:21:44 -0400
Merge pull request #23355 from jacobly0/x86_64-rewrite
x86_64: start rewriting overflow operations
Diffstat:
15 files changed, 6026 insertions(+), 601 deletions(-)
diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig
@@ -8854,10 +8854,10 @@ fn asmExpr(
return astgen.failNode(node, "assembly expression with no output must be marked volatile", .{});
}
}
- if (full.outputs.len > 32) {
- return astgen.failNode(full.outputs[32], "too many asm outputs", .{});
+ if (full.outputs.len >= 16) {
+ return astgen.failNode(full.outputs[16], "too many asm outputs", .{});
}
- var outputs_buffer: [32]Zir.Inst.Asm.Output = undefined;
+ var outputs_buffer: [15]Zir.Inst.Asm.Output = undefined;
const outputs = outputs_buffer[0..full.outputs.len];
var output_type_bits: u32 = 0;
@@ -8893,10 +8893,10 @@ fn asmExpr(
}
}
- if (full.inputs.len > 32) {
+ if (full.inputs.len >= 32) {
return astgen.failNode(full.inputs[32], "too many asm inputs", .{});
}
- var inputs_buffer: [32]Zir.Inst.Asm.Input = undefined;
+ var inputs_buffer: [31]Zir.Inst.Asm.Input = undefined;
const inputs = inputs_buffer[0..full.inputs.len];
for (full.inputs, 0..) |input_node, i| {
@@ -8912,7 +8912,7 @@ fn asmExpr(
};
}
- var clobbers_buffer: [32]u32 = undefined;
+ var clobbers_buffer: [63]u32 = undefined;
var clobber_i: usize = 0;
if (full.first_clobber) |first_clobber| clobbers: {
// asm ("foo" ::: "a", "b")
@@ -12932,14 +12932,14 @@ const GenZir = struct {
}
gz.astgen.extra.appendSliceAssumeCapacity(args.clobbers);
- // * 0b00000000_000XXXXX - `outputs_len`.
- // * 0b000000XX_XXX00000 - `inputs_len`.
- // * 0b0XXXXX00_00000000 - `clobbers_len`.
+ // * 0b00000000_0000XXXX - `outputs_len`.
+ // * 0b0000000X_XXXX0000 - `inputs_len`.
+ // * 0b0XXXXXX0_00000000 - `clobbers_len`.
// * 0bX0000000_00000000 - is volatile
- const small: u16 = @as(u16, @intCast(args.outputs.len)) |
- @as(u16, @intCast(args.inputs.len << 5)) |
- @as(u16, @intCast(args.clobbers.len << 10)) |
- (@as(u16, @intFromBool(args.is_volatile)) << 15);
+ const small: u16 = @as(u16, @as(u4, @intCast(args.outputs.len))) << 0 |
+ @as(u16, @as(u5, @intCast(args.inputs.len))) << 4 |
+ @as(u16, @as(u6, @intCast(args.clobbers.len))) << 9 |
+ @as(u16, @intFromBool(args.is_volatile)) << 15;
const new_index: Zir.Inst.Index = @enumFromInt(astgen.instructions.len);
astgen.instructions.appendAssumeCapacity(.{
diff --git a/src/Sema.zig b/src/Sema.zig
@@ -16661,9 +16661,9 @@ fn zirAsm(
const extra = sema.code.extraData(Zir.Inst.Asm, extended.operand);
const src = block.nodeOffset(extra.data.src_node);
const ret_ty_src = block.src(.{ .node_offset_asm_ret_ty = extra.data.src_node });
- const outputs_len: u5 = @truncate(extended.small);
- const inputs_len: u5 = @truncate(extended.small >> 5);
- const clobbers_len: u5 = @truncate(extended.small >> 10);
+ const outputs_len: u4 = @truncate(extended.small);
+ const inputs_len: u5 = @truncate(extended.small >> 4);
+ const clobbers_len: u6 = @truncate(extended.small >> 9);
const is_volatile = @as(u1, @truncate(extended.small >> 15)) != 0;
const is_global_assembly = sema.func_index == .none;
const zir_tags = sema.code.instructions.items(.tag);
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
@@ -83,7 +83,6 @@ end_di_column: u32,
epilogue_relocs: std.ArrayListUnmanaged(Mir.Inst.Index) = .empty,
reused_operands: std.StaticBitSet(Liveness.bpi - 1) = undefined,
-const_tracking: ConstTrackingMap = .empty,
inst_tracking: InstTrackingMap = .empty,
// Key is the block instruction
@@ -926,7 +925,6 @@ pub fn generate(
while (block_it.next()) |block| block.deinit(gpa);
function.blocks.deinit(gpa);
function.inst_tracking.deinit(gpa);
- function.const_tracking.deinit(gpa);
function.epilogue_relocs.deinit(gpa);
function.mir_instructions.deinit(gpa);
function.mir_extra.deinit(gpa);
@@ -2418,7 +2416,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
}
fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
- @setEvalBranchQuota(13_900);
+ @setEvalBranchQuota(15_100);
const pt = cg.pt;
const zcu = pt.zcu;
const ip = &zcu.intern_pool;
@@ -2459,9 +2457,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.mul_sat => try cg.airMulSat(inst),
.shl_sat => try cg.airShlSat(inst),
- .add_with_overflow => try cg.airAddSubWithOverflow(inst),
- .sub_with_overflow => try cg.airAddSubWithOverflow(inst),
- .mul_with_overflow => try cg.airMulWithOverflow(inst),
.shl_with_overflow => try cg.airShlWithOverflow(inst),
.bitcast => try cg.airBitCast(inst),
@@ -28019,6 +28014,5377 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
};
try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
},
+ .add_with_overflow => |air_tag| if (use_old) try cg.airAddSubWithOverflow(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.airAddSubWithOverflow(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 }, .{ .exact_signed_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .imm8, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0b, .src1b, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 8 }, .{ .exact_unsigned_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .imm8, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0b, .src1b, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .imm8, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i8, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .po } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0b, .src1b, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._l, .sa, .dst0b, .uia(8, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0b, .uia(8, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .@"test", .tmp0b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .imm8, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .b } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0b, .src1b, ._, ._ },
+ .{ ._, ._, .@"and", .dst0b, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .cmp, .dst0b, .src1b, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_signed_int = 16 }, .{ .exact_signed_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0w, .src1w, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .{ .exact_unsigned_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0w, .src1w, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._l, .ro, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0d, .ui(1), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._l, .ro, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0d, .ui(1), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .b } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._, .@"and", .dst0w, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .cmp, .dst0w, .src1w, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .b } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .@"and", .dst0w, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .cmp, .dst0w, .src1w, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .b } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .cmp, .dst0w, .src1w, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_signed_int = 32 }, .{ .exact_signed_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .imm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .{ .exact_unsigned_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .imm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .exact_signed_int = 31 }, .{ .exact_signed_int = 31 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .imm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ui(1), ._, ._ },
+ .{ ._, ._, .add, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._rx, .sa, .dst0d, .dst0d, .tmp0d, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .imm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._l, .ro, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0d, .ui(1), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .imm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .b } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .cmp, .dst0d, .src1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_signed_int = 64 }, .{ .exact_signed_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .{ .exact_unsigned_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .exact_signed_int = 63 }, .{ .exact_signed_int = 63 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ui(1), ._, ._ },
+ .{ ._, ._, .add, .dst0q, .dst0q, ._, ._ },
+ .{ ._, ._rx, .sa, .dst0q, .dst0q, .tmp0q, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._l, .ro, .dst0q, .uia(64, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .uia(64, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0q, .ui(1), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .b } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .add, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .bzhi, .dst0q, .dst0q, .tmp0q, ._ },
+ .{ ._, ._, .cmp, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .{ .cc = .b } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .add, .src0q, .src1q, ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
+ .{ ._, ._, .cmp, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .none },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._o, .set, .mema(.dst0b, .add_src0_size), ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_src0_size), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._l, .ro, .tmp1q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0q, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .dst1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .adc, .dst1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -16), .dst1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .adc, .dst1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .dst1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .dst1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .dst1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .adc, .dst1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -16), .dst1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .adc, .dst1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .dst1q, ._, ._ },
+ .{ ._, ._r, .sh, .dst1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._l, .ro, .tmp1q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0q, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .dst1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .dst1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .dst1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .adc, .dst1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .dst1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .dst1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .dst1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .dst1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .dst1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .dst1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .adc, .dst1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .dst1q, ._, ._ },
+ .{ ._, ._r, .sh, .dst1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ } },
+ } }) 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);
+ },
+ .sub_with_overflow => |air_tag| if (use_old) try cg.airAddSubWithOverflow(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.airAddSubWithOverflow(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 }, .{ .exact_signed_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0b, .src1b, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 8 }, .{ .exact_unsigned_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0b, .src1b, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i8, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .po } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0b, .src1b, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._l, .sa, .dst0b, .uia(8, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0b, .uia(8, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .@"test", .tmp0b, .sia(-1 << 7, .src0, .sub_smin), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .immut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst1d, .dst1d, ._, ._ },
+ .{ ._, ._, .sub, .dst0b, .src1b, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0b, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .to_mut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .ref = .src1 } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0b, .src1b, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0b, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_signed_int = 16 }, .{ .exact_signed_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0w, .src1w, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .{ .exact_unsigned_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm8, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0w, .src1w, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._l, .ro, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0d, .ui(1), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._l, .ro, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0d, .ui(1), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .immut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst1d, .dst1d, ._, ._ },
+ .{ ._, ._, .sub, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0w, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .to_mut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .ref = .src1 } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0w, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm16, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .immut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst1d, .dst1d, ._, ._ },
+ .{ ._, ._, .sub, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .to_mut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .ref = .src1 } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0w, .src1w, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_signed_int = 32 }, .{ .exact_signed_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0d, .src1d, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .{ .exact_unsigned_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0d, .src1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .bmi2, null, null, null },
+ .src_constraints = .{ .{ .exact_signed_int = 31 }, .{ .exact_signed_int = 31 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ui(1), ._, ._ },
+ .{ ._, ._, .add, .dst0d, .dst0d, ._, ._ },
+ .{ ._, ._rx, .sa, .dst0d, .dst0d, .tmp0d, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._l, .ro, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0d, .ui(1), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .imm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .immut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst1d, .dst1d, ._, ._ },
+ .{ ._, ._, .sub, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .to_mut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .ref = .src1 } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0d, .src1d, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_signed_int = 64 }, .{ .exact_signed_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .{ .exact_unsigned_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .exact_signed_int = 63 }, .{ .exact_signed_int = 63 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u8, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ui(1), ._, ._ },
+ .{ ._, ._, .add, .dst0q, .dst0q, ._, ._ },
+ .{ ._, ._rx, .sa, .dst0q, .dst0q, .tmp0q, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .sub, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._l, .ro, .dst0q, .uia(64, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .uia(64, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0q, .ui(1), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .immut_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst1d, .dst1d, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .sub, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .bzhi, .dst0q, .dst0q, .tmp0q, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .to_mut_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .ref = .src1 } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .sub, .dst0q, .src1q, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .bzhi, .dst0q, .dst0q, .tmp0q, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .simm32, .none } },
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .to_mut_gpr, .immut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .{ .rc = .general_purpose } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .dst1d, .dst1d, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .sub, .src0q, .src1q, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .to_mut_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .rc = .general_purpose }, .{ .ref = .src1 } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .sub, .src0q, .src1q, ._, ._ },
+ .{ ._, ._c, .set, .dst1b, ._, ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .src0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .none },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._o, .set, .mema(.dst0b, .add_src0_size), ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsia(.src0q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsia(.src1q, .@"8", .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_src0_size), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._l, .ro, .tmp1q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0q, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .none },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._c, .set, .mema(.dst0b, .add_src0_size), ._, ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .none },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(2, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -16), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -16), ._, ._ },
+ .{ ._, ._c, .set, .mema(.dst0b, .add_src0_size), ._, ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .o } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._l, .ro, .tmp1q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .ro, .tmp0q, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .none },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._c, .set, .mema(.dst0b, .add_src0_size), ._, ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .none },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._c, .cl, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp1q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._c, .set, .mema(.dst0b, .add_src0_size), ._, ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ } },
+ } }) 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);
+ },
+ .mul_with_overflow => |air_tag| if (use_old) try cg.airMulWithOverflow(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.airMulWithOverflow(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 }, .{ .exact_signed_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .al }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .al }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .al }, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .src1b, ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 8 }, .{ .exact_unsigned_int = 8 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .al }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .al }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .al }, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mul, .src1b, ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .byte }, .{ .signed_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .al }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .al }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .al }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .ne } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .src1b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._l, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .cmp, .dst0w, .tmp0w, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .byte }, .{ .unsigned_int = .byte }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .al }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .al }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .al }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .nbe } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mul, .src1b, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .dst0d, ._, ._ },
+ .{ ._, ._, .@"and", .dst0b, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .cmp, .tmp0w, .ua(.src0, .add_umax), ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_signed_int = 16 }, .{ .exact_signed_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .imm16, .none } },
+ .{ .src = .{ .imm16, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_gpr, .imm16, .none } },
+ .{ .src = .{ .imm16, .to_gpr, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .dst0w, .src0w, .src1w, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_signed_int = 16 }, .{ .exact_signed_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .dst0w, .src1w, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 16 }, .{ .exact_unsigned_int = 16 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .ax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .ax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .ax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u16, .kind = .{ .reg = .dx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .mul, .src1w, ._, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .signed_int = .word }, .{ .signed_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .ax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .ax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .ax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .ne } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, .i_, .mul, .src1w, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp0d, .ui(16), ._, ._ },
+ .{ ._, ._, .mov, .tmp0w, .dst0w, ._, ._ },
+ .{ ._, ._l, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0d, .uia(32, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .cmp, .dst0d, .tmp0d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .fast_imm16, null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .ax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .ax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .ax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u16, .kind = .{ .reg = .dx } },
+ .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .mul, .src1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .dst0d, ._, ._ },
+ .{ ._, ._, .@"and", .dst0w, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1w, .uia(std.math.maxInt(u16), .src0, .sub_umax), ._, ._ },
+ .{ ._, ._, .@"or", .tmp1w, .tmp0w, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .word }, .{ .unsigned_int = .word }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .ax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .ax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .ax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u16, .kind = .{ .reg = .dx } },
+ .{ .type = .u16, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .mul, .src1w, ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp1d, .dst0d, ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .tmp1d, .uia(std.math.maxInt(u16), .src0, .sub_umax), ._, ._ },
+ .{ ._, ._, .@"or", .tmp1d, .tmp0d, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_signed_int = 32 }, .{ .exact_signed_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .imm32, .none } },
+ .{ .src = .{ .imm32, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_gpr, .imm32, .none } },
+ .{ .src = .{ .imm32, .to_gpr, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .dst0d, .src0d, .src1d, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_signed_int = 32 }, .{ .exact_signed_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .dst0d, .src1d, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .exact_unsigned_int = 32 }, .{ .exact_unsigned_int = 32 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .eax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .eax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .eax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mul, .src1d, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .signed_int = .dword }, .{ .signed_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .eax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .eax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .eax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .ne } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .src1d, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp0q, .ui(32), ._, ._ },
+ .{ ._, ._, .@"or", .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._l, .sa, .dst0q, .uia(64, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .uia(64, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .cmp, .dst0q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .src_constraints = .{ .{ .unsigned_int = .dword }, .{ .unsigned_int = .dword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .eax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .eax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .eax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u32, .kind = .{ .ref = .src0 } },
+ .{ .type = .u32, .kind = .{ .reg = .edx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } }, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mul, .src1d, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0d, .tmp0d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp0d, .sa(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .@"and", .dst0d, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"or", .tmp0d, .tmp1d, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_signed_int = 64 }, .{ .exact_signed_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .mem, .simm32, .none } },
+ .{ .src = .{ .simm32, .mem, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_gpr, .simm32, .none } },
+ .{ .src = .{ .simm32, .to_gpr, .none }, .commute = .{ 0, 1 } },
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .dst0q, .src0q, .src1d, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_signed_int = 64 }, .{ .exact_signed_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .to_mut_gpr, .mem, .none } },
+ .{ .src = .{ .mem, .to_mut_gpr, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .to_mut_gpr, .to_gpr, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .dst0q, .src1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_unsigned_int = 64 }, .{ .exact_unsigned_int = 64 }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .eax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .eax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .eax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .c } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mul, .src1q, ._, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .signed_int = .qword }, .{ .signed_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .rax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .rax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .rax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .i64, .kind = .{ .reg = .rdx } },
+ .{ .type = .i64, .kind = .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, .i_, .mul, .src1q, ._, ._, ._ },
+ .{ ._, ._, .sbb, .tmp0d, .tmp0d, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .dst0q, ._, ._ },
+ .{ ._, ._l, .sa, .dst0q, .uia(64, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._r, .sa, .dst0q, .uia(64, .src0, .sub_bit_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .dst0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp1q, .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .rax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .rax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .rax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u64, .kind = .{ .ref = .src0 } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } }, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mul, .src1q, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0d, .ua(.src0, .add_bit_size), ._, ._ },
+ .{ ._, ._, .bzhi, .dst0q, .tmp0q, .dst0q, ._ },
+ .{ ._, ._, .xor, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp0q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .unsigned_int = .qword }, .{ .unsigned_int = .qword }, .any },
+ .patterns = &.{
+ .{ .src = .{ .{ .to_reg = .rax }, .mem, .none } },
+ .{ .src = .{ .mem, .{ .to_reg = .rax }, .none }, .commute = .{ 0, 1 } },
+ .{ .src = .{ .{ .to_reg = .rax }, .to_gpr, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u64, .kind = .{ .ref = .src0 } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .mut_rc = .{ .ref = .src1, .rc = .general_purpose } }, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mul, .src1q, ._, ._, ._ },
+ .{ ._, ._, .mov, .dst0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .@"and", .dst0q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp0q, .dst0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp0q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp8q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._nz, .cmov, .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp8q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._nz, .cmov, .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp8q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._nz, .cmov, .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp8q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._nz, .cmov, .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp8q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._nz, .cmov, .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp8q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._nz, .cmov, .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp8q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._nz, .cmov, .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .cmov, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp8q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._nz, .cmov, .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_signed_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .lea, .tmp2p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .mov, .tmp3q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._r, .sa, .tmp1q, .ui(63), ._, ._ },
+ .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp5p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .xor, .tmp8d, .tmp8d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp1q, ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp6q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp10q, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp7b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp10q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp9q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp9q, .tmp3q, ._, ._ },
+ .{ ._, ._, .mul, .tmp6q, ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp7b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp9q, .tmp8q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp5, .add_src0_size), .tmp9q, ._, ._ },
+ .{ ._, ._c, .in, .tmp5p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp10q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp6q, .leasi(.tmp2q, .@"8", .tmp5), ._, ._ },
+ .{ ._, ._, .xor, .tmp6q, .tmp3q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp10q, .tmp6q, ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp5d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp10q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp2p, .lead(.tmp2, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .sia(1, .src0, .sub_size_div_8), ._, ._ },
+ .{ ._, ._, .mov, .tmp5q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .cmp, .tmp1b, .tmp3b, ._, ._ },
+ .{ ._, ._e, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp2q, .memad(.src1, .add_size, -8), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .leasi(.tmp2q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8d, .tmp7d, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .lea(.tmp2q), ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"test", .tmp1b, .tmp1b, ._, ._ },
+ .{ ._, ._z, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._c, .st, ._, ._, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp8q, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src0q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._, .adc, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memsiad(.src1q, .@"8", .tmp0, .add_size, -8), ._, ._ },
+ .{ ._, ._r, .rc, .tmp6b, .ui(1), ._, ._ },
+ .{ ._, ._, .mov, .memsiad(.dst0q, .@"8", .tmp0, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._c, .in, .tmp0q, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp8q, .tmp5q, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src0q, .add_size, -8), ._, ._ },
+ .{ ._, ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ ._, ._, .xor, .tmp7d, .tmp7d, ._, ._ },
+ .{ ._, ._, .add, .tmp6b, .tmp6b, ._, ._ },
+ .{ ._, ._, .sbb, .tmp8q, .memad(.src1q, .add_size, -8), ._, ._ },
+ .{ .@"2:", ._o, .set, .tmp7b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp8q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4b, .tmp7b, ._, ._ },
+ .{ .@"1:", ._r, .sh, .tmp5q, .ui(63), ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp5q, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._l, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .uia(64, .src0, .sub_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .xor, .tmp1q, .tmp0q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .adx, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .isize, .kind = .{ .reg = .rcx } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, ._z, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .leaad(.tmp0, .sub_src0_size, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ .@"1:", ._x, .mul, .tmp8q, .tmp7q, .leai(.tmp1q, .tmp5), ._ },
+ .{ ._, ._x, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp5, .add_src0_size, -8), .tmp7q, ._, ._ },
+ .{ ._, ._rcxz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .memia(.dst0q, .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .lead(.tmp5, 8), ._, ._ },
+ .{ ._, ._mp, .j, .@"1b", ._, ._, ._ },
+ .{ .@"2:", ._, .mov, .memi(.dst0q, .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp4d, .tmp0d, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._x, .adc, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leaid(.tmp1q, .tmp4, 8), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp4d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp2q, .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp2q, .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp2q, .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp2q, .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp2q, .tmp2q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .adx, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .isize, .kind = .{ .reg = .rcx } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, ._z, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .leaad(.tmp0, .sub_src0_size, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ .@"1:", ._x, .mul, .tmp8q, .tmp7q, .leai(.tmp1q, .tmp5), ._ },
+ .{ ._, ._x, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp5, .add_src0_size, -8), .tmp7q, ._, ._ },
+ .{ ._, ._rcxz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .memia(.dst0q, .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .lead(.tmp5, 8), ._, ._ },
+ .{ ._, ._mp, .j, .@"1b", ._, ._, ._ },
+ .{ .@"2:", ._, .mov, .memi(.dst0q, .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp4d, .tmp0d, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._x, .adc, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leai(.tmp1q, .tmp4), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp4d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .adx, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .isize, .kind = .{ .reg = .rcx } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, ._z, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .leaad(.tmp0, .sub_src0_size, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ .@"1:", ._x, .mul, .tmp8q, .tmp7q, .leai(.tmp1q, .tmp5), ._ },
+ .{ ._, ._x, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp5, .add_src0_size, -8), .tmp7q, ._, ._ },
+ .{ ._, ._rcxz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .memia(.dst0q, .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .lead(.tmp5, 8), ._, ._ },
+ .{ ._, ._mp, .j, .@"1b", ._, ._, ._ },
+ .{ .@"2:", ._, .mov, .memi(.dst0q, .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp4d, .tmp0d, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._x, .adc, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leai(.tmp1q, .tmp4), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp4d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .qword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -16), ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -16), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .ui(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .adx, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .isize, .kind = .{ .reg = .rcx } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .mem(.src1), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ },
+ .{ .@"0:", ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memi(.src0q, .tmp0), ._, ._ },
+ .{ ._, ._z, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .leaad(.tmp0, .sub_src0_size, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ .@"1:", ._x, .mul, .tmp8q, .tmp7q, .leai(.tmp1q, .tmp5), ._ },
+ .{ ._, ._x, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memiad(.dst0q, .tmp5, .add_src0_size, -8), .tmp7q, ._, ._ },
+ .{ ._, ._rcxz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .memia(.dst0q, .tmp5, .add_src0_size), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._, .lea, .tmp5p, .lead(.tmp5, 8), ._, ._ },
+ .{ ._, ._mp, .j, .@"1b", ._, ._, ._ },
+ .{ .@"2:", ._, .mov, .memi(.dst0q, .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .mov, .tmp4d, .tmp0d, ._, ._ },
+ .{ ._, ._x, .ado, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._x, .adc, .tmp8q, .tmp3q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leai(.tmp1q, .tmp4), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp4d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, .slow_incdec, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .bmi2, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ .@"2:", ._x, .mul, .tmp8q, .tmp7q, .leasi(.tmp1q, .@"8", .tmp3), ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp5q, .tmp8q, ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp5q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp5q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0d, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .bzhi, .tmp0q, .tmp1q, .tmp0q, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", .slow_incdec, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._, .sub, .tmp3d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ },
+ .{ ._, ._ae, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .{ .remainder_unsigned_int = .{ .of = .xword, .is = .xword } },
+ .any,
+ },
+ .patterns = &.{
+ .{ .src = .{ .to_mem, .to_mem, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u64, .kind = .{ .reg = .rax } },
+ .{ .type = .u64, .kind = .{ .reg = .rdx } },
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .mem, .{ .cc = .nz } },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0d, .sia(-1, .src0, .add_size_div_8), ._, ._ },
+ .{ ._, ._, .lea, .tmp1p, .memd(.src1, 8), ._, ._ },
+ .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
+ .{ .@"0:", ._, .lea, .tmp3p, .leaa(.tmp0, .sub_src0_size_div_8), ._, ._ },
+ .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ },
+ .{ ._, ._, .xor, .tmp5d, .tmp5d, ._, ._ },
+ .{ ._, ._, .xor, .tmp6d, .tmp6d, ._, ._ },
+ .{ ._, ._, .@"or", .tmp4q, .memsi(.src0q, .@"8", .tmp0), ._, ._ },
+ .{ ._, ._nz, .j, .@"2f", ._, ._, ._ },
+ .{ ._, ._, .mov, .memsi(.dst0q, .@"8", .tmp0), .tmp4q, ._, ._ },
+ .{ ._, ._mp, .j, .@"3f", ._, ._, ._ },
+ .{ .@"1:", ._, .adc, .tmp8q, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), ._, ._ },
+ .{ ._, ._, .adc, .tmp5b, .si(0), ._, ._ },
+ .{ ._, ._, .mov, .tmp6q, .tmp8q, ._, ._ },
+ .{ .@"2:", ._, .mov, .tmp7q, .tmp4q, ._, ._ },
+ .{ ._, ._, .mul, .leasi(.tmp1q, .@"8", .tmp3), ._, ._, ._ },
+ .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ },
+ .{ ._, ._, .adc, .tmp7q, .tmp6q, ._, ._ },
+ .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp3, .add_src0_size), .tmp7q, ._, ._ },
+ .{ ._, ._c, .in, .tmp3p, ._, ._, ._ },
+ .{ ._, ._nz, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp0d, ._, ._ },
+ .{ ._, ._, .adc, .tmp8q, .si(0), ._, ._ },
+ .{ ._, ._mp, .j, .@"2f", ._, ._, ._ },
+ .{ .@"1:", ._, .@"or", .tmp8q, .leasi(.tmp1q, .@"8", .tmp3), ._, ._ },
+ .{ .@"2:", ._c, .de, .tmp3d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"1b", ._, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ },
+ .{ .@"3:", ._, .lea, .tmp1p, .lead(.tmp1, 8), ._, ._ },
+ .{ ._, ._c, .de, .tmp0d, ._, ._, ._ },
+ .{ ._, ._ns, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp0q, .ua(.src0, .add_umax), ._, ._ },
+ .{ ._, ._, .mov, .tmp1q, .memad(.dst0q, .add_src0_size, -8), ._, ._ },
+ .{ ._, ._, .@"and", .tmp0q, .tmp1q, ._, ._ },
+ .{ ._, ._r, .sh, .tmp1q, .ua(.src0, .add_bit_size_rem_64), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_src0_size, -8), .tmp0q, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2q, .tmp1q, ._, ._ },
+ } },
+ } }) catch |err| switch (err) {
+ error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{
+ @tagName(air_tag),
+ ty_pl.ty.toType().fmt(pt),
+ ops[0].tracking(cg),
+ ops[1].tracking(cg),
+ }),
+ else => |e| return e,
+ };
+ try res[0].withOverflow(&res[1], cg);
+ try res[0].finish(inst, &.{ bin_op.lhs, bin_op.rhs }, &ops, cg);
+ },
.alloc => if (use_old) try cg.airAlloc(inst) else {
const ty = air_datas[@intFromEnum(inst)].ty;
const slot = try cg.tempInit(ty, .{ .lea_frame = .{
@@ -97522,9 +102888,6 @@ fn lowerSwitchBr(
const relocs = try allocator.alloc(Mir.Inst.Index, case.items.len + case.ranges.len);
defer allocator.free(relocs);
- var cond_temp = try cg.tempInit(condition_ty, condition);
- const reset_index = cg.next_temp_index;
-
try cg.spillEflagsIfOccupied();
for (case.items, relocs[0..case.items.len]) |item, *reloc| {
const item_mcv = try cg.resolveInst(item);
@@ -97535,6 +102898,7 @@ fn lowerSwitchBr(
else => unreachable,
},
else => cc: {
+ var cond_temp = try cg.tempInit(condition_ty, condition);
var item_temp = try cg.tempInit(condition_ty, item_mcv);
const cc_temp = cond_temp.cmpInts(.eq, &item_temp, cg) catch |err| switch (err) {
error.SelectFailed => unreachable,
@@ -97543,7 +102907,8 @@ fn lowerSwitchBr(
try item_temp.die(cg);
const cc = cc_temp.tracking(cg).short.eflags;
try cc_temp.die(cg);
- try cg.resetTemps(reset_index);
+ try cond_temp.die(cg);
+ try cg.resetTemps(@enumFromInt(0));
break :cc cc;
},
};
@@ -97551,6 +102916,7 @@ fn lowerSwitchBr(
}
for (case.ranges, relocs[case.items.len..]) |range, *reloc| {
+ var cond_temp = try cg.tempInit(condition_ty, condition);
const min_mcv = try cg.resolveInst(range[0]);
const max_mcv = try cg.resolveInst(range[1]);
// `null` means always false.
@@ -97594,7 +102960,8 @@ fn lowerSwitchBr(
break :cc cc;
},
};
- try cg.resetTemps(reset_index);
+ try cond_temp.die(cg);
+ try cg.resetTemps(@enumFromInt(0));
// "Success" case is in `reloc`....
if (lte_max) |cc| {
reloc.* = try cg.asmJccReloc(cc, undefined);
@@ -97605,8 +102972,6 @@ fn lowerSwitchBr(
if (lt_min_reloc) |r| cg.performReloc(r);
}
- try cond_temp.die(cg);
- try cg.resetTemps(@enumFromInt(0));
cg.checkInvariantsAfterAirInst();
// The jump to skip this case if the conditions all failed.
@@ -97813,6 +103178,19 @@ fn performReloc(self: *CodeGen, reloc: Mir.Inst.Index) void {
.pseudo_j_z_and_np_inst, .pseudo_j_nz_or_p_inst => {},
else => unreachable,
},
+ .lea => switch (self.mir_instructions.items(.ops)[reloc]) {
+ .rm => {
+ const rx = self.mir_instructions.items(.data)[reloc].rx;
+ assert(rx.fixes == ._);
+ const mem_info: Mir.Memory.Info = @bitCast(
+ self.mir_extra.items[rx.payload + std.meta.fieldIndex(Mir.Memory, "info").?],
+ );
+ assert(mem_info.base == .rip_inst);
+ self.mir_extra.items[rx.payload + std.meta.fieldIndex(Mir.Memory, "base").?] = next_inst;
+ return;
+ },
+ else => unreachable,
+ },
else => unreachable,
}
self.mir_instructions.items(.data)[reloc].inst.inst = next_inst;
@@ -98096,7 +103474,10 @@ fn airAsm(self: *CodeGen, inst: Air.Inst.Index) !void {
// for the string, we still use the next u32 for the null terminator.
extra_i += clobber.len / 4 + 1;
- if (std.mem.eql(u8, clobber, "") or std.mem.eql(u8, clobber, "memory")) {
+ if (std.mem.eql(u8, clobber, "") or std.mem.eql(u8, clobber, "memory") or
+ std.mem.eql(u8, clobber, "fpsr") or std.mem.eql(u8, clobber, "fpcr") or
+ std.mem.eql(u8, clobber, "mxcsr") or std.mem.eql(u8, clobber, "dirflag"))
+ {
// ok, sure
} else if (std.mem.eql(u8, clobber, "cc") or
std.mem.eql(u8, clobber, "flags") or
@@ -98361,7 +103742,24 @@ fn airAsm(self: *CodeGen, inst: Air.Inst.Index) !void {
else
.@"1";
if (sib_it.next()) |_| return self.fail("invalid memory operand: '{s}'", .{op_str});
- op.* = if (std.mem.eql(u8, base_str, "%%dx") and index_str.len == 0) .{ .reg = .dx } else .{ .mem = .{
+ op.* = if (std.mem.eql(u8, base_str, "%%dx") and index_str.len == 0)
+ .{ .reg = .dx }
+ else if (std.mem.eql(u8, base_str, "%%rip") and index_str.len == 0 and
+ Label.isValid(.reference, op_str[0..open]))
+ op: {
+ const anon = std.ascii.isDigit(op_str[0]);
+ const label_gop = try labels.getOrPut(self.gpa, op_str[0..if (anon) 1 else open]);
+ if (anon and (op_str[1] == 'b' or op_str[1] == 'B') and !label_gop.found_existing)
+ return self.fail("undefined label: '{s}'", .{op_str});
+ if (!label_gop.found_existing) label_gop.value_ptr.* = .{};
+ const pending_relocs = &label_gop.value_ptr.pending_relocs;
+ if (if (anon)
+ op_str[1] == 'f' or op_str[1] == 'F'
+ else
+ !label_gop.found_existing or pending_relocs.items.len > 0)
+ try pending_relocs.append(self.gpa, @intCast(self.mir_instructions.len));
+ break :op .{ .mem = .{ .base = .{ .rip_inst = label_gop.value_ptr.target } } };
+ } else .{ .mem = .{
.base = if (base_str.len > 0)
.{ .reg = parseRegName(base_str["%%".len..]) orelse
return self.fail("invalid base register: '{s}'", .{base_str}) }
@@ -98405,9 +103803,9 @@ fn airAsm(self: *CodeGen, inst: Air.Inst.Index) !void {
} else if (Label.isValid(.reference, op_str)) {
const anon = std.ascii.isDigit(op_str[0]);
const label_gop = try labels.getOrPut(self.gpa, op_str[0..if (anon) 1 else op_str.len]);
- if (!label_gop.found_existing) label_gop.value_ptr.* = .{};
if (anon and (op_str[1] == 'b' or op_str[1] == 'B') and !label_gop.found_existing)
return self.fail("undefined label: '{s}'", .{op_str});
+ if (!label_gop.found_existing) label_gop.value_ptr.* = .{};
const pending_relocs = &label_gop.value_ptr.pending_relocs;
if (if (anon)
op_str[1] == 'f' or op_str[1] == 'F'
@@ -99643,7 +105041,7 @@ fn genSetMem(
.none => .{ .immediate = @bitCast(@as(i64, disp)) },
.reg => |base_reg| .{ .register_offset = .{ .reg = base_reg, .off = disp } },
.frame => |base_frame_index| .{ .lea_frame = .{ .index = base_frame_index, .off = disp } },
- .table => unreachable,
+ .table, .rip_inst => unreachable,
.reloc => |sym_index| .{ .lea_symbol = .{ .sym_index = sym_index, .off = disp } },
};
switch (src_mcv) {
@@ -99753,7 +105151,7 @@ fn genSetMem(
.index = frame_index,
.off = disp,
}).compare(.gte, src_align),
- .table => unreachable,
+ .table, .rip_inst => unreachable,
.reloc => false,
})).write(
self,
@@ -100402,7 +105800,7 @@ fn airCmpxchg(self: *CodeGen, inst: Air.Inst.Index) !void {
const ptr_lock = switch (ptr_mem.base) {
.none, .frame, .reloc => null,
.reg => |reg| self.register_manager.lockReg(reg),
- .table => unreachable,
+ .table, .rip_inst => unreachable,
};
defer if (ptr_lock) |lock| self.register_manager.unlockReg(lock);
@@ -100485,7 +105883,7 @@ fn atomicOp(
const mem_lock = switch (ptr_mem.base) {
.none, .frame, .reloc => null,
.reg => |reg| self.register_manager.lockReg(reg),
- .table => unreachable,
+ .table, .rip_inst => unreachable,
};
defer if (mem_lock) |lock| self.register_manager.unlockReg(lock);
@@ -103624,40 +109022,35 @@ fn resolveInst(self: *CodeGen, ref: Air.Inst.Ref) InnerError!MCValue {
// If the type has no codegen bits, no need to store it.
if (!ty.hasRuntimeBitsIgnoreComptime(zcu)) return .none;
- const mcv = if (ref.toIndex()) |inst| mcv: {
+ const mcv: MCValue = if (ref.toIndex()) |inst| mcv: {
break :mcv self.inst_tracking.getPtr(inst).?.short;
} else mcv: {
- const ip_index = ref.toInterned().?;
- const gop = try self.const_tracking.getOrPut(self.gpa, ip_index);
- if (!gop.found_existing) gop.value_ptr.* = .init(init: {
- const const_mcv = try self.genTypedValue(.fromInterned(ip_index));
- switch (const_mcv) {
- .lea_tlv => |tlv_sym| switch (self.bin_file.tag) {
- .elf, .macho => {
- if (self.mod.pic) {
- try self.spillRegisters(&.{ .rdi, .rax });
- } else {
- try self.spillRegisters(&.{.rax});
- }
- const frame_index = try self.allocFrameIndex(.init(.{
- .size = 8,
- .alignment = .@"8",
- }));
- try self.genSetMem(
- .{ .frame = frame_index },
- 0,
- .usize,
- .{ .lea_symbol = .{ .sym_index = tlv_sym } },
- .{},
- );
- break :init .{ .load_frame = .{ .index = frame_index } };
- },
- else => break :init const_mcv,
+ const const_mcv = try self.genTypedValue(.fromInterned(ref.toInterned().?));
+ switch (const_mcv) {
+ .lea_tlv => |tlv_sym| switch (self.bin_file.tag) {
+ .elf, .macho => {
+ if (self.mod.pic) {
+ try self.spillRegisters(&.{ .rdi, .rax });
+ } else {
+ try self.spillRegisters(&.{.rax});
+ }
+ const frame_index = try self.allocFrameIndex(.init(.{
+ .size = 8,
+ .alignment = .@"8",
+ }));
+ try self.genSetMem(
+ .{ .frame = frame_index },
+ 0,
+ .usize,
+ .{ .lea_symbol = .{ .sym_index = tlv_sym } },
+ .{},
+ );
+ break :mcv .{ .load_frame = .{ .index = frame_index } };
},
- else => break :init const_mcv,
- }
- });
- break :mcv gop.value_ptr.short;
+ else => break :mcv const_mcv,
+ },
+ else => break :mcv const_mcv,
+ }
};
switch (mcv) {
@@ -104205,13 +109598,21 @@ fn memSize(self: *CodeGen, ty: Type) Memory.Size {
fn splitType(self: *CodeGen, comptime parts_len: usize, ty: Type) ![parts_len]Type {
const pt = self.pt;
const zcu = pt.zcu;
+ const ip = &zcu.intern_pool;
var parts: [parts_len]Type = undefined;
- if (ty.isVector(zcu)) if (std.math.divExact(u32, ty.vectorLen(zcu), parts_len)) |vec_len| return .{
- try pt.vectorType(.{ .len = vec_len, .child = ty.scalarType(zcu).toIntern() }),
- } ** parts_len else |err| switch (err) {
- error.DivisionByZero => unreachable,
- error.UnexpectedRemainder => {},
- };
+ switch (ip.indexToKey(ty.toIntern())) {
+ .vector_type => |vector_type| if (std.math.divExact(u32, vector_type.len, parts_len)) |vec_len| return .{
+ try pt.vectorType(.{ .len = vec_len, .child = vector_type.child }),
+ } ** parts_len else |err| switch (err) {
+ error.DivisionByZero => unreachable,
+ error.UnexpectedRemainder => {},
+ },
+ .tuple_type => |tuple_type| if (tuple_type.types.len == parts_len) {
+ for (&parts, tuple_type.types.get(ip)) |*part, part_ty| part.* = .fromInterned(part_ty);
+ return parts;
+ },
+ else => {},
+ }
const classes = std.mem.sliceTo(&abi.classifySystemV(ty, zcu, self.target, .other), .none);
if (classes.len == parts_len) for (&parts, classes, 0..) |*part, class, part_i| {
part.* = switch (class) {
@@ -104896,6 +110297,52 @@ const Temp = struct {
second_temp.* = result_temp;
}
+ fn withOverflow(temp: *Temp, overflow_temp: *Temp, cg: *CodeGen) InnerError!void {
+ const temp_index = temp.unwrap(cg).temp;
+ const temp_tracking = temp_index.tracking(cg);
+ const overflow_temp_tracking = overflow_temp.unwrap(cg).temp.tracking(cg);
+ switch (temp_tracking.short) {
+ .register => |reg| switch (overflow_temp_tracking.short) {
+ .eflags => |overflow_cc| {
+ const result_temp_index = cg.next_temp_index;
+ const result_temp: Temp = .{ .index = result_temp_index.toIndex() };
+ assert(cg.reuseTemp(result_temp.index, temp.index, temp_tracking));
+ assert(cg.reuseTemp(result_temp.index, overflow_temp.index, overflow_temp_tracking));
+ result_temp_index.tracking(cg).* = .init(.{ .register_overflow = .{ .reg = reg, .eflags = overflow_cc } });
+ cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8;
+ cg.next_temp_index = @enumFromInt(@intFromEnum(result_temp_index) + 1);
+ temp.* = result_temp;
+ overflow_temp.* = result_temp;
+ return;
+ },
+ .register => |overflow_reg| {
+ const result_temp_index = cg.next_temp_index;
+ const result_temp: Temp = .{ .index = result_temp_index.toIndex() };
+ assert(cg.reuseTemp(result_temp.index, temp.index, temp_tracking));
+ assert(cg.reuseTemp(result_temp.index, overflow_temp.index, overflow_temp_tracking));
+ result_temp_index.tracking(cg).* = .init(.{ .register_pair = .{ reg, overflow_reg } });
+ cg.temp_type[@intFromEnum(result_temp_index)] = .slice_const_u8;
+ cg.next_temp_index = @enumFromInt(@intFromEnum(result_temp_index) + 1);
+ temp.* = result_temp;
+ overflow_temp.* = result_temp;
+ return;
+ },
+ else => {},
+ },
+ .load_frame => {
+ const zcu = cg.pt.zcu;
+ const ip = &zcu.intern_pool;
+ const field_tys = ip.indexToKey(temp_index.typeOf(cg).toIntern()).tuple_type.types.get(ip);
+ try temp.write(overflow_temp, .{ .disp = @intCast(Type.fromInterned(field_tys[0]).abiSize(zcu)) }, cg);
+ try overflow_temp.die(cg);
+ overflow_temp.* = temp.*;
+ return;
+ },
+ else => {},
+ }
+ std.debug.panic("{s}: {} {}\n", .{ @src().fn_name, temp_tracking, overflow_temp_tracking });
+ }
+
fn asMask(temp: Temp, info: MaskInfo, cg: *CodeGen) void {
assert(info.scalar != .none);
const mcv = &temp.unwrap(cg).temp.tracking(cg).short;
@@ -105583,6 +111030,42 @@ const Temp = struct {
.each = .{ .once = &.{} },
}, .{
.required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ },
+ .extra_temps = .{
+ .{ .type = .u64, .kind = .{ .rc = .general_purpose } },
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ .unused,
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .clobbers = .{ .eflags = true },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0q, .memad(.src0q, .add_size, -16), ._, ._ },
+ .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ },
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .tmp0q, ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
+ .src_constraints = .{ .{ .exact_remainder_unsigned_int = .{ .of = .xword, .is = .qword } }, .any, .any },
+ .patterns = &.{
+ .{ .src = .{ .mut_mem, .none, .none } },
+ },
+ .dst_temps = .{ .{ .ref = .src0 }, .unused },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .memad(.dst0q, .add_size, -8), .si(0), ._, ._ },
+ } },
+ }, .{
+ .required_features = .{ .@"64bit", null, null, null },
.src_constraints = .{ .{ .remainder_signed_int = .{ .of = .xword, .is = .qword } }, .any, .any },
.patterns = &.{
.{ .src = .{ .mut_mem, .none, .none } },
@@ -109803,8 +115286,7 @@ fn tempFromOperand(cg: *CodeGen, op_ref: Air.Inst.Ref, op_dies: bool) InnerError
if (op_ref.toIndex()) |op_inst| return .{ .index = op_inst };
const val = op_ref.toInterned().?;
- const gop = try cg.const_tracking.getOrPut(cg.gpa, val);
- if (!gop.found_existing) gop.value_ptr.* = .init(init: {
+ return cg.tempInit(.fromInterned(ip.typeOf(val)), init: {
const const_mcv = try cg.genTypedValue(.fromInterned(val));
switch (const_mcv) {
.lea_tlv => |tlv_sym| switch (cg.bin_file.tag) {
@@ -109832,7 +115314,6 @@ fn tempFromOperand(cg: *CodeGen, op_ref: Air.Inst.Ref, op_dies: bool) InnerError
else => break :init const_mcv,
}
});
- return cg.tempInit(.fromInterned(ip.typeOf(val)), gop.value_ptr.short);
}
fn tempsFromOperandsInner(
@@ -110330,6 +115811,7 @@ const Select = struct {
mut_mem,
to_mut_mem,
gpr,
+ immut_gpr,
to_gpr,
mut_gpr,
to_mut_gpr,
@@ -110362,15 +115844,18 @@ const Select = struct {
return switch (src) {
.none => temp.tracking(cg).short == .none,
.imm8 => switch (temp.tracking(cg).short) {
- .immediate => |imm| std.math.cast(u8, imm) != null,
+ .immediate => |imm| std.math.cast(u8, imm) != null or
+ std.math.cast(i8, @as(i64, @bitCast(imm))) != null,
else => false,
},
.imm16 => switch (temp.tracking(cg).short) {
- .immediate => |imm| std.math.cast(u16, imm) != null,
+ .immediate => |imm| std.math.cast(u16, imm) != null or
+ std.math.cast(i16, @as(i64, @bitCast(imm))) != null,
else => false,
},
.imm32 => switch (temp.tracking(cg).short) {
- .immediate => |imm| std.math.cast(u32, imm) != null,
+ .immediate => |imm| std.math.cast(u32, imm) != null or
+ std.math.cast(i32, @as(i64, @bitCast(imm))) != null,
else => false,
},
.simm32 => switch (temp.tracking(cg).short) {
@@ -110386,6 +115871,11 @@ const Select = struct {
.register_offset => |reg_off| reg_off.reg.class() == .general_purpose and reg_off.off == 0,
else => false,
},
+ .immut_gpr => !temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) <= 8 and switch (temp.tracking(cg).short) {
+ .register => |reg| reg.class() == .general_purpose,
+ .register_offset => |reg_off| reg_off.reg.class() == .general_purpose and reg_off.off == 0,
+ else => false,
+ },
.mut_gpr => temp.isMut(cg) and temp.typeOf(cg).abiSize(cg.pt.zcu) <= 8 and switch (temp.tracking(cg).short) {
.register => |reg| reg.class() == .general_purpose,
.register_offset => |reg_off| reg_off.reg.class() == .general_purpose and reg_off.off == 0,
@@ -110472,7 +115962,7 @@ const Select = struct {
.to_param_gpr_pair => |param_spec| try temp.toRegPair(abi.getCAbiIntParamRegs(param_spec.tag(cg))[param_spec.index..][0..2].*, cg),
.to_ret_gpr => |ret_spec| try temp.toReg(abi.getCAbiIntReturnRegs(ret_spec.tag(cg))[ret_spec.index], cg),
.to_ret_gpr_pair => |ret_spec| try temp.toRegPair(abi.getCAbiIntReturnRegs(ret_spec.tag(cg))[ret_spec.index..][0..2].*, cg),
- .gpr, .to_gpr => try temp.toRegClass(false, .general_purpose, cg),
+ .gpr, .immut_gpr, .to_gpr => try temp.toRegClass(false, .general_purpose, cg),
.mut_gpr, .to_mut_gpr => try temp.toRegClass(true, .general_purpose, cg),
.x87, .to_x87 => try temp.toRegClass(false, .x87, cg),
.mut_x87, .to_mut_x87 => try temp.toRegClass(true, .x87, cg),
@@ -110494,6 +115984,8 @@ const Select = struct {
const Kind = union(enum) {
unused,
any,
+ none,
+ undef,
cc: Condition,
ref: Select.Operand.Ref,
reg: Register,
@@ -110580,6 +116072,8 @@ const Select = struct {
return switch (spec.kind) {
.unused => .{ undefined, false },
.any => .{ try cg.tempAlloc(spec.type), true },
+ .none => .{ try cg.tempInit(spec.type, .none), true },
+ .undef => .{ try cg.tempInit(spec.type, .undef), true },
.cc => |cc| .{ try cg.tempInit(spec.type, .{ .eflags = cc }), true },
.ref => |ref| .{ ref.tempOf(s), false },
.reg => |reg| .{ try cg.tempInit(spec.type, .{ .register = reg }), true },
@@ -110812,10 +116306,17 @@ const Select = struct {
},
.frame => |frame_index| .{ try cg.tempInit(spec.type, .{ .load_frame = .{ .index = frame_index } }), true },
.lazy_symbol => |lazy_symbol_spec| {
+ const ip = &pt.zcu.intern_pool;
const ty = if (lazy_symbol_spec.ref == .none) spec.type else lazy_symbol_spec.ref.typeOf(s);
const lazy_symbol: link.File.LazySymbol = .{
.kind = lazy_symbol_spec.kind,
- .ty = ty.toIntern(),
+ .ty = switch (ip.indexToKey(ty.toIntern())) {
+ .inferred_error_set_type => |func_index| switch (ip.funcIesResolvedUnordered(func_index)) {
+ .none => unreachable, // unresolved inferred error set
+ else => |ty_index| ty_index,
+ },
+ else => ty.toIntern(),
+ },
};
return .{ try cg.tempInit(.usize, .{ .lea_symbol = .{
.sym_index = if (cg.bin_file.cast(.elf)) |elf_file|
@@ -110922,6 +116423,7 @@ const Select = struct {
const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" };
const sub_src0_size_div_8: Adjust = .{ .sign = .neg, .lhs = .src0_size, .op = .div, .rhs = .@"8" };
const sub_src0_size: Adjust = .{ .sign = .neg, .lhs = .src0_size, .op = .mul, .rhs = .@"1" };
+ const add_src0_size: Adjust = .{ .sign = .pos, .lhs = .src0_size, .op = .mul, .rhs = .@"1" };
const add_8_src0_size: Adjust = .{ .sign = .pos, .lhs = .src0_size, .op = .mul, .rhs = .@"8" };
const add_delta_size_div_8: Adjust = .{ .sign = .pos, .lhs = .delta_size, .op = .div, .rhs = .@"8" };
const add_delta_elem_size: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .mul, .rhs = .@"1" };
@@ -110965,7 +116467,9 @@ const Select = struct {
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" };
const add_smin: Adjust = .{ .sign = .pos, .lhs = .smin, .op = .mul, .rhs = .@"1" };
+ 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 repeat: Adjust = .{ .sign = .pos, .lhs = .repeat, .op = .mul, .rhs = .@"1" };
};
const Ref = enum(u5) {
@@ -111783,6 +117287,7 @@ fn select(
if (std.debug.runtime_safety) {
for (case.src_constraints[src_temps.len..]) |src_constraint| assert(src_constraint == .any);
for (case.dst_constraints[dst_temps.len..]) |dst_constraint| assert(dst_constraint == .any);
+ for (case.dst_temps[dst_temps.len..]) |dst_temp| assert(dst_temp == .unused);
}
patterns: for (case.patterns) |pattern| {
for (pattern.src[0..src_temps.len], src_temps) |src_pattern, src_temp| if (!src_pattern.matches(src_temp, cg)) continue :patterns;
diff --git a/src/arch/x86_64/Emit.zig b/src/arch/x86_64/Emit.zig
@@ -97,12 +97,14 @@ pub fn emitMir(emit: *Emit) Error!void {
op_index -= 1;
const op = lowered_inst.encoding.data.ops[op_index];
if (op == .none) continue;
- const enc_length: u4 = @intCast(
- std.math.divCeil(u7, @intCast(op.immBitSize()), 8) catch unreachable,
- );
+ const is_mem = op.isMemory();
+ const enc_length: u4 = if (is_mem) switch (lowered_inst.ops[op_index].mem.sib.base) {
+ .rip_inst => 4,
+ else => unreachable,
+ } else @intCast(std.math.divCeil(u7, @intCast(op.immBitSize()), 8) catch unreachable);
reloc_offset -= enc_length;
- if (op_index == lowered_relocs[0].op_index)
- break :reloc_offset_length .{ reloc_offset, enc_length };
+ if (op_index == lowered_relocs[0].op_index) break :reloc_offset_length .{ reloc_offset, enc_length };
+ std.debug.assert(!is_mem);
}
};
try relocs.append(emit.lower.allocator, .{
@@ -434,7 +436,7 @@ pub fn emitMir(emit: *Emit) Error!void {
loc_buf[0] = switch (mem.base()) {
.none => .{ .constu = 0 },
.reg => |reg| .{ .breg = reg.dwarfNum() },
- .frame, .table => unreachable,
+ .frame, .table, .rip_inst => unreachable,
.reloc => |sym_index| .{ .addr = .{ .sym = sym_index } },
};
break :base &loc_buf[0];
diff --git a/src/arch/x86_64/Encoding.zig b/src/arch/x86_64/Encoding.zig
@@ -50,7 +50,7 @@ pub fn findByMnemonic(
else => {},
} else false;
const rex_extended = for (ops) |op| {
- if (op.isBaseExtended() or op.isIndexExtended()) break true;
+ if (op.baseExtEnc() != 0b00 or op.indexExtEnc() != 0b00) break true;
} else false;
if ((rex_required or rex_extended) and rex_invalid) return error.CannotEncode;
diff --git a/src/arch/x86_64/Lower.zig b/src/arch/x86_64/Lower.zig
@@ -395,6 +395,7 @@ pub fn mem(lower: *Lower, op_index: InstOpIndex, payload: u32) Memory {
.sib => |*sib| switch (sib.base) {
else => {},
.table => sib.disp = lower.reloc(op_index, .table, sib.disp).signed,
+ .rip_inst => |inst_index| sib.disp = lower.reloc(op_index, .{ .inst = inst_index }, sib.disp).signed,
},
else => {},
}
diff --git a/src/arch/x86_64/Mir.zig b/src/arch/x86_64/Mir.zig
@@ -1742,6 +1742,7 @@ pub const Memory = struct {
.reg => |reg| @intFromEnum(reg),
.frame => |frame_index| @intFromEnum(frame_index),
.reloc => |sym_index| sym_index,
+ .rip_inst => |inst_index| inst_index,
},
.off = switch (mem.mod) {
.rm => |rm| @bitCast(rm.disp),
@@ -1769,6 +1770,7 @@ pub const Memory = struct {
.frame => .{ .frame = @enumFromInt(mem.base) },
.table => .table,
.reloc => .{ .reloc = mem.base },
+ .rip_inst => .{ .rip_inst = mem.base },
},
.scale_index = switch (mem.info.index) {
.none => null,
@@ -1832,7 +1834,7 @@ pub fn resolveFrameAddr(mir: Mir, frame_addr: bits.FrameAddr) bits.RegisterOffse
pub fn resolveFrameLoc(mir: Mir, mem: Memory) Memory {
return switch (mem.info.base) {
- .none, .reg, .table, .reloc => mem,
+ .none, .reg, .table, .reloc, .rip_inst => mem,
.frame => if (mir.frame_locs.len > 0) .{
.info = .{
.base = .reg,
diff --git a/src/arch/x86_64/abi.zig b/src/arch/x86_64/abi.zig
@@ -266,7 +266,8 @@ pub fn classifySystemV(ty: Type, zcu: *Zcu, target: *const std.Target, ctx: Cont
// separately.".
const ty_size = ty.abiSize(zcu);
switch (ty.containerLayout(zcu)) {
- .auto, .@"extern" => {},
+ .auto => unreachable,
+ .@"extern" => {},
.@"packed" => {
assert(ty_size <= 16);
result[0] = .integer;
@@ -345,7 +346,8 @@ fn classifySystemVStruct(
);
if (zcu.typeToStruct(field_ty)) |field_loaded_struct| {
switch (field_loaded_struct.layout) {
- .auto, .@"extern" => {
+ .auto => unreachable,
+ .@"extern" => {
byte_offset = classifySystemVStruct(result, byte_offset, field_loaded_struct, zcu, target);
continue;
},
@@ -353,7 +355,8 @@ fn classifySystemVStruct(
}
} else if (zcu.typeToUnion(field_ty)) |field_loaded_union| {
switch (field_loaded_union.flagsUnordered(ip).layout) {
- .auto, .@"extern" => {
+ .auto => unreachable,
+ .@"extern" => {
byte_offset = classifySystemVUnion(result, byte_offset, field_loaded_union, zcu, target);
continue;
},
@@ -386,7 +389,8 @@ fn classifySystemVUnion(
const field_ty = Type.fromInterned(loaded_union.field_types.get(ip)[field_index]);
if (zcu.typeToStruct(field_ty)) |field_loaded_struct| {
switch (field_loaded_struct.layout) {
- .auto, .@"extern" => {
+ .auto => unreachable,
+ .@"extern" => {
_ = classifySystemVStruct(result, starting_byte_offset, field_loaded_struct, zcu, target);
continue;
},
@@ -394,7 +398,8 @@ fn classifySystemVUnion(
}
} else if (zcu.typeToUnion(field_ty)) |field_loaded_union| {
switch (field_loaded_union.flagsUnordered(ip).layout) {
- .auto, .@"extern" => {
+ .auto => unreachable,
+ .@"extern" => {
_ = classifySystemVUnion(result, starting_byte_offset, field_loaded_union, zcu, target);
continue;
},
diff --git a/src/arch/x86_64/bits.zig b/src/arch/x86_64/bits.zig
@@ -4,6 +4,7 @@ const expect = std.testing.expect;
const Allocator = std.mem.Allocator;
const ArrayList = std.ArrayList;
+const Mir = @import("Mir.zig");
/// EFLAGS condition codes
pub const Condition = enum(u5) {
@@ -359,11 +360,20 @@ pub const Register = enum(u8) {
ah, ch, dh, bh,
- ymm0, ymm1, ymm2, ymm3, ymm4, ymm5, ymm6, ymm7,
- ymm8, ymm9, ymm10, ymm11, ymm12, ymm13, ymm14, ymm15,
+ zmm0, zmm1, zmm2, zmm3, zmm4, zmm5, zmm6, zmm7,
+ zmm8, zmm9, zmm10, zmm11, zmm12, zmm13, zmm14, zmm15,
+ zmm16, zmm17,zmm18, zmm19, zmm20, zmm21, zmm22, zmm23,
+ zmm24, zmm25,zmm26, zmm27, zmm28, zmm29, zmm30, zmm31,
- xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,
- xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,
+ ymm0, ymm1, ymm2, ymm3, ymm4, ymm5, ymm6, ymm7,
+ ymm8, ymm9, ymm10, ymm11, ymm12, ymm13, ymm14, ymm15,
+ ymm16, ymm17,ymm18, ymm19, ymm20, ymm21, ymm22, ymm23,
+ ymm24, ymm25,ymm26, ymm27, ymm28, ymm29, ymm30, ymm31,
+
+ xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7,
+ xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15,
+ xmm16, xmm17,xmm18, xmm19, xmm20, xmm21, xmm22, xmm23,
+ xmm24, xmm25,xmm26, xmm27, xmm28, xmm29, xmm30, xmm31,
mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7,
@@ -403,8 +413,9 @@ pub const Register = enum(u8) {
@intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => .general_purpose,
@intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => .gphi,
- @intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm15) => .sse,
- @intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm15) => .sse,
+ @intFromEnum(Register.zmm0) ... @intFromEnum(Register.zmm31) => .sse,
+ @intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm31) => .sse,
+ @intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm31) => .sse,
@intFromEnum(Register.mm0) ... @intFromEnum(Register.mm7) => .mmx,
@intFromEnum(Register.st0) ... @intFromEnum(Register.st7) => .x87,
@@ -427,13 +438,14 @@ pub const Register = enum(u8) {
@intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => @intFromEnum(Register.al),
@intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => @intFromEnum(Register.ah),
- @intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm15) => @intFromEnum(Register.ymm0) - 16,
- @intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm15) => @intFromEnum(Register.xmm0) - 16,
- @intFromEnum(Register.mm0) ... @intFromEnum(Register.mm7) => @intFromEnum(Register.mm0) - 32,
- @intFromEnum(Register.st0) ... @intFromEnum(Register.st7) => @intFromEnum(Register.st0) - 40,
- @intFromEnum(Register.es) ... @intFromEnum(Register.gs) => @intFromEnum(Register.es) - 48,
- @intFromEnum(Register.cr0) ... @intFromEnum(Register.cr15) => @intFromEnum(Register.cr0) - 54,
- @intFromEnum(Register.dr0) ... @intFromEnum(Register.dr15) => @intFromEnum(Register.dr0) - 70,
+ @intFromEnum(Register.zmm0) ... @intFromEnum(Register.zmm31) => @intFromEnum(Register.zmm0) - 16,
+ @intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm31) => @intFromEnum(Register.ymm0) - 16,
+ @intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm31) => @intFromEnum(Register.xmm0) - 16,
+ @intFromEnum(Register.mm0) ... @intFromEnum(Register.mm7) => @intFromEnum(Register.mm0) - 48,
+ @intFromEnum(Register.st0) ... @intFromEnum(Register.st7) => @intFromEnum(Register.st0) - 56,
+ @intFromEnum(Register.es) ... @intFromEnum(Register.gs) => @intFromEnum(Register.es) - 64,
+ @intFromEnum(Register.cr0) ... @intFromEnum(Register.cr15) => @intFromEnum(Register.cr0) - 70,
+ @intFromEnum(Register.dr0) ... @intFromEnum(Register.dr15) => @intFromEnum(Register.dr0) - 86,
else => unreachable,
// zig fmt: on
@@ -450,6 +462,7 @@ pub const Register = enum(u8) {
@intFromEnum(Register.al) ... @intFromEnum(Register.r15b) => 8,
@intFromEnum(Register.ah) ... @intFromEnum(Register.bh) => 8,
+ @intFromEnum(Register.zmm0) ... @intFromEnum(Register.zmm15) => 512,
@intFromEnum(Register.ymm0) ... @intFromEnum(Register.ymm15) => 256,
@intFromEnum(Register.xmm0) ... @intFromEnum(Register.xmm15) => 128,
@intFromEnum(Register.mm0) ... @intFromEnum(Register.mm7) => 64,
@@ -473,8 +486,9 @@ pub const Register = enum(u8) {
@intFromEnum(Register.r8w) ... @intFromEnum(Register.r15w) => true,
@intFromEnum(Register.r8b) ... @intFromEnum(Register.r15b) => true,
- @intFromEnum(Register.ymm8) ... @intFromEnum(Register.ymm15) => true,
- @intFromEnum(Register.xmm8) ... @intFromEnum(Register.xmm15) => true,
+ @intFromEnum(Register.zmm8) ... @intFromEnum(Register.zmm31) => true,
+ @intFromEnum(Register.ymm8) ... @intFromEnum(Register.ymm31) => true,
+ @intFromEnum(Register.xmm8) ... @intFromEnum(Register.xmm31) => true,
@intFromEnum(Register.cr8) ... @intFromEnum(Register.cr15) => true,
@intFromEnum(Register.dr8) ... @intFromEnum(Register.dr15) => true,
@@ -484,7 +498,7 @@ pub const Register = enum(u8) {
};
}
- pub fn enc(reg: Register) u4 {
+ pub fn enc(reg: Register) u5 {
const base = switch (@intFromEnum(reg)) {
// zig fmt: off
@intFromEnum(Register.rax) ... @intFromEnum(Register.r15) => @intFromEnum(Register.rax),
@@ -509,10 +523,6 @@ pub const Register = enum(u8) {
return @truncate(@intFromEnum(reg) - base);
}
- pub fn lowEnc(reg: Register) u3 {
- return @truncate(reg.enc());
- }
-
pub fn toBitSize(reg: Register, bit_size: u64) Register {
return switch (bit_size) {
8 => reg.to8(),
@@ -557,11 +567,12 @@ pub const Register = enum(u8) {
};
}
- fn sseBase(reg: Register) u7 {
+ fn sseBase(reg: Register) u8 {
assert(reg.class() == .sse);
return switch (@intFromEnum(reg)) {
- @intFromEnum(Register.ymm0)...@intFromEnum(Register.ymm15) => @intFromEnum(Register.ymm0),
- @intFromEnum(Register.xmm0)...@intFromEnum(Register.xmm15) => @intFromEnum(Register.xmm0),
+ @intFromEnum(Register.zmm0)...@intFromEnum(Register.zmm31) => @intFromEnum(Register.zmm0),
+ @intFromEnum(Register.ymm0)...@intFromEnum(Register.ymm31) => @intFromEnum(Register.ymm0),
+ @intFromEnum(Register.xmm0)...@intFromEnum(Register.xmm31) => @intFromEnum(Register.xmm0),
else => unreachable,
};
}
@@ -678,15 +689,9 @@ pub const Memory = struct {
frame: FrameIndex,
table,
reloc: u32,
+ rip_inst: Mir.Inst.Index,
pub const Tag = @typeInfo(Base).@"union".tag_type.?;
-
- pub fn isExtended(self: Base) bool {
- return switch (self) {
- .none, .frame, .table, .reloc => false, // rsp, rbp, and rip are not extended
- .reg => |reg| reg.isExtended(),
- };
- }
};
pub const Mod = union(enum(u1)) {
diff --git a/src/arch/x86_64/encoder.zig b/src/arch/x86_64/encoder.zig
@@ -138,7 +138,7 @@ pub const Instruction = struct {
.moffs => true,
.rip => false,
.sib => |s| switch (s.base) {
- .none, .frame, .table, .reloc => false,
+ .none, .frame, .table, .reloc, .rip_inst => false,
.reg => |reg| reg.class() == .segment,
},
};
@@ -206,19 +206,22 @@ pub const Instruction = struct {
};
}
- pub fn isBaseExtended(op: Operand) bool {
+ pub fn baseExtEnc(op: Operand) u2 {
return switch (op) {
- .none, .imm => false,
- .reg => |reg| reg.isExtended(),
- .mem => |mem| mem.base().isExtended(),
+ .none, .imm => 0b00,
+ .reg => |reg| @truncate(reg.enc() >> 3),
+ .mem => |mem| switch (mem.base()) {
+ .none, .frame, .table, .reloc, .rip_inst => 0b00, // rsp, rbp, and rip are not extended
+ .reg => |reg| @truncate(reg.enc() >> 3),
+ },
.bytes => unreachable,
};
}
- pub fn isIndexExtended(op: Operand) bool {
+ pub fn indexExtEnc(op: Operand) u2 {
return switch (op) {
- .none, .reg, .imm => false,
- .mem => |mem| if (mem.scaleIndex()) |si| si.index.isExtended() else false,
+ .none, .reg, .imm => 0b00,
+ .mem => |mem| if (mem.scaleIndex()) |si| @truncate(si.index.enc() >> 3) else 0b00,
.bytes => unreachable,
};
}
@@ -279,6 +282,7 @@ pub const Instruction = struct {
.frame => |frame_index| try writer.print("{}", .{frame_index}),
.table => try writer.print("Table", .{}),
.reloc => |sym_index| try writer.print("Symbol({d})", .{sym_index}),
+ .rip_inst => |inst_index| try writer.print("RipInst({d})", .{inst_index}),
}
if (mem.scaleIndex()) |si| {
if (any) try writer.writeAll(" + ");
@@ -421,14 +425,14 @@ pub const Instruction = struct {
};
switch (mem_op) {
.reg => |reg| {
- const rm = switch (data.op_en) {
+ const rm: u3 = switch (data.op_en) {
.ia, .m, .mi, .m1, .mc, .vm, .vmi => enc.modRmExt(),
- .mr, .mri, .mrc => inst.ops[1].reg.lowEnc(),
- .rm, .rmi, .rm0, .rvm, .rvmr, .rvmi, .rmv => inst.ops[0].reg.lowEnc(),
- .mvr => inst.ops[2].reg.lowEnc(),
+ .mr, .mri, .mrc => @truncate(inst.ops[1].reg.enc()),
+ .rm, .rmi, .rm0, .rvm, .rvmr, .rvmi, .rmv => @truncate(inst.ops[0].reg.enc()),
+ .mvr => @truncate(inst.ops[2].reg.enc()),
else => unreachable,
};
- try encoder.modRm_direct(rm, reg.lowEnc());
+ try encoder.modRm_direct(rm, @truncate(reg.enc()));
},
.mem => |mem| {
const op = switch (data.op_en) {
@@ -447,7 +451,7 @@ pub const Instruction = struct {
.ia => try encodeImm(inst.ops[0].imm, data.ops[0], encoder),
.mi => try encodeImm(inst.ops[1].imm, data.ops[1], encoder),
.rmi, .mri, .vmi => try encodeImm(inst.ops[2].imm, data.ops[2], encoder),
- .rvmr => try encoder.imm8(@as(u8, inst.ops[3].reg.enc()) << 4),
+ .rvmr => try encoder.imm8(@as(u8, @as(u4, @intCast(inst.ops[3].reg.enc()))) << 4),
.rvmi => try encodeImm(inst.ops[3].imm, data.ops[3], encoder),
else => {},
}
@@ -461,8 +465,8 @@ pub const Instruction = struct {
const final = opcode.len - 1;
for (opcode[first..final]) |byte| try encoder.opcode_1byte(byte);
switch (inst.encoding.data.op_en) {
- .o, .oz, .oi => try encoder.opcode_withReg(opcode[final], inst.ops[0].reg.lowEnc()),
- .zo => try encoder.opcode_withReg(opcode[final], inst.ops[1].reg.lowEnc()),
+ .o, .oz, .oi => try encoder.opcode_withReg(opcode[final], @truncate(inst.ops[0].reg.enc())),
+ .zo => try encoder.opcode_withReg(opcode[final], @truncate(inst.ops[1].reg.enc())),
else => try encoder.opcode_1byte(opcode[final]),
}
}
@@ -532,23 +536,29 @@ pub const Instruction = struct {
switch (op_en) {
.z, .i, .zi, .ii, .ia, .fd, .td, .d => {},
- .o, .oz, .oi => rex.b = inst.ops[0].reg.isExtended(),
- .zo => rex.b = inst.ops[1].reg.isExtended(),
+ .o, .oz, .oi => rex.b = inst.ops[0].reg.enc() & 0b01000 != 0,
+ .zo => rex.b = inst.ops[1].reg.enc() & 0b01000 != 0,
.m, .mi, .m1, .mc, .mr, .rm, .rmi, .mri, .mrc, .rm0, .rmv => {
const r_op = switch (op_en) {
.rm, .rmi, .rm0, .rmv => inst.ops[0],
.mr, .mri, .mrc => inst.ops[1],
else => .none,
};
- rex.r = r_op.isBaseExtended();
+ const r_op_base_ext_enc = r_op.baseExtEnc();
+ rex.r = r_op_base_ext_enc & 0b01 != 0;
+ assert(r_op_base_ext_enc & 0b10 == 0);
const b_x_op = switch (op_en) {
.rm, .rmi, .rm0 => inst.ops[1],
.m, .mi, .m1, .mc, .mr, .mri, .mrc => inst.ops[0],
else => unreachable,
};
- rex.b = b_x_op.isBaseExtended();
- rex.x = b_x_op.isIndexExtended();
+ const b_x_op_base_ext_enc = b_x_op.baseExtEnc();
+ rex.b = b_x_op_base_ext_enc & 0b01 != 0;
+ assert(b_x_op_base_ext_enc & 0b10 == 0);
+ const b_x_op_index_ext_enc = b_x_op.indexExtEnc();
+ rex.x = b_x_op_index_ext_enc & 0b01 != 0;
+ assert(b_x_op_index_ext_enc & 0b10 == 0);
},
.vm, .vmi, .rvm, .rvmr, .rvmi, .mvr => unreachable,
}
@@ -575,7 +585,9 @@ pub const Instruction = struct {
.m, .mi, .m1, .mc, .vm, .vmi => .none,
else => unreachable,
};
- vex.r = r_op.isBaseExtended();
+ const r_op_base_ext_enc = r_op.baseExtEnc();
+ vex.r = r_op_base_ext_enc & 0b01 != 0;
+ assert(r_op_base_ext_enc & 0b10 == 0);
const b_x_op = switch (op_en) {
.rm, .rmi, .rm0, .vm, .vmi, .rmv => inst.ops[1],
@@ -583,8 +595,12 @@ pub const Instruction = struct {
.rvm, .rvmr, .rvmi => inst.ops[2],
else => unreachable,
};
- vex.b = b_x_op.isBaseExtended();
- vex.x = b_x_op.isIndexExtended();
+ const b_x_op_base_ext_enc = b_x_op.baseExtEnc();
+ vex.b = b_x_op_base_ext_enc & 0b01 != 0;
+ assert(b_x_op_base_ext_enc & 0b10 == 0);
+ const b_x_op_index_ext_enc = b_x_op.indexExtEnc();
+ vex.x = b_x_op_index_ext_enc & 0b01 != 0;
+ assert(b_x_op_index_ext_enc & 0b10 == 0);
},
}
@@ -621,8 +637,8 @@ pub const Instruction = struct {
}
fn encodeMemory(encoding: Encoding, mem: Memory, operand: Operand, encoder: anytype) !void {
- const operand_enc = switch (operand) {
- .reg => |reg| reg.lowEnc(),
+ const operand_enc: u3 = switch (operand) {
+ .reg => |reg| @truncate(reg.enc()),
.none => encoding.modRmExt(),
else => unreachable,
};
@@ -634,7 +650,7 @@ pub const Instruction = struct {
try encoder.modRm_SIBDisp0(operand_enc);
if (mem.scaleIndex()) |si| {
const scale = math.log2_int(u4, si.scale);
- try encoder.sib_scaleIndexDisp32(scale, si.index.lowEnc());
+ try encoder.sib_scaleIndexDisp32(scale, @truncate(si.index.enc()));
} else {
try encoder.sib_disp32();
}
@@ -646,21 +662,21 @@ pub const Instruction = struct {
try encoder.modRm_SIBDisp0(operand_enc);
if (mem.scaleIndex()) |si| {
const scale = math.log2_int(u4, si.scale);
- try encoder.sib_scaleIndexDisp32(scale, si.index.lowEnc());
+ try encoder.sib_scaleIndexDisp32(scale, @truncate(si.index.enc()));
} else {
try encoder.sib_disp32();
}
try encoder.disp32(sib.disp);
},
.general_purpose => {
- const dst = base.lowEnc();
+ const dst: u3 = @truncate(base.enc());
const src = operand_enc;
if (dst == 4 or mem.scaleIndex() != null) {
if (sib.disp == 0 and dst != 5) {
try encoder.modRm_SIBDisp0(src);
if (mem.scaleIndex()) |si| {
const scale = math.log2_int(u4, si.scale);
- try encoder.sib_scaleIndexBase(scale, si.index.lowEnc(), dst);
+ try encoder.sib_scaleIndexBase(scale, @truncate(si.index.enc()), dst);
} else {
try encoder.sib_base(dst);
}
@@ -668,7 +684,7 @@ pub const Instruction = struct {
try encoder.modRm_SIBDisp8(src);
if (mem.scaleIndex()) |si| {
const scale = math.log2_int(u4, si.scale);
- try encoder.sib_scaleIndexBaseDisp8(scale, si.index.lowEnc(), dst);
+ try encoder.sib_scaleIndexBaseDisp8(scale, @truncate(si.index.enc()), dst);
} else {
try encoder.sib_baseDisp8(dst);
}
@@ -677,7 +693,7 @@ pub const Instruction = struct {
try encoder.modRm_SIBDisp32(src);
if (mem.scaleIndex()) |si| {
const scale = math.log2_int(u4, si.scale);
- try encoder.sib_scaleIndexBaseDisp32(scale, si.index.lowEnc(), dst);
+ try encoder.sib_scaleIndexBaseDisp32(scale, @truncate(si.index.enc()), dst);
} else {
try encoder.sib_baseDisp32(dst);
}
@@ -705,6 +721,10 @@ pub const Instruction = struct {
try encoder.modRm_indirectDisp32(operand_enc, 0);
try encoder.disp32(undefined);
} else return error.CannotEncode,
+ .rip_inst => {
+ try encoder.modRm_RIPDisp32(operand_enc);
+ try encoder.disp32(sib.disp);
+ },
},
.rip => |rip| {
try encoder.modRm_RIPDisp32(operand_enc);
@@ -862,7 +882,7 @@ fn Encoder(comptime T: type, comptime opts: Options) type {
try self.writer.writeByte(
@as(u8, @intFromBool(fields.w)) << 7 |
- @as(u8, ~fields.v.enc()) << 3 |
+ @as(u8, ~@as(u4, @intCast(fields.v.enc()))) << 3 |
@as(u8, @intFromBool(fields.l)) << 2 |
@as(u8, @intFromEnum(fields.p)) << 0,
);
@@ -870,7 +890,7 @@ fn Encoder(comptime T: type, comptime opts: Options) type {
try self.writer.writeByte(0b1100_0101);
try self.writer.writeByte(
@as(u8, ~@intFromBool(fields.r)) << 7 |
- @as(u8, ~fields.v.enc()) << 3 |
+ @as(u8, ~@as(u4, @intCast(fields.v.enc()))) << 3 |
@as(u8, @intFromBool(fields.l)) << 2 |
@as(u8, @intFromEnum(fields.p)) << 0,
);
diff --git a/test/behavior/math.zig b/test/behavior/math.zig
@@ -787,7 +787,6 @@ fn should_not_be_zero(x: f128) !void {
test "umax wrapped squaring" {
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
- if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
{
@@ -1050,13 +1049,13 @@ test "@mulWithOverflow bitsize > 32" {
}
test "@mulWithOverflow bitsize 128 bits" {
- if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
try testMulWithOverflow(u128, 3, 0x5555555555555555_5555555555555555, 0xffffffffffffffff_ffffffffffffffff, 0);
try testMulWithOverflow(u128, 3, 0x5555555555555555_5555555555555556, 2, 1);
@@ -1070,13 +1069,19 @@ test "@mulWithOverflow bitsize 128 bits" {
try testMulWithOverflow(i128, 3, -0x2aaaaaaaaaaaaaaa_aaaaaaaaaaaaaaab, 0x7fffffffffffffff_ffffffffffffffff, 1);
try testMulWithOverflow(i128, -1, -1, 1, 0);
try testMulWithOverflow(i128, minInt(i128), minInt(i128), 0, 1);
+
+ try testMulWithOverflow(i128, 1 << 126, 1 << 1, -1 << 127, 1);
+ try testMulWithOverflow(i128, -1 << 105, 1 << 22, -1 << 127, 0);
+ try testMulWithOverflow(i128, 1 << 84, -1 << 43, -1 << 127, 0);
+ try testMulWithOverflow(i128, -1 << 63, -1 << 64, -1 << 127, 1);
}
-test "@mulWithOverflow u256" {
+test "@mulWithOverflow bitsize 256 bits" {
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
{
const const_lhs: u256 = 8035709466408580321693645878924206181189;
@@ -1106,6 +1111,10 @@ test "@mulWithOverflow u256" {
try std.testing.expect(var_result[0] == const_result[0]);
try std.testing.expect(var_result[1] == const_result[1]);
}
+ try testMulWithOverflow(i256, 1 << 254, 1 << 1, -1 << 255, 1);
+ try testMulWithOverflow(i256, -1 << 212, 1 << 43, -1 << 255, 0);
+ try testMulWithOverflow(i256, 1 << 170, -1 << 85, -1 << 255, 0);
+ try testMulWithOverflow(i256, -1 << 128, -1 << 127, -1 << 255, 1);
}
fn testSubWithOverflow(comptime T: type, a: T, b: T, sub: T, bit: u1) !void {
diff --git a/test/behavior/switch.zig b/test/behavior/switch.zig
@@ -43,7 +43,6 @@ fn testSwitchWithAllRanges(x: u32, y: u32) u32 {
}
test "switch arbitrary int size" {
- if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
diff --git a/test/behavior/x86_64.zig b/test/behavior/x86_64.zig
@@ -7,6 +7,8 @@ test {
if (builtin.object_format == .macho) return error.SkipZigTest;
// COFF linker does not support the new backend.
if (builtin.object_format == .coff) return error.SkipZigTest;
- _ = @import("x86_64/math.zig");
+ _ = @import("x86_64/binary.zig");
+ _ = @import("x86_64/cast.zig");
_ = @import("x86_64/mem.zig");
+ _ = @import("x86_64/unary.zig");
}
diff --git a/test/behavior/x86_64/binary.zig b/test/behavior/x86_64/binary.zig
@@ -81,26 +81,88 @@ fn binary(comptime op: anytype, comptime opts: struct { compare: Compare = .rela
);
}
fn testInts() !void {
- try testArgs(i4, 0x3, 0x2);
- try testArgs(u4, 0xe, 0x6);
- try testArgs(i8, 0x48, 0x6c);
- try testArgs(u8, 0xbb, 0x43);
- try testArgs(i16, -0x0fdf, 0x302e);
- try testArgs(u16, 0xb8bf, 0x626d);
- try testArgs(i32, -0x6280178f, 0x6802c034);
- try testArgs(u32, 0x80d7a2c6, 0xbff6a402);
- try testArgs(i64, 0x0365a53b8ee0c987, -0x1bb6d3013500a7d2);
- try testArgs(u64, 0x71138bc6b4a38898, 0x1bc4043de9438c7b);
- try testArgs(i128, 0x76d428c46cdeaa2ac43de8abffb22f6d, 0x427f7545abe434a12544fdbe2a012889);
- try testArgs(u128, 0xe05fc132ef2cd8affee00a907f0a851f, 0x29f912a72cfc6a7c6973426a9636da9a);
- try testArgs(i256, -0x53d4148cee74ea43477a65b3daa7b8fdadcbf4508e793f4af113b8d8da5a7eb6, -0x30dcbaf7b9b7a3df033694e6795444d842fb0b8f79bc18b3ea8a6b7ccad3ea91);
- try testArgs(u256, 0xb7935f5c2f3b1ae7a422c0a7c446884294b7d5370bada307d2fe5a4c4284a999, 0x310e6e196ba4f143b8d285ca6addf7f3bb3344224aff221b27607a31e148be08);
- try testArgs(i258, -0x0eee283365108dbeea0bec82f5147418d8ffe86f9eed00e414b4eccd65c21239a, -0x122c730073fc29a24cd6e3e6263566879bc5325d8566b8db31fcb4a76f7ab95eb);
- try testArgs(u258, 0x186d5ddaab8cb8cb04e5b41e36f812e039d008baf49f12894c39e29a07796d800, 0x2072daba6ffad168826163eb136f6d28ca4360c8e7e5e41e29755e19e4753a4f5);
- try testArgs(i495, 0x2fe6bc5448c55ce18252e2c9d44777505dfe63ff249a8027a6626c7d8dd9893fd5731e51474727be556f757facb586a4e04bbc0148c6c7ad692302f46fbd, -0x016a358821ef8240172f3a08e8830c06e6bcf2225f5f4d41ed42b44d249385f55cc594e1278ecac31c73faed890e5054af1a561483bb1bb6fb1f753514cf);
- try testArgs(u495, 0x6eaf4e252b3bf74b75bac59e0b43ca5326bad2a25b3fdb74a67ef132ac5e47d72eebc3316fb2351ee66c50dc5afb92a75cea9b0e35160652c7db39eeb158, 0x49fbed744a92b549d8c05bb3512c617d24dd824f3f69bdf3923bc326a75674b85f5b828d2566fab9c86f571d12c2a63c9164feb0d191d27905533d09622a);
- try testArgs(i512, -0x3a6876ca92775286c6e1504a64a9b8d56985bebf4a1b66539d404e0e96f24b226f70c4bcff295fdc2043b82513b2052dc45fd78f7e9e80e5b3e101757289f054, 0x5080c516a819bd32a0a5f0976441bbfbcf89e77684f1f10eb326aeb28e1f8d593278cff60fc99b8ffc87d8696882c64728dd3c322b7142803f4341f85a03bc10);
- try testArgs(u512, 0xe5b1fedca3c77db765e517aabd05ffc524a3a8aff1784bbf67c45b894447ede32b65b9940e78173c591e56e078932d465f235aece7ad47b7f229df7ba8f12295, 0x8b4bb7c2969e3b121cc1082c442f8b4330f0a50058438fed56447175bb10178607ecfe425cb54dacc25ef26810f3e04681de1844f1aa8d029aca75d658634806);
+ try testArgs(i1, 0x0, -0x1);
+ try testArgs(u1, 0x1, 0x1);
+ try testArgs(i2, 0x0, -0x2);
+ try testArgs(u2, 0x2, 0x1);
+ try testArgs(i3, 0x1, -0x3);
+ try testArgs(u3, 0x6, 0x1);
+ try testArgs(i4, 0x6, 0x3);
+ try testArgs(u4, 0x8, 0x5);
+ try testArgs(i5, -0x9, -0xd);
+ try testArgs(u5, 0x5, 0x13);
+ try testArgs(i7, 0x34, 0x1d);
+ try testArgs(u7, 0x31, 0x56);
+ try testArgs(i8, -0x57, -0x70);
+ try testArgs(u8, 0x12, 0xd6);
+ try testArgs(i9, -0x8a, -0xa0);
+ try testArgs(u9, 0xf8, 0x95);
+ try testArgs(i15, -0x790, 0x116f);
+ try testArgs(u15, 0x548b, 0x4cd6);
+ try testArgs(i16, -0x2d17, -0x5c17);
+ try testArgs(u16, 0xadc0, 0xb223);
+ try testArgs(i17, 0xe543, 0xaad5);
+ try testArgs(u17, 0x9515, 0xa3c1);
+ try testArgs(i31, -0x28858a2f, 0x369e917a);
+ try testArgs(u31, 0x32bab794, 0x75464e7f);
+ try testArgs(i32, 0x79e74e44, 0x61fe4ab1);
+ try testArgs(u32, 0xc82f8e2, 0x5dde37e2);
+ try testArgs(i33, -0xa4cbaa13, -0x4d20ee61);
+ try testArgs(u33, 0x17461d437, 0x16cbc228f);
+ try testArgs(i63, 0x333220e16b1e53fb, 0x121a0d970a5a4504);
+ try testArgs(u63, 0x2dcd94e2ae4aa2af, 0x5f401e6e287a4dd7);
+ try testArgs(i64, 0x17e6bb7d8d430410, 0x760d42736f4b445c);
+ try testArgs(u64, 0x430970421452be50, 0xb4b5e96f4183b5fc);
+ try testArgs(i65, 0xb4477484679a6576, 0x21c9a3100d35de49);
+ try testArgs(u65, 0x1b7ffa914193a316, 0x6751268790308460);
+ try testArgs(i95, 0xd573e2100686f5df03aa29f, 0x4f7c921eb980b43a554b763);
+ try testArgs(u95, 0x62791162d2740f3ae84a9fcf, 0x1b6e66ae70bb9785a2118ecc);
+ try testArgs(i96, -0x6dc72375264ab887ea6073d5, 0x357ca705a600e94f6dd114c9);
+ try testArgs(u96, 0x77867877aae9bc90b2b57ce7, 0xd9a5352eb86061b67a61b212);
+ try testArgs(i97, 0x76f421e0ccfc6e7531c03ad5, 0x6775cdacdfca5455771c0dae);
+ try testArgs(u97, 0xaeb79499018e490b6aa2a5fc, 0x6cf53b08068cf25bdc307606);
+ try testArgs(i127, -0xc6de705251f892f8ba6a4f10aee0c7, -0x1598d3c6fd635ec0796a584af7479027);
+ try testArgs(u127, 0x5b3ec94f88a61621be2f745e90153390, 0x72456ad6a7ef886decf13195a50ca4d6);
+ try testArgs(i128, -0x44570544f745b89beb111016359577d5, -0x48904e59a05caede0974f916efba61a0);
+ try testArgs(u128, 0x3b14f670f6ac712d087a9ec7b15394d2, 0x19b69cb71a6763a9dc5baec5bb818450);
+ try testArgs(i129, 0xd58a765abb324106d83362db47fc374d, 0x548642028e222abf2ee21a1999a8ac5f);
+ try testArgs(u129, 0x1144fb18eba36e437bc45a73bbe25f10e, 0xdc7cb5f65f5127b00a842adf3f5a5231);
+ try testArgs(i159, 0x3121c6ae74c46679386f2051ee0520d9264e01cf, -0x34fec2cf28ce549281a5dc79f7ed834483f418af);
+ try testArgs(u159, 0x2e479684775f86a8ff1a9c6fab9022b18a6f6be4, 0x63c77ea3d97ad2c715fd13db972e678fefe3efba);
+ try testArgs(i160, 0x1e55924219aa114ef8d2b3193d09ae7849a3e551, -0x13f1ff6a62e562f7b78559f032bb05b2e2d15748);
+ try testArgs(u160, 0x8ed3d206fcc59350cf23dcd9e042eb36bcc63e52, 0xc88e1c5a42abf98aee0a3479e7f4fe88ab53b6f2);
+ try testArgs(i161, -0xd3d6885c0df36bd513aca744561684d12a62f044, 0xa519d3c4a7ea2e4768d840ec8641995689de6116);
+ try testArgs(u161, 0x10b4afdfa36471c77a2b629ef85e1289b798161b, 0x15e89da33c31ec01adf6921b8d13bc943f139fba2);
+ try testArgs(i191, 0x2436122b85c017733d9d28347544298d148223e1d9cbf0a2, 0x46b80688a0e0b59e66628940772893fcce258d3da7c0193);
+ try testArgs(u191, 0x3d00a8da821de44f98fa70d298bda9e25f99d8f54936d09f, 0x4ad4440686be966599985094f16e364c961503214ff86519);
+ try testArgs(i192, 0x124d0580271a71745f842e3a81d8cb6154c7f6f4b8b0cf39, -0x5bae9d7d471e609f1570a3f9805b80c4d672a086d44107eb);
+ try testArgs(u192, 0x3b882677dc62d5c76cc942bea0d2f72925ff0a9e234d7ce9, 0x5d7825e3f2254bf214257ebe84716dc88fde6c9563218ac4);
+ try testArgs(i193, 0x9c143db83d19c8fff1c23f3c93b103eaf8be02910a1cbe5, 0xcfa1059ba12508d2ff3ef9763ce8224eb1d0a0f22def289d);
+ try testArgs(u193, 0x635890f170da79117490445db595c1f2bb5a5cf640abc8e8, 0xdb5a2a6a3c6db7f43949123f0886cb93bbbed2d5dd7690e);
+ try testArgs(i223, -0x25e4a8d454e5957a9906a66a0c02ad53e727e3e18ca4b8be98561306, 0x8d6d3977afce56a5dffc537de19d4c73f2e5603699373d010e51d10);
+ try testArgs(u223, 0x5721636a3c6d271fe9eb08420d29454775666266801a7d23d61075be, 0x7e573fd8dcbd6dc780d13b61d5255cae790ea697d1c9a5479fa51ee);
+ try testArgs(i224, 0x51f97aaa96493aaed2677294bfde0715d69d961fef97a557ae9dbc84, 0x306d9305e2d5162dd0ce0454d2daaa54879b11a77386bb03e779a23e);
+ try testArgs(u224, 0xdc7eb2070c048b6fd22d6df97b3ef5e9fc5f28d8d229710333defecd, 0x475662887f29712bc927fae9de37cd842d883682a26e653d7b3f2ed9);
+ try testArgs(i225, -0x9b3dba4fe2026e8d90d9be4b8b2334034d2ae23569c4e1a3a311925d, -0x2ae4c074cff2da1e7fcab269ce6da7f4a9f763062f97526c0b4abf34);
+ try testArgs(u225, 0xb36dd536afb070e9be7fba5eaf548fe741182cabaf9f9510f86b3ffb, 0x1f35e5728f29e2566afd9a325beaf17ebf5f894e744825bdd56bb12d0);
+ try testArgs(i255, 0x2db696171e4045e17cb2a96763ff2728b459e5bf9ade6e9cd118bbc4f91aca89, -0x1580d80086052560091fe42077ce66c45d7e93173f74327f44fec7b63ed9f2aa);
+ try testArgs(u255, 0x392b3639141d03da49d576fd0ce498e1bafb8fc032604e68e91e589f6d2a05a3, 0x46f60e500f01bdbe18f71fb8dbef0395245a94f55421637ca50eb8922a751977);
+ try testArgs(i256, -0x2f3c22cb1d12628b2eccd705f1526d8a91258183742d9521bdc97d943591d87c, -0x864d3ef8b592e041289dbb54def60ceee798673138aa750a5efdaffcd42b62d);
+ try testArgs(u256, 0x25776f0ce5f3c6761eec99ace965f9162e9416e4d4e298674e5723b64e443528, 0xb1ee7fd2efaddd5d25eea49bde34e53c40d59221757f17d53d9a4c9ab7eca3f5);
+ try testArgs(i257, 0xd599706e1a09217f1f698520993d2b62ee877a4150bd8db6e5546657900dc7ce, 0x51d0faef82bb0878a4fd4331dcaec6ed57156acc2377c7e301eca6989e897346);
+ try testArgs(u257, 0xb0d42105facc0db629c5a65d6e975d25163841051efb1e187b70015f8c9e22ba, 0xf0eb6d0529e15fac6e97e850f50b7bf5056c9010345884926bf056590ddf3187);
+ try testArgs(i511, 0x23c07fa26fea1595de6e368cb42d05696562d8fb05a2aab6b304c443275071a31684a369f69f30fd53223017669dcf8157f7ff1bcda05ad28dcf46c92f7f2bd5, 0x44884ae45727d2c249b280cbb6795f237015f1082ade12167c52f0318422b3ae9c1753263011878e3fa4fce0db683efdd249e325188a40ccb959bd6bf050fbf);
+ try testArgs(u511, 0x642d98a41a7cc71dab7845c2c568696d0d77733c266846019756937cc29382d46074c8eb86502f4855c35f6354e51d98c41674166a9a7385ab94b0c7a63f58c0, 0x3cc5230f530a12c8cae29654e55a6d7cd26fe7606beed5c9a8fef443b107bf18dd8cc034683b47a213a3a885abd7048188713e8e7b9157145cd24748e256f5b7);
+ try testArgs(i512, -0x4b6d88a77e2a42d67daada905d16c6045b4dd57e608a0482f45531781d4994e2a6b71ad41a106b2dfc76e60aebd9e1d357b24b8d6889de3cf3e58ff3a48f54aa, -0x2e28e1b21ec33fd5dd9b1fbdc312e32884208b549ce0ca1661ca1150a6bd43363d4d186aa8ac70ad0595b44b5279ff070df8bd0b51095c62c8c499bfcaa7494c);
+ try testArgs(u512, 0xf40ad922664478a7b71a5676fc49434a45ba86975cef377c8321159cd880b67cd543fcca70187d5912675c0bc1fa4129cb470f280cde56ac4ec848ca589f143f, 0xe20a8110780ff05718adc173677ff0579126576f1fc3857ac41d6b7d5334d93134181af15ce2d35224d2e5c63384f33e331b16ecbc6db44edbb4074134d23e97);
+ try testArgs(i513, 0x55a556c6b6605897ffb7a791bdf309d5edb879f2841d1bba37006cdd0e7d00d971c85def024e28b7a17e53f3bcf5a5d5c43e780c6d13d67de1ca7b8f05deddfb, 0x53f475716443b38792e618ce109cec641aa351ce2e258a99153820c5522a4acc7f2b5b4ecd0000bcbe5a410bbee200576f6ff17ce7e8b7d1f0752390d1bb9b3f);
+ try testArgs(u513, 0x1e4e15bc406c558c14f48b83090647d7f2254fa571eac7f8aad8edb76a90547f7854bd6315e50ad44ea93034db9fab450a584b53abf8537e31d39cd706a31eaa7, 0x1d348de8124b72ca1d0e382501024c9e1b0f6fc16c5cd4a86aef2731bd39c29173749afe94bb2992ea805148fe0d96abdc5980b2143bd81419c1e40bf81b2496f);
+ try testArgs(i1023, -0x37781a6086d9310e4cdb24f5f374736e32af53c9545298aa53fe17854f73052cd808f658efacea622c59adb51af4d2dd636521ca2717acc43389c975505b7543da2c62f33c3152907f13b1ffa5b9881b33acec3cab1d8e33c2239ea6835277c474629a9157f8acd7c1d83076c2e75a48a8d3a94067e801c51057e47e09f0be14, 0x39ad04132dec8b795b98fd7cd085605ce8354655633068ee485d9dc78853feb922a54a3df6209989d1137e4ea8b0ad2cae48b21df2e0c04feeca56d2551f12782312a6ae483ffff466ff78446ebd4d47a61c1cba2603a62b44a72800060dda7eec8bc9060b8c5533afa7946bd38e93fddb863392500c22616dd4ae4932f20fe4);
+ try testArgs(u1023, 0x6e14a9d998a9ef7ac77b6fe08225fcc176e687685736e0e32c9e6b8fe96e9a7b14b3318310e945f7f84128455075eedb4a7b7736185f58e5640688c5d3b47d785338a0b70e77f4d237fd85f7820f3ebe6eb30f5a71231e813a70d6c76963d66291f271cd6f462ce685a0270ec5f6e856340f91d7597cd2b779566fe3ff4d4a98, 0x211eafbd449691e390d14dd34cb9c4d32627ecbec485d4a0a7cca1b28bd81d2153a7a75c2f62c4c3c7f198740cfe65dfa3c86156aa0b6d22757fd07f4070ddd50e334782f045a58b96c5a8f04b4615968501e9b5e801c475bdc034919c9e9df6df3cbbd59bacfa9409b21c3365d10e132d75958774c6244446127b043d155ec4);
+ try testArgs(i1024, 0xa6bd15fd4c529a24e4d727c5c0db9422ed7038ba23944b2b54ffc8d3731e2ffc19e12d885010fb10d208ea045e2a4cfec32d190f221bd453ec73fcecc03e37fd70be3fba3945c881cb9bce69f3f6ad9a6ee0d42a393b3669d1ca518d0b7b06a2c47978f22bc1db8802ef6ce29ea51b48256c6fed82e04355665f9d27ff485b, -0x69f258c2a86e97161ce2e683801591976a8e5a71b88605450961ee271637e6c2fee13459c29d42d4c5fb408f80236d3b2db34752e307fee6cbce2e5088adc817902a5adbbba72c8be84b9f8af5ce0fac464cae61cff9cbbe3a8dcdbec0af855b2e6c2c19fbe4f01baec9ca28b78bd7d383281c71d81da74fd0a2c8a5b754ee57);
+ try testArgs(u1024, 0x111e0a4e0c61ab3c5229154539ddb010542cb528533b4ea13813d8dbbaca7de395aac3c22dae1bd9db8bf9005ea9ef3df253aefabdce060a93e60da6edc3b1b2d78aead4647e7a589b66aa53fb953742b71f823b539150918df0fe781ee4d00279e4da9995804391bb19504de2f108f7d6ba14d624fa175842bd429f638de8f9, 0xcf9160dcb7ed13a738f7c8b2a17ca2fe84f53620a50f6a948698c4efca88392dc104ef5d26f19c82c8f770f727585702cc8d1c4cc2bba9e691e61b055d98cd636347a7c50b3bd2b2f5dfa416dadbdd76c111d45598c93ef729588cf998a55260cfe94d376ec4e8dc132afa42b66b68bc826c50169f9f4fc798cf7e8f29df639a);
+ try testArgs(i1025, 0xef2102c2cab6ad6bf2f2ba09c154440e65acc56cb14c5221a12b12404f7eafefeab4537f70cc10afb945e93c935223ffd3146911021666fd68fcaa494ded54ce66d2832b1d82b0654f24f1183bbc3ee45eb15c424a74ad41f22c7009b86cb404ac3b810445679417d7e0c5d5f4e88dec7c90352afa367004facbc1d668ab0a7, 0xc7743d3a52bad9bed0d24dbeaac4f27f4790ee14e984484f7ee077e6285394f046f2ba6d3a9c6e0aea1c07de98741a88669a035ec4d9755130fe96414223486e89d710a743ca2c2b53871fdb4851d90a595111d8d12e6732e4b580e235218edee3bc56fca3de99bc5f9a37c9dbc9a8ca5aaba710ec5e498b58b239a1be56915b);
+ try testArgs(u1025, 0x1dea81169800bac2f3afcf3be5dbd2d8eefbace8a24a2da0a383a928d1109459f34028be4413119f1af00ad90ce4d63064016dc1cee5b783c79c1998a0a49de21c4db71d432273576503589fc966c7ec2d730fa9bc4c5ff3128a82653ab8149528de67804718e39722f89b91c75d012ea41c642c889f0db95c882a9790a5e922f, 0x156fe02946ab9069a644dcc1f2b1afa04ee88ab1de19575a2715abf4a52bf374d297fdf78455ccdb87a934d3d818d774b63865eaedfdad3c56a56b8fcc62703c391aedf16cf770af06d7d205f93778c012df54fe5290084e1cd2bbec86a2f295cdce69a2cd774e064580f3c9cfae60d17b12f610e86566e68d5183d706c8ad8af);
}
fn testFloats() !void {
@setEvalBranchQuota(21_700);
@@ -1942,130 +2004,67 @@ fn binary(comptime op: anytype, comptime opts: struct { compare: Compare = .rela
0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1,
});
- // workaround https://github.com/ziglang/zig/issues/22914
- // TODO: try testArgs(@Vector(1, i2), .{
- // 0x1,
- // }, .{
- // 0x1,
- // });
- // try testArgs(@Vector(2, i2), .{
- // 0x0, -0x2,
- // }, .{
- // -0x2, -0x2,
- // });
- // try testArgs(@Vector(4, i2), .{
- // -0x2, -0x1, 0x0, -0x2,
- // }, .{
- // -0x2, 0x1, -0x1, -0x2,
- // });
- // try testArgs(@Vector(8, i2), .{
- // -0x1, 0x1, 0x1, -0x1, -0x2, -0x2, 0x0, -0x2,
- // }, .{
- // -0x1, -0x1, -0x2, -0x1, -0x2, 0x1, -0x1, 0x1,
- // });
- // try testArgs(@Vector(16, i2), .{
- // 0x0, -0x2, -0x1, -0x2, 0x1, 0x0, -0x1, 0x0, 0x1, -0x2, 0x1, -0x1, -0x2, -0x2, 0x1, 0x0,
- // }, .{
- // -0x2, -0x2, 0x1, -0x2, -0x1, -0x2, -0x1, -0x2, -0x2, -0x2, -0x1, -0x2, 0x1, -0x2, -0x2, -0x2,
- // });
- // try testArgs(@Vector(32, i2), .{
- // -0x2, 0x1, -0x1, 0x1, 0x0, -0x2, 0x1, -0x2, -0x2, 0x0, -0x1, 0x0, -0x2, -0x2, 0x0, 0x1,
- // -0x1, 0x1, -0x1, 0x1, 0x1, 0x1, 0x1, -0x2, -0x1, -0x1, 0x1, -0x2, 0x0, -0x1, 0x0, -0x2,
- // }, .{
- // 0x1, -0x1, 0x1, -0x1, 0x1, 0x1, 0x1, -0x2, 0x1, -0x2, -0x1, -0x2, 0x1, 0x1, 0x1, -0x1,
- // -0x2, 0x1, 0x1, -0x1, -0x2, -0x2, -0x1, -0x2, -0x1, -0x2, 0x1, -0x2, -0x1, 0x1, -0x2, -0x2,
- // });
- // try testArgs(@Vector(64, i2), .{
- // 0x1, -0x2, -0x1, 0x0, 0x1, -0x2, -0x1, -0x2, -0x2, -0x1, -0x2, -0x1, 0x1, 0x1, 0x0, 0x1,
- // -0x1, -0x1, -0x1, 0x1, 0x1, -0x1, 0x0, 0x1, -0x1, 0x0, 0x0, 0x1, 0x1, 0x0, -0x2, -0x2,
- // 0x1, 0x0, -0x2, -0x2, 0x1, -0x2, -0x2, 0x1, 0x1, -0x2, 0x1, 0x0, 0x0, -0x1, 0x0, 0x1,
- // -0x2, 0x0, 0x0, -0x1, -0x1, 0x1, -0x2, 0x0, -0x2, 0x0, -0x2, 0x1, 0x0, -0x1, -0x1, 0x1,
- // }, .{
- // -0x2, -0x2, 0x1, -0x1, -0x2, -0x2, -0x1, -0x2, 0x1, 0x1, 0x1, -0x1, 0x1, 0x1, 0x1, -0x1,
- // -0x2, 0x1, 0x1, -0x2, -0x2, 0x1, 0x1, -0x1, -0x2, -0x2, 0x1, -0x1, -0x2, 0x1, -0x2, 0x1,
- // 0x1, -0x2, -0x2, -0x2, -0x2, 0x1, 0x1, 0x1, -0x2, 0x1, -0x1, 0x1, -0x1, 0x1, 0x1, -0x1,
- // -0x2, 0x1, -0x1, 0x1, -0x1, -0x1, 0x1, 0x1, -0x2, 0x1, 0x1, -0x2, -0x2, -0x1, -0x2, -0x2,
- // });
- // try testArgs(@Vector(128, i2), .{
- // -0x1, -0x2, 0x0, -0x2, -0x2, 0x1, -0x1, 0x0, -0x1, -0x2, 0x0, -0x2, 0x0, 0x1, 0x0, -0x1,
- // 0x0, -0x2, 0x1, 0x0, 0x1, 0x0, -0x2, 0x1, 0x1, 0x1, -0x1, 0x1, 0x0, -0x1, 0x1, -0x1,
- // 0x1, -0x2, 0x1, -0x2, 0x1, -0x2, 0x1, -0x2, -0x2, -0x2, 0x0, 0x0, 0x1, 0x1, -0x2, -0x1,
- // 0x1, 0x0, 0x0, 0x1, -0x2, -0x1, 0x0, -0x1, 0x1, -0x2, 0x1, 0x0, 0x1, 0x0, 0x0, -0x2,
- // 0x0, 0x0, -0x1, 0x1, -0x1, 0x0, -0x1, -0x2, 0x1, -0x2, -0x2, -0x1, -0x2, 0x0, 0x0, 0x0,
- // -0x1, -0x1, -0x1, -0x1, -0x2, 0x0, -0x1, 0x1, 0x0, 0x0, -0x2, 0x0, 0x0, 0x0, 0x0, 0x1,
- // 0x1, -0x2, 0x0, 0x0, -0x1, -0x1, 0x1, -0x1, -0x2, 0x0, -0x1, -0x1, -0x2, -0x2, 0x0, 0x0,
- // -0x1, 0x0, 0x1, 0x0, -0x1, -0x2, 0x1, -0x2, -0x1, -0x1, 0x0, 0x0, -0x1, 0x0, 0x0, 0x1,
- // }, .{
- // -0x2, -0x2, 0x1, 0x1, -0x2, -0x1, 0x1, 0x1, 0x1, -0x2, -0x2, 0x1, -0x2, -0x2, 0x1, -0x1,
- // -0x1, -0x2, 0x1, -0x1, 0x1, 0x1, 0x1, -0x1, -0x1, -0x1, -0x1, -0x1, -0x1, 0x1, 0x1, -0x2,
- // -0x1, -0x2, -0x2, -0x2, -0x2, -0x2, -0x1, -0x2, 0x1, 0x1, -0x1, -0x1, -0x1, -0x1, 0x1, -0x2,
- // 0x1, -0x1, 0x1, -0x1, 0x1, 0x1, -0x1, -0x2, 0x1, 0x1, -0x2, -0x2, -0x2, 0x1, 0x1, -0x2,
- // -0x1, 0x1, -0x2, -0x1, -0x1, 0x1, -0x2, -0x2, 0x1, 0x1, -0x2, -0x1, -0x2, -0x2, -0x2, -0x2,
- // 0x1, -0x1, 0x1, -0x2, 0x1, -0x1, -0x1, 0x1, 0x1, -0x1, 0x1, -0x1, -0x2, -0x2, -0x1, -0x2,
- // -0x2, 0x1, -0x2, -0x2, -0x1, -0x1, -0x1, -0x2, 0x1, -0x2, 0x1, -0x2, 0x1, -0x2, -0x2, 0x1,
- // 0x1, -0x1, 0x1, 0x1, -0x1, -0x2, 0x1, 0x1, -0x1, -0x2, -0x1, -0x1, 0x1, -0x2, -0x2, -0x2,
- // });
try testArgs(@Vector(1, i2), .{
- -0x1,
+ 0x1,
}, .{
- -0x2,
+ 0x1,
});
try testArgs(@Vector(2, i2), .{
- -0x1, -0x1,
+ 0x0, -0x2,
}, .{
- 0x1, -0x1,
+ -0x2, -0x2,
});
try testArgs(@Vector(4, i2), .{
- -0x1, 0x1, -0x1, -0x1,
+ -0x2, -0x1, 0x0, -0x2,
}, .{
- 0x1, -0x1, -0x1, 0x1,
+ -0x2, 0x1, -0x1, -0x2,
});
try testArgs(@Vector(8, i2), .{
- 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, -0x1, 0x1,
+ -0x1, 0x1, 0x1, -0x1, -0x2, -0x2, 0x0, -0x2,
}, .{
- 0x1, -0x1, -0x1, -0x2, -0x1, -0x2, -0x1, 0x1,
+ -0x1, -0x1, -0x2, -0x1, -0x2, 0x1, -0x1, 0x1,
});
try testArgs(@Vector(16, i2), .{
- 0x1, 0x0, 0x0, -0x1, 0x1, 0x0, 0x1, -0x1, -0x1, -0x1, -0x1, -0x1, -0x1, 0x1, 0x1, 0x0,
+ 0x0, -0x2, -0x1, -0x2, 0x1, 0x0, -0x1, 0x0, 0x1, -0x2, 0x1, -0x1, -0x2, -0x2, 0x1, 0x0,
}, .{
- 0x1, 0x1, 0x1, 0x1, -0x2, -0x2, -0x1, -0x1, -0x1, -0x2, 0x1, 0x1, -0x1, -0x2, -0x1, -0x1,
+ -0x2, -0x2, 0x1, -0x2, -0x1, -0x2, -0x1, -0x2, -0x2, -0x2, -0x1, -0x2, 0x1, -0x2, -0x2, -0x2,
});
try testArgs(@Vector(32, i2), .{
- 0x0, 0x1, -0x1, -0x1, -0x1, 0x0, -0x1, 0x0, -0x1, -0x1, 0x1, -0x1, 0x0, -0x1, 0x0, -0x1,
- -0x1, 0x1, 0x1, 0x1, -0x1, -0x1, 0x1, -0x1, -0x1, 0x1, -0x1, -0x1, 0x1, 0x0, 0x0, 0x1,
+ -0x2, 0x1, -0x1, 0x1, 0x0, -0x2, 0x1, -0x2, -0x2, 0x0, -0x1, 0x0, -0x2, -0x2, 0x0, 0x1,
+ -0x1, 0x1, -0x1, 0x1, 0x1, 0x1, 0x1, -0x2, -0x1, -0x1, 0x1, -0x2, 0x0, -0x1, 0x0, -0x2,
}, .{
- -0x2, -0x1, -0x2, 0x1, -0x1, 0x1, -0x2, -0x2, -0x1, -0x1, -0x1, -0x1, 0x1, 0x1, 0x1, -0x2,
- -0x1, -0x1, -0x2, -0x2, -0x1, -0x2, -0x1, 0x1, -0x2, -0x1, -0x1, -0x2, 0x1, -0x2, -0x2, -0x1,
+ 0x1, -0x1, 0x1, -0x1, 0x1, 0x1, 0x1, -0x2, 0x1, -0x2, -0x1, -0x2, 0x1, 0x1, 0x1, -0x1,
+ -0x2, 0x1, 0x1, -0x1, -0x2, -0x2, -0x1, -0x2, -0x1, -0x2, 0x1, -0x2, -0x1, 0x1, -0x2, -0x2,
});
try testArgs(@Vector(64, i2), .{
- 0x1, 0x1, -0x1, 0x0, 0x0, 0x1, 0x1, -0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0,
- -0x1, 0x0, 0x0, 0x0, 0x0, -0x1, 0x0, 0x1, 0x1, 0x0, 0x1, -0x1, -0x1, 0x0, -0x1, 0x0,
- -0x1, 0x1, -0x1, 0x0, -0x1, 0x1, 0x0, 0x0, 0x0, 0x1, -0x1, 0x0, -0x1, 0x1, 0x0, 0x0,
- 0x1, -0x1, -0x1, 0x0, 0x1, -0x1, -0x1, 0x0, 0x1, 0x1, -0x1, 0x0, 0x1, -0x1, 0x0, 0x0,
+ 0x1, -0x2, -0x1, 0x0, 0x1, -0x2, -0x1, -0x2, -0x2, -0x1, -0x2, -0x1, 0x1, 0x1, 0x0, 0x1,
+ -0x1, -0x1, -0x1, 0x1, 0x1, -0x1, 0x0, 0x1, -0x1, 0x0, 0x0, 0x1, 0x1, 0x0, -0x2, -0x2,
+ 0x1, 0x0, -0x2, -0x2, 0x1, -0x2, -0x2, 0x1, 0x1, -0x2, 0x1, 0x0, 0x0, -0x1, 0x0, 0x1,
+ -0x2, 0x0, 0x0, -0x1, -0x1, 0x1, -0x2, 0x0, -0x2, 0x0, -0x2, 0x1, 0x0, -0x1, -0x1, 0x1,
}, .{
- -0x1, 0x1, -0x2, -0x1, -0x1, 0x1, 0x1, -0x2, -0x2, 0x1, 0x1, -0x1, -0x2, 0x1, 0x1, -0x1,
- -0x1, -0x1, 0x1, -0x2, -0x2, -0x2, -0x1, -0x1, -0x2, 0x1, -0x2, -0x2, -0x2, 0x1, -0x2, -0x2,
- -0x2, -0x1, -0x1, 0x1, -0x2, -0x1, -0x1, -0x1, -0x2, 0x1, -0x1, 0x1, -0x2, -0x2, 0x1, -0x1,
- -0x1, 0x1, -0x2, -0x2, -0x2, -0x2, -0x2, -0x2, -0x2, 0x1, 0x1, -0x1, 0x1, 0x1, -0x1, -0x2,
+ -0x2, -0x2, 0x1, -0x1, -0x2, -0x2, -0x1, -0x2, 0x1, 0x1, 0x1, -0x1, 0x1, 0x1, 0x1, -0x1,
+ -0x2, 0x1, 0x1, -0x2, -0x2, 0x1, 0x1, -0x1, -0x2, -0x2, 0x1, -0x1, -0x2, 0x1, -0x2, 0x1,
+ 0x1, -0x2, -0x2, -0x2, -0x2, 0x1, 0x1, 0x1, -0x2, 0x1, -0x1, 0x1, -0x1, 0x1, 0x1, -0x1,
+ -0x2, 0x1, -0x1, 0x1, -0x1, -0x1, 0x1, 0x1, -0x2, 0x1, 0x1, -0x2, -0x2, -0x1, -0x2, -0x2,
});
try testArgs(@Vector(128, i2), .{
- 0x1, -0x1, -0x1, -0x1, -0x1, -0x1, -0x1, 0x0, 0x1, 0x0, -0x1, 0x0, -0x1, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x1, -0x1, 0x1, -0x1, -0x1, 0x1, 0x0, 0x1, 0x1, 0x0, 0x1, -0x1, 0x0, -0x1,
- 0x0, 0x1, -0x1, 0x1, -0x1, -0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, -0x1, 0x1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, -0x1, 0x1, 0x1, -0x1, 0x1, -0x1, 0x0, 0x1, 0x0, 0x1,
- 0x0, -0x1, 0x0, 0x0, 0x1, -0x1, 0x0, 0x0, -0x1, -0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1,
- 0x0, -0x1, 0x1, -0x1, -0x1, 0x0, 0x0, 0x1, -0x1, -0x1, 0x1, 0x0, -0x1, 0x1, 0x0, -0x1,
- 0x1, 0x0, 0x1, -0x1, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, -0x1, -0x1, 0x0, 0x1, 0x0,
- 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, -0x1, 0x0, -0x1, -0x1, 0x0, 0x0, 0x0, 0x1, 0x1, -0x1,
- }, .{
- -0x2, -0x2, -0x1, -0x2, -0x1, -0x1, -0x2, -0x2, -0x2, 0x1, -0x2, -0x2, -0x2, -0x2, -0x2, 0x1,
- -0x1, 0x1, -0x1, -0x1, -0x2, -0x2, -0x1, -0x2, 0x1, -0x2, -0x1, -0x2, -0x2, -0x1, 0x1, -0x1,
- -0x2, -0x1, -0x1, -0x2, -0x1, -0x2, -0x1, 0x1, -0x1, -0x1, 0x1, -0x1, -0x2, 0x1, -0x2, -0x1,
- -0x2, 0x1, -0x1, -0x2, -0x2, -0x2, -0x2, -0x1, 0x1, 0x1, 0x1, 0x1, -0x1, -0x2, -0x1, -0x1,
- -0x2, -0x2, 0x1, 0x1, -0x2, -0x1, 0x1, -0x2, -0x1, -0x2, -0x1, -0x2, -0x2, 0x1, -0x1, 0x1,
- -0x2, -0x2, 0x1, -0x2, -0x1, -0x1, 0x1, -0x1, -0x1, -0x1, -0x2, -0x2, -0x1, 0x1, 0x1, -0x2,
- -0x1, -0x2, 0x1, 0x1, 0x1, 0x1, -0x2, 0x1, -0x1, -0x1, -0x2, 0x1, -0x1, -0x2, -0x1, -0x2,
- -0x2, -0x2, -0x1, -0x1, -0x2, -0x1, 0x1, -0x1, 0x1, 0x1, 0x1, -0x2, -0x1, 0x1, -0x2, 0x1,
+ -0x1, -0x2, 0x0, -0x2, -0x2, 0x1, -0x1, 0x0, -0x1, -0x2, 0x0, -0x2, 0x0, 0x1, 0x0, -0x1,
+ 0x0, -0x2, 0x1, 0x0, 0x1, 0x0, -0x2, 0x1, 0x1, 0x1, -0x1, 0x1, 0x0, -0x1, 0x1, -0x1,
+ 0x1, -0x2, 0x1, -0x2, 0x1, -0x2, 0x1, -0x2, -0x2, -0x2, 0x0, 0x0, 0x1, 0x1, -0x2, -0x1,
+ 0x1, 0x0, 0x0, 0x1, -0x2, -0x1, 0x0, -0x1, 0x1, -0x2, 0x1, 0x0, 0x1, 0x0, 0x0, -0x2,
+ 0x0, 0x0, -0x1, 0x1, -0x1, 0x0, -0x1, -0x2, 0x1, -0x2, -0x2, -0x1, -0x2, 0x0, 0x0, 0x0,
+ -0x1, -0x1, -0x1, -0x1, -0x2, 0x0, -0x1, 0x1, 0x0, 0x0, -0x2, 0x0, 0x0, 0x0, 0x0, 0x1,
+ 0x1, -0x2, 0x0, 0x0, -0x1, -0x1, 0x1, -0x1, -0x2, 0x0, -0x1, -0x1, -0x2, -0x2, 0x0, 0x0,
+ -0x1, 0x0, 0x1, 0x0, -0x1, -0x2, 0x1, -0x2, -0x1, -0x1, 0x0, 0x0, -0x1, 0x0, 0x0, 0x1,
+ }, .{
+ -0x2, -0x2, 0x1, 0x1, -0x2, -0x1, 0x1, 0x1, 0x1, -0x2, -0x2, 0x1, -0x2, -0x2, 0x1, -0x1,
+ -0x1, -0x2, 0x1, -0x1, 0x1, 0x1, 0x1, -0x1, -0x1, -0x1, -0x1, -0x1, -0x1, 0x1, 0x1, -0x2,
+ -0x1, -0x2, -0x2, -0x2, -0x2, -0x2, -0x1, -0x2, 0x1, 0x1, -0x1, -0x1, -0x1, -0x1, 0x1, -0x2,
+ 0x1, -0x1, 0x1, -0x1, 0x1, 0x1, -0x1, -0x2, 0x1, 0x1, -0x2, -0x2, -0x2, 0x1, 0x1, -0x2,
+ -0x1, 0x1, -0x2, -0x1, -0x1, 0x1, -0x2, -0x2, 0x1, 0x1, -0x2, -0x1, -0x2, -0x2, -0x2, -0x2,
+ 0x1, -0x1, 0x1, -0x2, 0x1, -0x1, -0x1, 0x1, 0x1, -0x1, 0x1, -0x1, -0x2, -0x2, -0x1, -0x2,
+ -0x2, 0x1, -0x2, -0x2, -0x1, -0x1, -0x1, -0x2, 0x1, -0x2, 0x1, -0x2, 0x1, -0x2, -0x2, 0x1,
+ 0x1, -0x1, 0x1, 0x1, -0x1, -0x2, 0x1, 0x1, -0x1, -0x2, -0x1, -0x1, 0x1, -0x2, -0x2, -0x2,
});
try testArgs(@Vector(1, u2), .{
@@ -2131,130 +2130,67 @@ fn binary(comptime op: anytype, comptime opts: struct { compare: Compare = .rela
0x2, 0x2, 0x3, 0x3, 0x1, 0x1, 0x1, 0x1, 0x2, 0x1, 0x3, 0x1, 0x3, 0x2, 0x3, 0x1,
});
- // workaround https://github.com/ziglang/zig/issues/22914
- // TODO: try testArgs(@Vector(1, i3), .{
- // -0x3,
- // }, .{
- // -0x1,
- // });
- // try testArgs(@Vector(2, i3), .{
- // 0x2, -0x3,
- // }, .{
- // 0x1, 0x3,
- // });
- // try testArgs(@Vector(4, i3), .{
- // 0x1, -0x4, -0x2, -0x3,
- // }, .{
- // -0x2, -0x4, 0x2, 0x2,
- // });
- // try testArgs(@Vector(8, i3), .{
- // 0x0, 0x1, 0x3, 0x1, -0x3, 0x1, 0x3, 0x3,
- // }, .{
- // -0x3, 0x2, 0x1, 0x1, -0x4, -0x1, 0x3, -0x2,
- // });
- // try testArgs(@Vector(16, i3), .{
- // -0x4, 0x3, -0x2, 0x0, -0x2, -0x1, 0x2, -0x4, 0x1, -0x3, 0x2, -0x2, 0x1, -0x2, 0x2, -0x4,
- // }, .{
- // 0x2, -0x3, 0x3, 0x1, -0x4, 0x1, -0x1, 0x1, -0x1, -0x3, -0x4, 0x2, 0x3, 0x3, -0x1, -0x4,
- // });
- // try testArgs(@Vector(32, i3), .{
- // 0x1, -0x3, -0x1, -0x3, -0x3, 0x2, 0x1, 0x0, 0x0, -0x1, 0x3, -0x2, 0x3, 0x0, -0x3, 0x0,
- // -0x4, -0x2, -0x1, -0x4, -0x4, 0x2, 0x2, 0x3, 0x1, 0x2, -0x4, -0x4, -0x3, 0x1, -0x1, -0x2,
- // }, .{
- // -0x4, -0x2, 0x1, -0x1, 0x3, 0x1, 0x2, -0x3, 0x2, -0x2, 0x1, -0x1, -0x2, -0x1, -0x1, -0x2,
- // -0x2, -0x3, 0x3, -0x3, -0x4, 0x1, -0x3, 0x3, 0x1, -0x3, 0x3, 0x3, -0x4, 0x3, 0x2, -0x2,
- // });
- // try testArgs(@Vector(64, i3), .{
- // 0x1, 0x2, 0x1, 0x2, -0x2, 0x2, 0x2, -0x1, -0x4, 0x1, 0x3, 0x0, -0x2, -0x2, 0x2, -0x2,
- // 0x0, -0x4, -0x3, -0x4, -0x1, -0x1, 0x2, 0x2, -0x2, -0x1, -0x1, 0x3, 0x3, -0x4, 0x2, 0x0,
- // 0x3, 0x2, -0x4, -0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x3, -0x3, 0x1, -0x4, -0x2, 0x1, -0x3,
- // -0x3, -0x1, 0x1, -0x3, -0x1, 0x3, -0x4, -0x4, 0x0, 0x0, -0x4, -0x2, 0x3, -0x1, -0x3, -0x3,
- // }, .{
- // 0x3, -0x2, 0x1, -0x4, 0x1, 0x3, -0x3, 0x1, 0x3, 0x1, 0x1, -0x1, -0x2, 0x1, -0x3, 0x1,
- // -0x2, -0x2, 0x3, -0x3, -0x1, -0x3, 0x1, -0x1, -0x3, -0x3, 0x1, -0x2, 0x1, -0x2, 0x1, 0x2,
- // 0x3, -0x4, -0x4, -0x1, 0x1, 0x3, 0x1, 0x1, -0x4, 0x2, -0x3, 0x3, 0x3, -0x1, 0x1, -0x1,
- // -0x2, 0x2, 0x2, -0x4, -0x4, 0x3, -0x2, -0x4, -0x1, -0x2, -0x4, 0x1, 0x2, 0x1, -0x1, -0x2,
- // });
- // try testArgs(@Vector(128, i3), .{
- // -0x4, 0x1, 0x0, -0x4, -0x4, 0x1, -0x4, -0x2, 0x2, 0x2, -0x3, 0x1, 0x2, -0x2, 0x1, 0x1,
- // 0x3, 0x0, 0x3, -0x4, -0x1, 0x3, 0x3, -0x4, 0x0, -0x3, 0x2, -0x2, 0x0, 0x3, 0x1, -0x2,
- // -0x1, -0x1, 0x3, -0x1, -0x2, 0x3, 0x3, 0x1, -0x3, 0x1, -0x1, -0x2, -0x4, 0x2, -0x2, -0x1,
- // 0x1, 0x1, 0x1, 0x0, -0x1, 0x2, -0x1, 0x3, 0x2, -0x1, -0x2, 0x3, -0x2, 0x3, 0x3, 0x1,
- // 0x3, -0x3, -0x4, -0x1, 0x2, 0x2, -0x2, 0x3, -0x4, -0x2, -0x1, 0x0, 0x1, -0x1, 0x0, 0x0,
- // -0x2, 0x3, 0x0, -0x3, -0x4, 0x2, -0x3, -0x2, -0x4, 0x0, -0x3, -0x4, -0x4, -0x2, -0x1, -0x3,
- // 0x0, -0x1, 0x0, -0x1, 0x2, -0x4, -0x3, 0x0, -0x4, 0x0, -0x2, 0x1, -0x2, -0x4, -0x1, -0x1,
- // -0x3, 0x3, -0x1, -0x1, -0x2, 0x1, 0x3, 0x1, -0x3, 0x1, -0x4, -0x2, 0x0, -0x1, -0x2, 0x2,
- // }, .{
- // -0x3, 0x2, -0x3, 0x1, -0x2, -0x1, -0x3, 0x1, 0x2, 0x2, -0x2, 0x2, 0x2, 0x1, 0x3, -0x1,
- // -0x4, -0x3, 0x2, -0x3, -0x2, 0x3, -0x3, 0x2, -0x1, -0x3, 0x1, 0x2, -0x4, 0x2, -0x2, -0x3,
- // 0x1, -0x1, 0x2, 0x2, -0x1, -0x3, -0x4, 0x2, 0x1, -0x4, 0x1, -0x4, 0x2, -0x1, 0x2, -0x2,
- // 0x2, 0x1, -0x4, 0x3, 0x1, -0x2, -0x3, -0x4, 0x3, -0x1, 0x3, -0x4, -0x2, 0x1, -0x2, 0x3,
- // 0x1, 0x1, 0x2, 0x1, -0x1, -0x2, 0x2, -0x1, 0x1, -0x1, -0x3, -0x1, 0x1, -0x4, -0x1, -0x1,
- // -0x3, -0x1, -0x4, 0x3, 0x1, -0x1, -0x1, -0x1, 0x1, -0x4, 0x1, -0x2, -0x4, 0x2, -0x4, -0x3,
- // 0x2, -0x4, -0x1, 0x1, 0x3, 0x2, -0x1, 0x3, 0x2, 0x2, 0x1, -0x4, -0x3, 0x1, -0x1, 0x1,
- // -0x2, -0x4, 0x1, 0x3, -0x1, 0x3, 0x1, 0x2, -0x4, 0x2, 0x2, -0x3, -0x3, -0x4, -0x2, 0x3,
- // });
try testArgs(@Vector(1, i3), .{
- -0x1,
- }, .{
-0x3,
+ }, .{
+ -0x1,
});
try testArgs(@Vector(2, i3), .{
- 0x2, -0x2,
+ 0x2, -0x3,
}, .{
- 0x3, 0x3,
+ 0x1, 0x3,
});
try testArgs(@Vector(4, i3), .{
- 0x1, 0x0, -0x2, 0x0,
+ 0x1, -0x4, -0x2, -0x3,
}, .{
- 0x2, -0x2, -0x4, 0x3,
+ -0x2, -0x4, 0x2, 0x2,
});
try testArgs(@Vector(8, i3), .{
- 0x3, -0x1, -0x3, -0x3, -0x3, -0x2, 0x2, -0x3,
+ 0x0, 0x1, 0x3, 0x1, -0x3, 0x1, 0x3, 0x3,
}, .{
- -0x1, 0x1, -0x2, 0x2, 0x1, -0x2, -0x3, -0x1,
+ -0x3, 0x2, 0x1, 0x1, -0x4, -0x1, 0x3, -0x2,
});
try testArgs(@Vector(16, i3), .{
- -0x1, -0x1, 0x3, -0x2, -0x2, -0x2, -0x2, -0x1, 0x2, 0x1, -0x2, 0x2, -0x2, 0x1, 0x1, -0x3,
+ -0x4, 0x3, -0x2, 0x0, -0x2, -0x1, 0x2, -0x4, 0x1, -0x3, 0x2, -0x2, 0x1, -0x2, 0x2, -0x4,
}, .{
- 0x1, -0x1, -0x1, -0x1, 0x1, 0x3, -0x1, -0x1, 0x1, 0x3, -0x1, -0x3, 0x1, 0x3, 0x1, -0x2,
+ 0x2, -0x3, 0x3, 0x1, -0x4, 0x1, -0x1, 0x1, -0x1, -0x3, -0x4, 0x2, 0x3, 0x3, -0x1, -0x4,
});
try testArgs(@Vector(32, i3), .{
- 0x3, -0x1, -0x3, 0x1, 0x0, 0x0, -0x3, -0x1, -0x3, 0x1, 0x1, 0x2, -0x1, 0x1, -0x1, -0x1,
- 0x1, -0x3, 0x1, -0x1, 0x1, 0x0, -0x2, 0x3, -0x2, -0x3, 0x3, 0x1, -0x1, 0x0, 0x3, -0x1,
+ 0x1, -0x3, -0x1, -0x3, -0x3, 0x2, 0x1, 0x0, 0x0, -0x1, 0x3, -0x2, 0x3, 0x0, -0x3, 0x0,
+ -0x4, -0x2, -0x1, -0x4, -0x4, 0x2, 0x2, 0x3, 0x1, 0x2, -0x4, -0x4, -0x3, 0x1, -0x1, -0x2,
}, .{
- 0x1, -0x2, -0x4, -0x4, 0x2, 0x1, -0x4, -0x3, -0x4, 0x1, -0x3, -0x4, -0x1, 0x2, -0x1, 0x1,
- 0x2, -0x2, -0x4, 0x3, -0x3, 0x1, 0x2, -0x2, -0x2, 0x3, 0x3, 0x2, -0x2, -0x4, -0x2, -0x3,
+ -0x4, -0x2, 0x1, -0x1, 0x3, 0x1, 0x2, -0x3, 0x2, -0x2, 0x1, -0x1, -0x2, -0x1, -0x1, -0x2,
+ -0x2, -0x3, 0x3, -0x3, -0x4, 0x1, -0x3, 0x3, 0x1, -0x3, 0x3, 0x3, -0x4, 0x3, 0x2, -0x2,
});
try testArgs(@Vector(64, i3), .{
- -0x2, 0x1, 0x3, -0x1, -0x3, -0x1, 0x1, -0x3, 0x1, -0x2, 0x0, 0x3, 0x0, -0x2, 0x1, -0x3,
- -0x2, 0x1, -0x2, 0x2, 0x0, 0x1, -0x3, 0x0, -0x3, 0x0, -0x3, -0x2, -0x2, -0x3, -0x2, 0x3,
- -0x1, 0x1, 0x1, 0x1, -0x1, 0x0, -0x3, -0x3, -0x3, -0x3, -0x2, 0x2, 0x3, 0x2, -0x3, 0x1,
- -0x3, -0x3, -0x1, -0x1, -0x1, -0x3, -0x2, -0x2, 0x2, 0x3, 0x3, -0x3, 0x0, 0x3, -0x3, -0x3,
+ 0x1, 0x2, 0x1, 0x2, -0x2, 0x2, 0x2, -0x1, -0x4, 0x1, 0x3, 0x0, -0x2, -0x2, 0x2, -0x2,
+ 0x0, -0x4, -0x3, -0x4, -0x1, -0x1, 0x2, 0x2, -0x2, -0x1, -0x1, 0x3, 0x3, -0x4, 0x2, 0x0,
+ 0x3, 0x2, -0x4, -0x1, 0x1, 0x1, 0x3, 0x1, 0x2, 0x3, -0x3, 0x1, -0x4, -0x2, 0x1, -0x3,
+ -0x3, -0x1, 0x1, -0x3, -0x1, 0x3, -0x4, -0x4, 0x0, 0x0, -0x4, -0x2, 0x3, -0x1, -0x3, -0x3,
}, .{
- 0x2, 0x1, -0x1, -0x3, -0x1, -0x4, -0x2, -0x3, 0x2, -0x2, -0x4, 0x2, 0x2, -0x2, 0x1, 0x1,
- 0x1, -0x1, -0x3, 0x2, -0x2, 0x2, -0x1, 0x3, 0x3, -0x1, -0x1, -0x3, -0x1, 0x2, -0x2, 0x2,
- 0x1, -0x4, -0x2, -0x4, 0x2, -0x1, -0x2, 0x3, 0x3, 0x3, -0x4, -0x2, 0x3, -0x4, 0x1, -0x2,
- -0x2, 0x2, -0x3, -0x3, 0x1, -0x3, 0x3, 0x2, 0x1, 0x3, -0x3, 0x3, 0x2, -0x2, -0x2, 0x2,
+ 0x3, -0x2, 0x1, -0x4, 0x1, 0x3, -0x3, 0x1, 0x3, 0x1, 0x1, -0x1, -0x2, 0x1, -0x3, 0x1,
+ -0x2, -0x2, 0x3, -0x3, -0x1, -0x3, 0x1, -0x1, -0x3, -0x3, 0x1, -0x2, 0x1, -0x2, 0x1, 0x2,
+ 0x3, -0x4, -0x4, -0x1, 0x1, 0x3, 0x1, 0x1, -0x4, 0x2, -0x3, 0x3, 0x3, -0x1, 0x1, -0x1,
+ -0x2, 0x2, 0x2, -0x4, -0x4, 0x3, -0x2, -0x4, -0x1, -0x2, -0x4, 0x1, 0x2, 0x1, -0x1, -0x2,
});
try testArgs(@Vector(128, i3), .{
- -0x1, 0x2, 0x1, 0x2, 0x1, 0x1, 0x2, 0x1, -0x3, 0x1, -0x2, -0x1, 0x0, 0x2, 0x3, -0x3,
- -0x1, -0x1, -0x2, 0x3, 0x1, 0x2, 0x2, 0x3, -0x2, 0x3, -0x2, -0x3, 0x1, 0x0, -0x1, -0x2,
- -0x1, -0x1, 0x1, -0x1, 0x2, -0x3, 0x1, -0x2, -0x1, 0x2, -0x2, 0x1, 0x1, -0x3, -0x2, 0x3,
- -0x1, -0x1, 0x1, -0x3, -0x1, -0x2, 0x0, 0x1, -0x1, 0x0, -0x1, 0x2, 0x1, 0x2, 0x3, -0x1,
- 0x0, 0x1, 0x2, 0x3, -0x2, 0x2, -0x3, 0x2, 0x0, -0x2, -0x3, -0x2, 0x0, 0x1, 0x2, 0x1,
- -0x3, 0x0, -0x2, -0x3, -0x1, 0x2, -0x3, 0x2, 0x3, 0x1, 0x1, -0x1, 0x2, 0x1, -0x1, 0x2,
- 0x2, 0x0, 0x1, -0x3, -0x3, 0x1, 0x2, 0x0, 0x1, 0x0, 0x0, -0x1, 0x0, 0x0, 0x3, 0x3,
- 0x0, -0x2, -0x2, -0x2, 0x3, 0x0, -0x1, -0x2, 0x0, 0x3, -0x3, 0x1, 0x2, -0x1, 0x1, 0x1,
- }, .{
- 0x3, 0x3, 0x2, 0x3, -0x3, -0x4, 0x1, -0x3, 0x2, 0x3, 0x3, -0x2, 0x2, -0x1, 0x1, 0x3,
- -0x4, -0x4, -0x1, -0x1, 0x2, -0x3, -0x3, -0x3, -0x2, -0x3, -0x2, -0x1, 0x1, 0x3, -0x4, -0x2,
- -0x3, 0x1, 0x3, 0x1, -0x2, 0x1, 0x1, 0x2, 0x1, 0x2, -0x4, -0x4, -0x3, -0x2, -0x1, -0x2,
- 0x3, 0x2, -0x3, -0x2, -0x2, 0x3, -0x3, -0x4, 0x3, -0x3, 0x3, -0x1, 0x3, -0x1, -0x1, 0x2,
- 0x3, -0x4, -0x4, -0x2, -0x4, 0x2, -0x2, -0x4, -0x2, -0x2, -0x3, 0x3, 0x2, 0x2, 0x2, -0x4,
- 0x1, -0x4, -0x3, -0x2, -0x4, -0x4, 0x1, -0x4, -0x1, 0x3, -0x2, -0x4, 0x3, -0x4, 0x3, -0x1,
- 0x3, 0x1, -0x1, 0x1, 0x1, 0x2, 0x1, -0x3, -0x4, -0x1, -0x1, -0x2, -0x3, -0x2, 0x3, -0x2,
- -0x1, 0x3, 0x3, -0x1, 0x3, 0x1, 0x1, 0x2, -0x3, 0x3, -0x1, 0x3, -0x3, -0x4, -0x4, 0x1,
+ -0x4, 0x1, 0x0, -0x4, -0x4, 0x1, -0x4, -0x2, 0x2, 0x2, -0x3, 0x1, 0x2, -0x2, 0x1, 0x1,
+ 0x3, 0x0, 0x3, -0x4, -0x1, 0x3, 0x3, -0x4, 0x0, -0x3, 0x2, -0x2, 0x0, 0x3, 0x1, -0x2,
+ -0x1, -0x1, 0x3, -0x1, -0x2, 0x3, 0x3, 0x1, -0x3, 0x1, -0x1, -0x2, -0x4, 0x2, -0x2, -0x1,
+ 0x1, 0x1, 0x1, 0x0, -0x1, 0x2, -0x1, 0x3, 0x2, -0x1, -0x2, 0x3, -0x2, 0x3, 0x3, 0x1,
+ 0x3, -0x3, -0x4, -0x1, 0x2, 0x2, -0x2, 0x3, -0x4, -0x2, -0x1, 0x0, 0x1, -0x1, 0x0, 0x0,
+ -0x2, 0x3, 0x0, -0x3, -0x4, 0x2, -0x3, -0x2, -0x4, 0x0, -0x3, -0x4, -0x4, -0x2, -0x1, -0x3,
+ 0x0, -0x1, 0x0, -0x1, 0x2, -0x4, -0x3, 0x0, -0x4, 0x0, -0x2, 0x1, -0x2, -0x4, -0x1, -0x1,
+ -0x3, 0x3, -0x1, -0x1, -0x2, 0x1, 0x3, 0x1, -0x3, 0x1, -0x4, -0x2, 0x0, -0x1, -0x2, 0x2,
+ }, .{
+ -0x3, 0x2, -0x3, 0x1, -0x2, -0x1, -0x3, 0x1, 0x2, 0x2, -0x2, 0x2, 0x2, 0x1, 0x3, -0x1,
+ -0x4, -0x3, 0x2, -0x3, -0x2, 0x3, -0x3, 0x2, -0x1, -0x3, 0x1, 0x2, -0x4, 0x2, -0x2, -0x3,
+ 0x1, -0x1, 0x2, 0x2, -0x1, -0x3, -0x4, 0x2, 0x1, -0x4, 0x1, -0x4, 0x2, -0x1, 0x2, -0x2,
+ 0x2, 0x1, -0x4, 0x3, 0x1, -0x2, -0x3, -0x4, 0x3, -0x1, 0x3, -0x4, -0x2, 0x1, -0x2, 0x3,
+ 0x1, 0x1, 0x2, 0x1, -0x1, -0x2, 0x2, -0x1, 0x1, -0x1, -0x3, -0x1, 0x1, -0x4, -0x1, -0x1,
+ -0x3, -0x1, -0x4, 0x3, 0x1, -0x1, -0x1, -0x1, 0x1, -0x4, 0x1, -0x2, -0x4, 0x2, -0x4, -0x3,
+ 0x2, -0x4, -0x1, 0x1, 0x3, 0x2, -0x1, 0x3, 0x2, 0x2, 0x1, -0x4, -0x3, 0x1, -0x1, 0x1,
+ -0x2, -0x4, 0x1, 0x3, -0x1, 0x3, 0x1, 0x2, -0x4, 0x2, 0x2, -0x3, -0x3, -0x4, -0x2, 0x3,
});
try testArgs(@Vector(1, u3), .{
@@ -2320,130 +2256,67 @@ fn binary(comptime op: anytype, comptime opts: struct { compare: Compare = .rela
0x1, 0x1, 0x2, 0x7, 0x2, 0x5, 0x1, 0x6, 0x4, 0x6, 0x1, 0x6, 0x5, 0x1, 0x2, 0x1,
});
- // workaround https://github.com/ziglang/zig/issues/22914
- // TODO: try testArgs(@Vector(1, i4), .{
- // 0x2,
- // }, .{
- // 0x1,
- // });
- // try testArgs(@Vector(2, i4), .{
- // -0x2, 0x5,
- // }, .{
- // -0x1, 0x2,
- // });
- // try testArgs(@Vector(4, i4), .{
- // -0x8, 0x5, 0x5, -0x2,
- // }, .{
- // -0x3, -0x7, -0x4, -0x5,
- // });
- // try testArgs(@Vector(8, i4), .{
- // 0x7, 0x3, 0x2, -0x1, -0x8, -0x2, 0x7, 0x1,
- // }, .{
- // -0x2, 0x4, -0x8, 0x7, 0x1, -0x5, 0x6, -0x7,
- // });
- // try testArgs(@Vector(16, i4), .{
- // 0x6, -0x3, 0x6, 0x6, -0x5, 0x6, 0x3, 0x7, -0x6, 0x7, -0x7, 0x6, -0x2, -0x2, -0x5, 0x0,
- // }, .{
- // 0x2, -0x3, -0x4, -0x5, 0x3, 0x3, -0x5, 0x5, 0x4, -0x1, -0x6, 0x4, 0x7, -0x2, 0x3, 0x2,
- // });
- // try testArgs(@Vector(32, i4), .{
- // -0x1, -0x4, 0x6, 0x6, 0x5, 0x3, 0x4, 0x0, 0x3, 0x7, -0x6, 0x7, -0x2, -0x7, -0x4, 0x6,
- // 0x3, -0x7, -0x5, 0x1, -0x7, -0x6, 0x1, 0x3, 0x7, -0x8, -0x5, 0x6, -0x5, 0x0, 0x0, -0x8,
- // }, .{
- // -0x4, -0x4, -0x4, 0x4, -0x5, 0x3, -0x1, 0x6, 0x1, -0x3, -0x1, 0x6, 0x5, -0x8, 0x1, -0x4,
- // -0x1, -0x4, 0x1, -0x3, 0x4, 0x6, -0x3, -0x8, -0x7, -0x4, 0x2, -0x3, -0x1, -0x2, 0x6, -0x6,
- // });
- // try testArgs(@Vector(64, i4), .{
- // 0x0, -0x3, -0x3, 0x5, 0x2, -0x1, 0x4, 0x5, 0x6, -0x2, 0x1, 0x5, -0x3, -0x1, -0x2, -0x1,
- // -0x8, 0x2, -0x1, -0x2, 0x7, -0x3, -0x2, -0x3, 0x1, -0x5, 0x5, 0x2, -0x1, -0x6, -0x2, -0x1,
- // -0x2, -0x5, 0x0, 0x6, 0x3, -0x4, -0x5, -0x5, -0x4, -0x7, -0x4, 0x1, 0x0, -0x6, -0x7, -0x6,
- // 0x1, -0x6, 0x4, -0x4, -0x2, 0x6, -0x7, 0x4, 0x4, 0x5, 0x3, -0x6, -0x8, -0x5, 0x5, -0x7,
- // }, .{
- // -0x1, -0x5, 0x5, -0x2, 0x6, -0x6, -0x4, -0x5, -0x4, 0x7, -0x6, 0x7, 0x4, -0x5, 0x5, 0x7,
- // -0x6, 0x3, -0x4, 0x2, -0x8, 0x4, -0x2, 0x5, -0x5, -0x5, -0x8, 0x3, -0x1, -0x4, -0x8, -0x2,
- // -0x2, 0x5, -0x7, -0x3, 0x2, -0x5, -0x6, -0x7, -0x8, -0x2, 0x5, -0x3, 0x2, -0x1, -0x7, -0x4,
- // -0x3, -0x3, 0x6, -0x8, 0x3, -0x4, 0x7, 0x3, -0x2, 0x7, -0x1, 0x1, 0x1, 0x6, -0x2, -0x2,
- // });
- // try testArgs(@Vector(128, i4), .{
- // -0x1, -0x3, -0x3, -0x4, 0x3, -0x4, 0x0, -0x4, 0x7, 0x3, 0x5, -0x4, -0x5, -0x4, -0x2, -0x7,
- // 0x2, 0x0, -0x4, 0x7, 0x3, -0x5, 0x4, 0x5, -0x2, -0x3, -0x4, 0x6, -0x7, -0x1, 0x1, -0x6,
- // 0x1, 0x5, 0x2, 0x5, 0x2, 0x2, -0x4, -0x4, 0x5, 0x2, -0x2, -0x8, -0x1, -0x2, 0x5, 0x3,
- // 0x0, -0x5, 0x5, 0x7, 0x6, -0x3, -0x2, 0x0, -0x7, -0x7, -0x4, 0x2, -0x4, 0x7, 0x1, -0x5,
- // -0x4, -0x8, 0x2, -0x7, 0x3, -0x4, 0x7, 0x6, -0x7, -0x3, -0x7, 0x2, 0x4, 0x2, -0x5, -0x6,
- // 0x3, 0x5, 0x1, 0x6, 0x5, 0x7, 0x7, -0x4, -0x7, -0x1, 0x0, -0x7, 0x6, 0x0, 0x6, 0x0,
- // 0x0, -0x5, -0x1, -0x8, 0x7, -0x6, -0x5, -0x2, -0x4, 0x1, 0x1, -0x8, 0x2, 0x6, -0x1, -0x3,
- // -0x6, 0x5, -0x8, 0x3, 0x3, 0x1, -0x1, -0x3, -0x3, -0x6, 0x7, -0x6, -0x8, 0x1, -0x7, -0x8,
- // }, .{
- // 0x1, 0x3, 0x1, 0x3, -0x6, 0x6, 0x2, -0x3, 0x1, -0x7, 0x7, -0x3, -0x1, -0x1, 0x7, 0x2,
- // -0x8, 0x2, -0x3, -0x4, 0x4, -0x4, 0x7, 0x6, -0x5, -0x2, -0x1, 0x6, -0x7, 0x4, 0x7, -0x3,
- // -0x5, -0x8, -0x5, -0x6, -0x6, 0x2, 0x1, -0x8, 0x4, 0x3, -0x5, 0x7, -0x8, 0x3, -0x1, 0x7,
- // -0x3, 0x7, -0x3, -0x2, -0x6, 0x4, 0x2, -0x2, -0x2, -0x7, 0x5, -0x1, -0x6, 0x7, -0x5, 0x5,
- // 0x4, 0x5, -0x8, -0x5, 0x6, 0x1, -0x5, 0x7, -0x6, -0x3, -0x4, 0x6, -0x8, 0x7, 0x7, -0x6,
- // 0x6, -0x4, 0x2, -0x8, -0x8, -0x4, -0x8, -0x3, 0x6, 0x5, 0x7, -0x6, 0x1, 0x2, -0x7, -0x3,
- // -0x3, 0x1, -0x3, 0x3, -0x1, 0x3, -0x7, -0x8, 0x1, -0x3, -0x3, -0x3, -0x4, 0x5, 0x7, -0x7,
- // 0x3, 0x2, 0x6, -0x2, -0x4, -0x3, -0x1, 0x5, -0x6, 0x2, 0x3, -0x5, 0x5, -0x3, -0x2, -0x8,
- // });
try testArgs(@Vector(1, i4), .{
- -0x1,
+ 0x2,
}, .{
- -0x1,
+ 0x1,
});
try testArgs(@Vector(2, i4), .{
- 0x7, 0x5,
+ -0x2, 0x5,
}, .{
- 0x4, 0x1,
+ -0x1, 0x2,
});
try testArgs(@Vector(4, i4), .{
- -0x2, -0x3, -0x6, 0x1,
+ -0x8, 0x5, 0x5, -0x2,
}, .{
- 0x3, -0x5, -0x1, -0x3,
+ -0x3, -0x7, -0x4, -0x5,
});
try testArgs(@Vector(8, i4), .{
- -0x5, -0x3, -0x2, 0x2, -0x4, -0x4, 0x0, 0x1,
+ 0x7, 0x3, 0x2, -0x1, -0x8, -0x2, 0x7, 0x1,
}, .{
- -0x7, -0x2, -0x7, 0x1, 0x6, 0x2, -0x7, 0x7,
+ -0x2, 0x4, -0x8, 0x7, 0x1, -0x5, 0x6, -0x7,
});
try testArgs(@Vector(16, i4), .{
- -0x1, -0x1, 0x6, 0x3, -0x1, 0x2, -0x6, 0x6, 0x1, 0x5, -0x1, 0x7, 0x7, -0x3, -0x1, 0x4,
+ 0x6, -0x3, 0x6, 0x6, -0x5, 0x6, 0x3, 0x7, -0x6, 0x7, -0x7, 0x6, -0x2, -0x2, -0x5, 0x0,
}, .{
- 0x1, -0x3, 0x4, -0x1, 0x2, 0x5, -0x3, -0x5, -0x5, 0x5, -0x7, 0x7, 0x1, 0x5, -0x5, -0x6,
+ 0x2, -0x3, -0x4, -0x5, 0x3, 0x3, -0x5, 0x5, 0x4, -0x1, -0x6, 0x4, 0x7, -0x2, 0x3, 0x2,
});
try testArgs(@Vector(32, i4), .{
- -0x7, 0x4, -0x5, -0x5, -0x5, 0x1, 0x7, 0x3, -0x2, 0x7, -0x3, -0x7, -0x3, -0x2, -0x5, -0x7,
- 0x5, 0x4, 0x3, 0x0, -0x6, -0x2, -0x4, -0x1, 0x5, 0x4, -0x7, -0x7, -0x5, 0x5, -0x5, -0x1,
+ -0x1, -0x4, 0x6, 0x6, 0x5, 0x3, 0x4, 0x0, 0x3, 0x7, -0x6, 0x7, -0x2, -0x7, -0x4, 0x6,
+ 0x3, -0x7, -0x5, 0x1, -0x7, -0x6, 0x1, 0x3, 0x7, -0x8, -0x5, 0x6, -0x5, 0x0, 0x0, -0x8,
}, .{
- 0x4, 0x4, 0x5, 0x2, 0x3, -0x4, 0x6, 0x2, -0x7, 0x3, 0x7, 0x2, 0x6, 0x2, 0x2, 0x3,
- 0x7, -0x3, -0x7, -0x2, 0x3, -0x1, -0x4, 0x4, -0x8, 0x1, 0x6, -0x7, 0x5, 0x1, 0x7, -0x2,
+ -0x4, -0x4, -0x4, 0x4, -0x5, 0x3, -0x1, 0x6, 0x1, -0x3, -0x1, 0x6, 0x5, -0x8, 0x1, -0x4,
+ -0x1, -0x4, 0x1, -0x3, 0x4, 0x6, -0x3, -0x8, -0x7, -0x4, 0x2, -0x3, -0x1, -0x2, 0x6, -0x6,
});
try testArgs(@Vector(64, i4), .{
- 0x0, 0x3, 0x7, -0x7, 0x1, -0x5, -0x4, 0x2, 0x2, 0x5, 0x4, 0x0, -0x3, -0x4, -0x4, -0x4,
- -0x7, 0x6, 0x2, 0x1, 0x0, 0x3, -0x6, 0x4, -0x4, 0x2, 0x7, 0x3, -0x4, -0x3, -0x3, -0x3,
- -0x4, 0x0, -0x3, -0x6, 0x0, 0x1, -0x5, -0x7, -0x2, -0x1, -0x1, -0x7, 0x3, -0x5, -0x4, -0x3,
- 0x5, 0x1, -0x4, 0x7, 0x1, 0x7, -0x5, 0x4, 0x5, -0x4, 0x1, -0x4, 0x4, 0x5, 0x4, -0x2,
+ 0x0, -0x3, -0x3, 0x5, 0x2, -0x1, 0x4, 0x5, 0x6, -0x2, 0x1, 0x5, -0x3, -0x1, -0x2, -0x1,
+ -0x8, 0x2, -0x1, -0x2, 0x7, -0x3, -0x2, -0x3, 0x1, -0x5, 0x5, 0x2, -0x1, -0x6, -0x2, -0x1,
+ -0x2, -0x5, 0x0, 0x6, 0x3, -0x4, -0x5, -0x5, -0x4, -0x7, -0x4, 0x1, 0x0, -0x6, -0x7, -0x6,
+ 0x1, -0x6, 0x4, -0x4, -0x2, 0x6, -0x7, 0x4, 0x4, 0x5, 0x3, -0x6, -0x8, -0x5, 0x5, -0x7,
}, .{
- 0x2, -0x4, -0x1, 0x4, 0x4, -0x1, -0x3, 0x6, 0x4, 0x2, 0x4, 0x3, -0x6, -0x7, -0x4, 0x6,
- 0x6, 0x4, 0x6, -0x7, 0x2, 0x4, -0x8, -0x1, -0x8, 0x3, -0x2, -0x7, 0x1, 0x5, -0x3, -0x6,
- -0x8, 0x2, -0x5, 0x7, 0x4, 0x7, -0x4, 0x3, 0x6, -0x7, -0x1, 0x1, -0x8, -0x2, -0x3, 0x3,
- 0x3, -0x4, 0x4, -0x7, 0x5, -0x4, -0x1, 0x2, 0x6, -0x2, -0x5, 0x2, 0x7, 0x2, -0x8, -0x3,
+ -0x1, -0x5, 0x5, -0x2, 0x6, -0x6, -0x4, -0x5, -0x4, 0x7, -0x6, 0x7, 0x4, -0x5, 0x5, 0x7,
+ -0x6, 0x3, -0x4, 0x2, -0x8, 0x4, -0x2, 0x5, -0x5, -0x5, -0x8, 0x3, -0x1, -0x4, -0x8, -0x2,
+ -0x2, 0x5, -0x7, -0x3, 0x2, -0x5, -0x6, -0x7, -0x8, -0x2, 0x5, -0x3, 0x2, -0x1, -0x7, -0x4,
+ -0x3, -0x3, 0x6, -0x8, 0x3, -0x4, 0x7, 0x3, -0x2, 0x7, -0x1, 0x1, 0x1, 0x6, -0x2, -0x2,
});
try testArgs(@Vector(128, i4), .{
- 0x3, 0x3, -0x6, 0x3, 0x2, 0x1, 0x5, -0x2, 0x0, -0x7, 0x4, 0x3, 0x0, -0x3, -0x7, -0x5,
- 0x4, 0x0, 0x1, 0x6, 0x3, 0x3, -0x4, 0x7, -0x6, -0x6, 0x6, 0x1, 0x6, -0x5, -0x6, -0x6,
- 0x4, -0x2, 0x3, -0x1, -0x4, -0x6, -0x1, 0x2, 0x4, 0x3, -0x2, 0x2, 0x3, 0x5, 0x0, -0x2,
- 0x5, 0x6, -0x1, -0x5, 0x6, 0x7, 0x7, -0x6, -0x6, 0x0, 0x0, -0x6, -0x2, -0x7, -0x6, 0x3,
- -0x6, -0x6, 0x4, -0x4, 0x4, -0x5, 0x0, 0x6, 0x6, 0x7, 0x4, -0x5, 0x5, -0x7, -0x7, 0x6,
- -0x4, 0x4, -0x7, 0x4, 0x3, 0x2, -0x4, -0x1, -0x6, -0x2, 0x5, -0x2, 0x4, -0x7, -0x3, -0x3,
- 0x4, 0x1, -0x1, 0x2, -0x1, 0x4, -0x5, -0x3, -0x1, -0x3, 0x3, 0x7, 0x5, -0x1, -0x1, -0x4,
- 0x2, 0x1, -0x3, 0x7, -0x6, -0x7, -0x6, -0x4, -0x5, -0x2, 0x5, 0x0, -0x5, 0x7, -0x7, 0x5,
- }, .{
- -0x6, -0x5, -0x1, 0x4, 0x6, 0x4, -0x1, -0x7, -0x3, 0x4, -0x6, -0x2, -0x3, 0x1, 0x6, 0x2,
- -0x1, -0x3, -0x4, 0x2, 0x3, 0x6, -0x7, 0x3, 0x7, -0x6, 0x1, -0x7, -0x5, 0x6, 0x7, -0x4,
- 0x7, -0x4, 0x2, -0x5, 0x4, 0x5, 0x5, -0x3, -0x1, 0x6, -0x6, -0x2, -0x4, 0x3, -0x4, -0x4,
- -0x5, 0x6, -0x6, 0x3, -0x6, -0x3, 0x6, 0x5, 0x6, -0x6, -0x3, 0x1, -0x4, -0x5, -0x8, -0x3,
- -0x4, 0x7, -0x2, -0x1, 0x4, 0x2, -0x3, 0x6, 0x4, 0x6, -0x3, 0x6, 0x5, -0x2, -0x1, 0x5,
- 0x6, -0x6, -0x8, -0x2, -0x3, 0x6, -0x6, 0x5, -0x2, -0x6, 0x5, -0x6, 0x2, 0x1, 0x3, -0x3,
- 0x7, 0x7, 0x3, -0x1, 0x5, -0x2, -0x3, 0x4, 0x7, -0x7, 0x7, 0x6, -0x2, -0x5, 0x4, -0x5,
- -0x1, -0x2, 0x1, 0x4, -0x2, 0x1, -0x3, 0x1, -0x4, 0x3, -0x2, -0x6, -0x4, -0x2, -0x8, 0x2,
+ -0x1, -0x3, -0x3, -0x4, 0x3, -0x4, 0x0, -0x4, 0x7, 0x3, 0x5, -0x4, -0x5, -0x4, -0x2, -0x7,
+ 0x2, 0x0, -0x4, 0x7, 0x3, -0x5, 0x4, 0x5, -0x2, -0x3, -0x4, 0x6, -0x7, -0x1, 0x1, -0x6,
+ 0x1, 0x5, 0x2, 0x5, 0x2, 0x2, -0x4, -0x4, 0x5, 0x2, -0x2, -0x8, -0x1, -0x2, 0x5, 0x3,
+ 0x0, -0x5, 0x5, 0x7, 0x6, -0x3, -0x2, 0x0, -0x7, -0x7, -0x4, 0x2, -0x4, 0x7, 0x1, -0x5,
+ -0x4, -0x8, 0x2, -0x7, 0x3, -0x4, 0x7, 0x6, -0x7, -0x3, -0x7, 0x2, 0x4, 0x2, -0x5, -0x6,
+ 0x3, 0x5, 0x1, 0x6, 0x5, 0x7, 0x7, -0x4, -0x7, -0x1, 0x0, -0x7, 0x6, 0x0, 0x6, 0x0,
+ 0x0, -0x5, -0x1, -0x8, 0x7, -0x6, -0x5, -0x2, -0x4, 0x1, 0x1, -0x8, 0x2, 0x6, -0x1, -0x3,
+ -0x6, 0x5, -0x8, 0x3, 0x3, 0x1, -0x1, -0x3, -0x3, -0x6, 0x7, -0x6, -0x8, 0x1, -0x7, -0x8,
+ }, .{
+ 0x1, 0x3, 0x1, 0x3, -0x6, 0x6, 0x2, -0x3, 0x1, -0x7, 0x7, -0x3, -0x1, -0x1, 0x7, 0x2,
+ -0x8, 0x2, -0x3, -0x4, 0x4, -0x4, 0x7, 0x6, -0x5, -0x2, -0x1, 0x6, -0x7, 0x4, 0x7, -0x3,
+ -0x5, -0x8, -0x5, -0x6, -0x6, 0x2, 0x1, -0x8, 0x4, 0x3, -0x5, 0x7, -0x8, 0x3, -0x1, 0x7,
+ -0x3, 0x7, -0x3, -0x2, -0x6, 0x4, 0x2, -0x2, -0x2, -0x7, 0x5, -0x1, -0x6, 0x7, -0x5, 0x5,
+ 0x4, 0x5, -0x8, -0x5, 0x6, 0x1, -0x5, 0x7, -0x6, -0x3, -0x4, 0x6, -0x8, 0x7, 0x7, -0x6,
+ 0x6, -0x4, 0x2, -0x8, -0x8, -0x4, -0x8, -0x3, 0x6, 0x5, 0x7, -0x6, 0x1, 0x2, -0x7, -0x3,
+ -0x3, 0x1, -0x3, 0x3, -0x1, 0x3, -0x7, -0x8, 0x1, -0x3, -0x3, -0x3, -0x4, 0x5, 0x7, -0x7,
+ 0x3, 0x2, 0x6, -0x2, -0x4, -0x3, -0x1, 0x5, -0x6, 0x2, 0x3, -0x5, 0x5, -0x3, -0x2, -0x8,
});
try testArgs(@Vector(1, u4), .{
@@ -2509,130 +2382,67 @@ fn binary(comptime op: anytype, comptime opts: struct { compare: Compare = .rela
0x9, 0x6, 0x4, 0x5, 0xf, 0xe, 0x8, 0x5, 0x2, 0x5, 0xf, 0xb, 0xf, 0x4, 0x6, 0x4,
});
- // workaround https://github.com/ziglang/zig/issues/22914
- // TODO: try testArgs(@Vector(1, i5), .{
- // 0x03,
- // }, .{
- // 0x0a,
- // });
- // try testArgs(@Vector(2, i5), .{
- // 0x0c, -0x0e,
- // }, .{
- // -0x0f, -0x0e,
- // });
- // try testArgs(@Vector(4, i5), .{
- // -0x0a, 0x06, -0x05, 0x09,
- // }, .{
- // -0x0f, 0x05, 0x05, 0x09,
- // });
- // try testArgs(@Vector(8, i5), .{
- // -0x04, -0x04, 0x05, -0x05, 0x0f, -0x0e, 0x0f, -0x0e,
- // }, .{
- // -0x09, -0x0d, 0x02, 0x01, 0x08, -0x05, -0x09, -0x03,
- // });
- // try testArgs(@Vector(16, i5), .{
- // -0x0e, -0x08, -0x10, -0x0b, -0x10, -0x09, -0x0f, -0x05, -0x10, 0x06, 0x0d, -0x04, 0x09, -0x0e, -0x10, -0x10,
- // }, .{
- // 0x03, 0x0b, 0x0c, 0x06, -0x0d, 0x0e, -0x09, -0x04, 0x0a, -0x0e, -0x0d, 0x0f, -0x09, -0x0e, -0x0b, 0x03,
- // });
- // try testArgs(@Vector(32, i5), .{
- // -0x08, -0x05, 0x09, -0x08, 0x01, 0x0e, -0x0c, 0x0b, -0x0e, 0x0f, -0x0b, 0x01, -0x03, 0x03, 0x08, 0x04,
- // 0x02, 0x0f, -0x0b, -0x0b, 0x0d, 0x00, 0x09, 0x00, -0x06, -0x08, -0x01, 0x0b, 0x05, 0x03, -0x05, -0x07,
- // }, .{
- // -0x0c, 0x07, 0x0d, -0x09, 0x0a, 0x06, -0x0b, -0x07, -0x0a, 0x08, 0x07, -0x0d, 0x08, 0x07, 0x09, -0x07,
- // 0x0b, -0x02, -0x02, -0x02, -0x06, -0x08, 0x0a, -0x0a, 0x02, -0x07, -0x0a, 0x0d, -0x07, -0x05, -0x0e, 0x05,
- // });
- // try testArgs(@Vector(64, i5), .{
- // 0x04, -0x0d, 0x0d, -0x01, 0x07, 0x0c, 0x00, 0x01, -0x07, 0x0a, -0x01, -0x01, 0x08, -0x0b, -0x03, -0x06,
- // -0x03, -0x03, -0x0c, 0x0e, -0x0c, -0x02, 0x07, -0x03, 0x0e, -0x0a, -0x0e, -0x06, -0x08, 0x0a, -0x0c, -0x0c,
- // 0x06, -0x04, 0x04, 0x00, 0x05, 0x07, 0x04, 0x06, -0x01, 0x0a, 0x07, -0x08, 0x00, 0x0f, 0x0f, 0x0d,
- // -0x07, 0x0f, 0x05, -0x0b, -0x08, -0x0c, 0x0d, -0x05, -0x05, 0x0e, 0x02, 0x06, 0x0d, 0x06, 0x00, 0x0a,
- // }, .{
- // 0x02, -0x09, -0x01, -0x10, -0x0c, -0x0f, -0x10, -0x0d, 0x02, 0x0e, 0x07, -0x01, -0x0a, -0x0b, 0x05, -0x0e,
- // -0x09, 0x03, 0x08, -0x0d, 0x0d, 0x03, -0x02, 0x0e, 0x0c, 0x03, 0x0b, -0x0d, -0x04, -0x10, 0x0e, 0x0d,
- // 0x09, -0x03, -0x0e, -0x03, -0x05, -0x0c, -0x07, 0x08, -0x06, 0x08, -0x0e, 0x02, -0x10, 0x01, 0x01, -0x0a,
- // 0x01, -0x09, 0x03, -0x01, 0x05, 0x09, 0x06, -0x03, -0x0a, 0x08, -0x0e, 0x0e, 0x07, -0x05, -0x0c, -0x10,
- // });
- // try testArgs(@Vector(128, i5), .{
- // 0x01, 0x0b, -0x01, -0x10, -0x05, 0x05, -0x09, 0x0e, -0x0e, 0x04, 0x0f, -0x06, 0x0f, 0x04, -0x02, 0x0a,
- // -0x08, -0x06, 0x08, -0x07, -0x08, 0x0e, 0x06, 0x0d, -0x07, -0x04, 0x04, -0x0b, 0x02, -0x06, 0x07, -0x10,
- // 0x0d, 0x09, 0x0b, -0x04, 0x0e, -0x06, -0x0a, 0x01, 0x06, 0x08, 0x01, -0x0b, -0x09, -0x08, -0x0c, -0x0b,
- // 0x07, 0x06, 0x0d, 0x0c, -0x0b, -0x03, -0x06, -0x0c, -0x0e, 0x05, 0x0b, 0x08, -0x01, 0x00, 0x01, 0x0a,
- // 0x00, 0x0a, 0x06, 0x06, -0x10, -0x05, -0x05, -0x0f, 0x02, -0x06, -0x08, -0x08, 0x0f, 0x09, -0x07, -0x05,
- // 0x07, 0x06, 0x03, 0x05, 0x02, 0x0f, 0x0d, -0x0e, -0x03, -0x01, -0x06, -0x02, -0x01, -0x07, 0x09, 0x05,
- // -0x07, -0x07, -0x08, 0x0c, -0x0e, 0x09, -0x0c, -0x0d, 0x07, 0x04, 0x07, -0x03, 0x09, 0x0e, 0x04, 0x02,
- // 0x0f, -0x02, -0x10, -0x03, -0x0d, -0x04, 0x0c, -0x06, -0x01, -0x0e, -0x0e, -0x0a, 0x0d, -0x0e, 0x04, 0x03,
- // }, .{
- // -0x08, -0x09, -0x04, 0x0f, -0x0f, -0x08, -0x04, 0x0b, 0x09, -0x0b, -0x02, 0x0f, 0x01, -0x01, -0x0a, -0x0a,
- // 0x08, 0x09, 0x0d, -0x06, 0x0f, -0x02, 0x0c, 0x01, 0x0c, 0x02, -0x04, 0x0b, 0x05, 0x02, -0x08, -0x09,
- // 0x01, 0x0f, -0x0b, 0x02, -0x06, 0x08, -0x0e, -0x02, -0x0b, -0x03, -0x01, 0x0c, 0x09, -0x04, 0x08, -0x0a,
- // 0x09, -0x05, 0x08, 0x0e, 0x05, 0x03, -0x0a, 0x0d, -0x03, 0x06, 0x0f, -0x09, 0x0a, 0x03, 0x02, 0x0c,
- // 0x08, -0x0a, 0x06, 0x0e, 0x08, 0x02, 0x08, -0x04, -0x0d, -0x02, -0x08, -0x0a, 0x0a, 0x0c, -0x03, 0x04,
- // 0x0b, -0x0c, -0x0e, 0x01, 0x07, -0x01, 0x09, 0x0f, -0x06, -0x05, -0x0e, -0x01, -0x04, 0x0a, -0x0a, -0x0d,
- // -0x10, -0x10, -0x03, -0x0f, -0x0c, -0x0a, -0x0b, -0x06, -0x04, -0x0f, -0x0b, -0x08, 0x0e, 0x04, -0x01, -0x0b,
- // -0x06, 0x0a, 0x0a, -0x0c, -0x0c, 0x0b, -0x02, 0x0c, -0x04, -0x06, -0x0c, -0x09, -0x09, -0x0b, -0x0c, -0x0b,
- // });
try testArgs(@Vector(1, i5), .{
- -0x0f,
+ 0x03,
}, .{
- -0x03,
+ 0x0a,
});
try testArgs(@Vector(2, i5), .{
- 0x0b, -0x04,
+ 0x0c, -0x0e,
}, .{
- -0x05, -0x08,
+ -0x0f, -0x0e,
});
try testArgs(@Vector(4, i5), .{
- 0x08, 0x0f, -0x06, -0x0d,
+ -0x0a, 0x06, -0x05, 0x09,
}, .{
- -0x03, -0x0a, -0x05, -0x03,
+ -0x0f, 0x05, 0x05, 0x09,
});
try testArgs(@Vector(8, i5), .{
- 0x08, 0x0c, 0x07, 0x00, -0x06, 0x08, 0x08, 0x0d,
+ -0x04, -0x04, 0x05, -0x05, 0x0f, -0x0e, 0x0f, -0x0e,
}, .{
- 0x07, 0x09, 0x05, -0x08, 0x08, -0x0e, -0x0e, -0x0e,
+ -0x09, -0x0d, 0x02, 0x01, 0x08, -0x05, -0x09, -0x03,
});
try testArgs(@Vector(16, i5), .{
- 0x06, 0x0b, 0x07, 0x0e, 0x0e, 0x02, -0x08, -0x0b, -0x03, 0x09, -0x08, 0x0e, -0x03, -0x0a, 0x01, 0x0b,
+ -0x0e, -0x08, -0x10, -0x0b, -0x10, -0x09, -0x0f, -0x05, -0x10, 0x06, 0x0d, -0x04, 0x09, -0x0e, -0x10, -0x10,
}, .{
- -0x05, 0x0f, -0x08, -0x10, -0x07, 0x06, 0x08, 0x01, 0x0a, 0x06, 0x05, -0x0f, 0x03, 0x05, 0x0b, -0x06,
+ 0x03, 0x0b, 0x0c, 0x06, -0x0d, 0x0e, -0x09, -0x04, 0x0a, -0x0e, -0x0d, 0x0f, -0x09, -0x0e, -0x0b, 0x03,
});
try testArgs(@Vector(32, i5), .{
- 0x0e, 0x07, -0x08, 0x0b, 0x04, -0x05, 0x0f, 0x02, 0x04, -0x0c, 0x0d, 0x09, 0x0e, -0x02, -0x0f, 0x04,
- -0x03, -0x02, 0x09, -0x0d, 0x01, 0x00, -0x0e, -0x0a, 0x02, -0x06, 0x0c, 0x03, 0x06, 0x0e, 0x06, -0x07,
+ -0x08, -0x05, 0x09, -0x08, 0x01, 0x0e, -0x0c, 0x0b, -0x0e, 0x0f, -0x0b, 0x01, -0x03, 0x03, 0x08, 0x04,
+ 0x02, 0x0f, -0x0b, -0x0b, 0x0d, 0x00, 0x09, 0x00, -0x06, -0x08, -0x01, 0x0b, 0x05, 0x03, -0x05, -0x07,
}, .{
- -0x0a, 0x01, 0x0a, -0x10, 0x06, 0x09, 0x0e, 0x03, 0x0e, -0x09, 0x08, -0x08, 0x06, 0x0c, -0x0a, -0x07,
- 0x04, -0x02, -0x09, 0x0b, 0x0e, -0x03, -0x01, -0x0d, 0x0e, -0x0a, -0x02, 0x08, 0x0e, 0x02, -0x04, -0x05,
+ -0x0c, 0x07, 0x0d, -0x09, 0x0a, 0x06, -0x0b, -0x07, -0x0a, 0x08, 0x07, -0x0d, 0x08, 0x07, 0x09, -0x07,
+ 0x0b, -0x02, -0x02, -0x02, -0x06, -0x08, 0x0a, -0x0a, 0x02, -0x07, -0x0a, 0x0d, -0x07, -0x05, -0x0e, 0x05,
});
try testArgs(@Vector(64, i5), .{
- 0x04, 0x02, -0x04, -0x0a, -0x0b, -0x0b, -0x0c, -0x08, -0x0b, -0x05, 0x0c, 0x0b, 0x05, 0x02, -0x01, -0x06,
- -0x09, -0x06, 0x0a, 0x0f, -0x06, -0x0d, 0x0c, 0x05, 0x0b, -0x06, -0x02, 0x09, 0x0e, -0x09, 0x05, 0x0a,
- -0x0c, 0x0b, -0x01, -0x04, 0x01, 0x0c, 0x0f, -0x0f, -0x07, 0x0a, 0x04, 0x02, 0x08, -0x01, -0x03, 0x0a,
- -0x0e, -0x04, -0x03, -0x0b, -0x01, 0x02, -0x05, 0x08, -0x03, 0x02, -0x01, -0x05, 0x07, -0x09, 0x0f, 0x00,
+ 0x04, -0x0d, 0x0d, -0x01, 0x07, 0x0c, 0x00, 0x01, -0x07, 0x0a, -0x01, -0x01, 0x08, -0x0b, -0x03, -0x06,
+ -0x03, -0x03, -0x0c, 0x0e, -0x0c, -0x02, 0x07, -0x03, 0x0e, -0x0a, -0x0e, -0x06, -0x08, 0x0a, -0x0c, -0x0c,
+ 0x06, -0x04, 0x04, 0x00, 0x05, 0x07, 0x04, 0x06, -0x01, 0x0a, 0x07, -0x08, 0x00, 0x0f, 0x0f, 0x0d,
+ -0x07, 0x0f, 0x05, -0x0b, -0x08, -0x0c, 0x0d, -0x05, -0x05, 0x0e, 0x02, 0x06, 0x0d, 0x06, 0x00, 0x0a,
}, .{
- -0x09, -0x02, -0x0a, -0x05, -0x05, -0x0d, 0x04, -0x05, 0x0e, -0x01, -0x07, 0x04, 0x0d, -0x0f, -0x09, -0x04,
- -0x0b, -0x0b, 0x0e, 0x01, 0x06, -0x0f, -0x0b, 0x03, -0x04, 0x05, -0x03, -0x09, 0x0a, 0x04, 0x04, -0x06,
- -0x02, 0x01, 0x0e, 0x0c, -0x10, 0x0f, -0x09, -0x08, -0x10, -0x02, -0x07, -0x0d, 0x08, 0x07, -0x03, 0x01,
- -0x0d, -0x10, -0x07, 0x08, 0x0d, 0x07, 0x09, 0x0f, 0x04, 0x06, -0x05, -0x09, 0x04, -0x04, -0x04, 0x0d,
+ 0x02, -0x09, -0x01, -0x10, -0x0c, -0x0f, -0x10, -0x0d, 0x02, 0x0e, 0x07, -0x01, -0x0a, -0x0b, 0x05, -0x0e,
+ -0x09, 0x03, 0x08, -0x0d, 0x0d, 0x03, -0x02, 0x0e, 0x0c, 0x03, 0x0b, -0x0d, -0x04, -0x10, 0x0e, 0x0d,
+ 0x09, -0x03, -0x0e, -0x03, -0x05, -0x0c, -0x07, 0x08, -0x06, 0x08, -0x0e, 0x02, -0x10, 0x01, 0x01, -0x0a,
+ 0x01, -0x09, 0x03, -0x01, 0x05, 0x09, 0x06, -0x03, -0x0a, 0x08, -0x0e, 0x0e, 0x07, -0x05, -0x0c, -0x10,
});
try testArgs(@Vector(128, i5), .{
- -0x02, -0x07, -0x03, 0x08, -0x0b, -0x09, -0x0c, 0x0d, -0x0e, 0x08, -0x03, -0x09, 0x0a, 0x02, -0x0d, 0x05,
- -0x04, -0x0c, -0x07, 0x08, -0x0a, 0x04, 0x08, -0x07, 0x0c, 0x03, 0x0e, 0x0f, 0x08, -0x08, -0x02, -0x0a,
- -0x08, 0x04, -0x0c, -0x09, 0x0a, -0x0e, -0x04, -0x05, 0x02, 0x0d, -0x04, -0x0f, -0x0d, -0x02, 0x05, -0x07,
- 0x06, 0x0b, -0x0b, -0x04, -0x04, -0x0e, -0x0c, 0x09, 0x02, -0x0c, 0x0e, 0x09, 0x02, -0x04, 0x05, 0x04,
- -0x0e, -0x02, -0x08, 0x05, 0x00, 0x0f, -0x0a, 0x0a, 0x0b, 0x0b, 0x02, -0x02, -0x0d, -0x08, -0x0d, 0x03,
- 0x0b, -0x0b, 0x02, 0x05, -0x06, -0x07, -0x08, -0x0a, -0x09, -0x03, -0x0e, -0x0f, -0x0b, 0x03, 0x00, 0x09,
- 0x07, 0x0a, -0x0b, 0x06, 0x01, -0x03, -0x0a, -0x09, -0x07, -0x0d, 0x0a, -0x0c, 0x01, -0x09, -0x01, -0x01,
- -0x09, 0x00, 0x0f, 0x05, -0x0b, 0x0c, 0x04, 0x0c, 0x0b, -0x08, 0x01, -0x05, -0x04, 0x02, 0x0c, 0x04,
- }, .{
- -0x08, -0x05, -0x0a, 0x06, -0x06, -0x04, 0x01, 0x07, 0x0d, -0x0a, -0x02, 0x0b, -0x01, -0x0c, -0x04, 0x0c,
- -0x06, 0x0d, 0x04, 0x0b, 0x07, 0x0c, 0x02, 0x02, -0x02, 0x09, 0x0d, -0x07, -0x08, 0x07, -0x04, 0x06,
- -0x0a, 0x07, 0x01, 0x07, -0x0d, 0x02, 0x09, -0x02, 0x0e, -0x08, -0x03, -0x07, 0x07, 0x0a, -0x0e, -0x06,
- 0x0b, -0x0d, 0x0c, -0x06, -0x07, 0x0a, 0x0b, -0x0a, 0x05, 0x01, -0x0d, -0x08, -0x0e, -0x08, -0x07, -0x01,
- -0x10, 0x07, 0x03, 0x06, 0x03, 0x0a, 0x08, -0x0a, 0x04, -0x09, 0x0c, 0x01, -0x10, 0x02, 0x09, 0x0d,
- 0x0f, -0x01, -0x06, -0x0a, 0x04, 0x01, 0x07, 0x07, 0x0e, 0x0e, -0x04, -0x0a, -0x03, 0x07, 0x07, -0x10,
- -0x04, 0x0e, -0x09, -0x0f, -0x0b, -0x0e, 0x0c, -0x0d, 0x0b, -0x06, 0x0f, -0x0d, 0x0b, 0x04, -0x10, -0x10,
- -0x0e, 0x09, 0x0d, -0x02, -0x0e, -0x06, -0x0b, -0x0f, -0x08, -0x0f, -0x0d, -0x0a, -0x02, 0x03, 0x0b, -0x0a,
+ 0x01, 0x0b, -0x01, -0x10, -0x05, 0x05, -0x09, 0x0e, -0x0e, 0x04, 0x0f, -0x06, 0x0f, 0x04, -0x02, 0x0a,
+ -0x08, -0x06, 0x08, -0x07, -0x08, 0x0e, 0x06, 0x0d, -0x07, -0x04, 0x04, -0x0b, 0x02, -0x06, 0x07, -0x10,
+ 0x0d, 0x09, 0x0b, -0x04, 0x0e, -0x06, -0x0a, 0x01, 0x06, 0x08, 0x01, -0x0b, -0x09, -0x08, -0x0c, -0x0b,
+ 0x07, 0x06, 0x0d, 0x0c, -0x0b, -0x03, -0x06, -0x0c, -0x0e, 0x05, 0x0b, 0x08, -0x01, 0x00, 0x01, 0x0a,
+ 0x00, 0x0a, 0x06, 0x06, -0x10, -0x05, -0x05, -0x0f, 0x02, -0x06, -0x08, -0x08, 0x0f, 0x09, -0x07, -0x05,
+ 0x07, 0x06, 0x03, 0x05, 0x02, 0x0f, 0x0d, -0x0e, -0x03, -0x01, -0x06, -0x02, -0x01, -0x07, 0x09, 0x05,
+ -0x07, -0x07, -0x08, 0x0c, -0x0e, 0x09, -0x0c, -0x0d, 0x07, 0x04, 0x07, -0x03, 0x09, 0x0e, 0x04, 0x02,
+ 0x0f, -0x02, -0x10, -0x03, -0x0d, -0x04, 0x0c, -0x06, -0x01, -0x0e, -0x0e, -0x0a, 0x0d, -0x0e, 0x04, 0x03,
+ }, .{
+ -0x08, -0x09, -0x04, 0x0f, -0x0f, -0x08, -0x04, 0x0b, 0x09, -0x0b, -0x02, 0x0f, 0x01, -0x01, -0x0a, -0x0a,
+ 0x08, 0x09, 0x0d, -0x06, 0x0f, -0x02, 0x0c, 0x01, 0x0c, 0x02, -0x04, 0x0b, 0x05, 0x02, -0x08, -0x09,
+ 0x01, 0x0f, -0x0b, 0x02, -0x06, 0x08, -0x0e, -0x02, -0x0b, -0x03, -0x01, 0x0c, 0x09, -0x04, 0x08, -0x0a,
+ 0x09, -0x05, 0x08, 0x0e, 0x05, 0x03, -0x0a, 0x0d, -0x03, 0x06, 0x0f, -0x09, 0x0a, 0x03, 0x02, 0x0c,
+ 0x08, -0x0a, 0x06, 0x0e, 0x08, 0x02, 0x08, -0x04, -0x0d, -0x02, -0x08, -0x0a, 0x0a, 0x0c, -0x03, 0x04,
+ 0x0b, -0x0c, -0x0e, 0x01, 0x07, -0x01, 0x09, 0x0f, -0x06, -0x05, -0x0e, -0x01, -0x04, 0x0a, -0x0a, -0x0d,
+ -0x10, -0x10, -0x03, -0x0f, -0x0c, -0x0a, -0x0b, -0x06, -0x04, -0x0f, -0x0b, -0x08, 0x0e, 0x04, -0x01, -0x0b,
+ -0x06, 0x0a, 0x0a, -0x0c, -0x0c, 0x0b, -0x02, 0x0c, -0x04, -0x06, -0x0c, -0x09, -0x09, -0x0b, -0x0c, -0x0b,
});
try testArgs(@Vector(1, u5), .{
@@ -5452,6 +5262,17 @@ test addUnsafe {
try test_add_unsafe.testFloatVectors();
}
+inline fn addSafe(comptime Type: type, lhs: Type, rhs: Type) AddOneBit(Type) {
+ @setRuntimeSafety(true);
+ return @as(AddOneBit(Type), lhs) + rhs;
+}
+test addSafe {
+ const test_add_safe = binary(addSafe, .{});
+ try test_add_safe.testInts();
+ try test_add_safe.testFloats();
+ try test_add_safe.testFloatVectors();
+}
+
inline fn addWrap(comptime Type: type, lhs: Type, rhs: Type) Type {
return lhs +% rhs;
}
@@ -5463,15 +5284,14 @@ test addWrap {
inline fn subUnsafe(comptime Type: type, lhs: Type, rhs: Type) AddOneBit(Type) {
@setRuntimeSafety(false);
- switch (@typeInfo(Scalar(Type))) {
+ return switch (@typeInfo(Scalar(Type))) {
else => @compileError(@typeName(Type)),
.int => |int| switch (int.signedness) {
- .signed => {},
- .unsigned => return @as(AddOneBit(Type), @max(lhs, rhs)) - @min(lhs, rhs),
+ .signed => @as(AddOneBit(Type), lhs) - rhs,
+ .unsigned => @as(AddOneBit(Type), @max(lhs, rhs)) - @min(lhs, rhs),
},
- .float => {},
- }
- return @as(AddOneBit(Type), lhs) - rhs;
+ .float => lhs - rhs,
+ };
}
test subUnsafe {
const test_sub_unsafe = binary(subUnsafe, .{});
@@ -5481,6 +5301,24 @@ test subUnsafe {
try test_sub_unsafe.testFloatVectors();
}
+inline fn subSafe(comptime Type: type, lhs: Type, rhs: Type) AddOneBit(Type) {
+ @setRuntimeSafety(true);
+ return switch (@typeInfo(Scalar(Type))) {
+ else => @compileError(@typeName(Type)),
+ .int => |int| switch (int.signedness) {
+ .signed => @as(AddOneBit(Type), lhs) - rhs,
+ .unsigned => @as(AddOneBit(Type), @max(lhs, rhs)) - @min(lhs, rhs),
+ },
+ .float => lhs - rhs,
+ };
+}
+test subSafe {
+ const test_sub_safe = binary(subSafe, .{});
+ try test_sub_safe.testInts();
+ try test_sub_safe.testFloats();
+ try test_sub_safe.testFloatVectors();
+}
+
inline fn subWrap(comptime Type: type, lhs: Type, rhs: Type) Type {
return lhs -% rhs;
}
@@ -5500,6 +5338,15 @@ test mulUnsafe {
try test_mul_unsafe.testIntVectors();
}
+inline fn mulSafe(comptime Type: type, lhs: Type, rhs: Type) DoubleBits(Type) {
+ @setRuntimeSafety(true);
+ return @as(DoubleBits(Type), lhs) * rhs;
+}
+test mulSafe {
+ const test_mul_safe = binary(mulSafe, .{});
+ try test_mul_safe.testInts();
+}
+
inline fn mulWrap(comptime Type: type, lhs: Type, rhs: Type) Type {
return lhs *% rhs;
}
@@ -5606,6 +5453,30 @@ test min {
try test_min.testFloatVectors();
}
+inline fn addWithOverflow(comptime Type: type, lhs: Type, rhs: Type) struct { Type, u1 } {
+ return @addWithOverflow(lhs, rhs);
+}
+test addWithOverflow {
+ const test_add_with_overflow = binary(addWithOverflow, .{});
+ try test_add_with_overflow.testInts();
+}
+
+inline fn subWithOverflow(comptime Type: type, lhs: Type, rhs: Type) struct { Type, u1 } {
+ return @subWithOverflow(lhs, rhs);
+}
+test subWithOverflow {
+ const test_sub_with_overflow = binary(subWithOverflow, .{});
+ try test_sub_with_overflow.testInts();
+}
+
+inline fn mulWithOverflow(comptime Type: type, lhs: Type, rhs: Type) struct { Type, u1 } {
+ return @mulWithOverflow(lhs, rhs);
+}
+test mulWithOverflow {
+ const test_mul_with_overflow = binary(mulWithOverflow, .{});
+ try test_mul_with_overflow.testInts();
+}
+
inline fn equal(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs == rhs) {
return lhs == rhs;
}
@@ -5709,15 +5580,16 @@ test shl {
try test_shl.testInts();
}
-inline fn shlExact(comptime Type: type, lhs: Type, rhs: Type) Type {
+inline fn shlExactUnsafe(comptime Type: type, lhs: Type, rhs: Type) Type {
+ @setRuntimeSafety(false);
const bit_cast_rhs: @Type(.{ .int = .{ .signedness = .unsigned, .bits = @bitSizeOf(Type) } }) = @bitCast(rhs);
const truncate_rhs: Log2Int(Type) = @truncate(bit_cast_rhs);
const final_rhs = if (comptime cast(Log2Int(Type), @bitSizeOf(Type))) |bits| truncate_rhs % bits else truncate_rhs;
return @shlExact(lhs << final_rhs >> final_rhs, final_rhs);
}
-test shlExact {
- const test_shl_exact = binary(shlExact, .{});
- try test_shl_exact.testInts();
+test shlExactUnsafe {
+ const test_shl_exact_unsafe = binary(shlExactUnsafe, .{});
+ try test_shl_exact_unsafe.testInts();
}
inline fn bitXor(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs ^ rhs) {
diff --git a/test/behavior/x86_64/math.zig b/test/behavior/x86_64/math.zig
@@ -153,6 +153,9 @@ pub noinline fn checkExpected(expected: anytype, actual: @TypeOf(expected), comp
);
},
},
+ .@"struct" => |@"struct"| inline for (@"struct".fields) |field| {
+ try checkExpected(@field(expected, field.name), @field(actual, field.name), compare);
+ } else return,
};
if (switch (@typeInfo(Expected)) {
else => unexpected,