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