diff --git a/build.zig b/build.zig index e53135ccdf..1ecc7c7dcb 100644 --- a/build.zig +++ b/build.zig @@ -450,7 +450,7 @@ pub fn build(b: *std.Build) !void { .skip_non_native = skip_non_native, .skip_libc = skip_libc, .use_llvm = use_llvm, - .max_rss = 1 * 1024 * 1024 * 1024, + .max_rss = 1.25 * 1024 * 1024 * 1024, })); test_modules_step.dependOn(tests.addModuleTests(b, .{ diff --git a/lib/std/zig/Zir.zig b/lib/std/zig/Zir.zig index 24fcf407f0..8a19aaa3cb 100644 --- a/lib/std/zig/Zir.zig +++ b/lib/std/zig/Zir.zig @@ -2114,7 +2114,7 @@ pub const Inst = struct { ref_start_index = static_len, _, - pub const static_len = 92; + pub const static_len = 93; pub fn toRef(i: Index) Inst.Ref { return @enumFromInt(@intFromEnum(Index.ref_start_index) + @intFromEnum(i)); @@ -2215,6 +2215,7 @@ pub const Inst = struct { vector_4_u64_type, vector_4_f16_type, vector_8_f16_type, + vector_2_f32_type, vector_4_f32_type, vector_8_f32_type, vector_2_f64_type, diff --git a/src/Air.zig b/src/Air.zig index 30ea7b0abc..22727adbd9 100644 --- a/src/Air.zig +++ b/src/Air.zig @@ -266,7 +266,8 @@ pub const Inst = struct { /// Boolean or binary NOT. /// Uses the `ty_op` field. not, - /// Reinterpret the memory representation of a value as a different type. + /// Reinterpret the bits of a value as a different type. This is like `@bitCast` but + /// also supports enums and pointers. /// Uses the `ty_op` field. bitcast, /// Uses the `ty_pl` field with payload `Block`. A block runs its body which always ends @@ -517,14 +518,6 @@ pub const Inst = struct { /// Read a value from a pointer. /// Uses the `ty_op` field. load, - /// Converts a pointer to its address. Result type is always `usize`. - /// Pointer type size may be any, including slice. - /// Uses the `un_op` field. - int_from_ptr, - /// Given a boolean, returns 0 or 1. - /// Result type is always `u1`. - /// Uses the `un_op` field. - int_from_bool, /// Return a value from a function. /// Result type is always noreturn; no instructions in a block follow this one. /// Uses the `un_op` field. @@ -1008,6 +1001,7 @@ pub const Inst = struct { vector_4_u64_type = @intFromEnum(InternPool.Index.vector_4_u64_type), vector_4_f16_type = @intFromEnum(InternPool.Index.vector_4_f16_type), vector_8_f16_type = @intFromEnum(InternPool.Index.vector_8_f16_type), + vector_2_f32_type = @intFromEnum(InternPool.Index.vector_2_f32_type), vector_4_f32_type = @intFromEnum(InternPool.Index.vector_4_f32_type), vector_8_f32_type = @intFromEnum(InternPool.Index.vector_8_f32_type), vector_2_f64_type = @intFromEnum(InternPool.Index.vector_2_f64_type), @@ -1542,7 +1536,6 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool) .c_va_end, => return Type.void, - .int_from_ptr, .slice_len, .ret_addr, .frame_addr, @@ -1552,8 +1545,6 @@ pub fn typeOfIndex(air: *const Air, inst: Air.Inst.Index, ip: *const InternPool) .wasm_memory_grow => return Type.isize, .wasm_memory_size => return Type.usize, - .int_from_bool => return Type.u1, - .tag_name, .error_name => return Type.slice_const_u8_sentinel_0, .call, .call_always_tail, .call_never_tail, .call_never_inline => { @@ -1815,8 +1806,6 @@ pub fn mustLower(air: Air, inst: Air.Inst.Index, ip: *const InternPool) bool { .is_non_err_ptr, .bool_and, .bool_or, - .int_from_ptr, - .int_from_bool, .fptrunc, .fpext, .intcast, diff --git a/src/Air/types_resolved.zig b/src/Air/types_resolved.zig index ead34cb383..79760ea24d 100644 --- a/src/Air/types_resolved.zig +++ b/src/Air/types_resolved.zig @@ -208,8 +208,6 @@ fn checkBody(air: Air, body: []const Air.Inst.Index, zcu: *Zcu) bool { .is_non_err, .is_err_ptr, .is_non_err_ptr, - .int_from_ptr, - .int_from_bool, .ret, .ret_safe, .ret_load, diff --git a/src/InternPool.zig b/src/InternPool.zig index ed585a0393..3668228e07 100644 --- a/src/InternPool.zig +++ b/src/InternPool.zig @@ -4593,6 +4593,7 @@ pub const Index = enum(u32) { vector_4_u64_type, vector_4_f16_type, vector_8_f16_type, + vector_2_f32_type, vector_4_f32_type, vector_8_f32_type, vector_2_f64_type, @@ -5124,6 +5125,8 @@ pub const static_keys = [_]Key{ .{ .vector_type = .{ .len = 4, .child = .f16_type } }, // @Vector(8, f16) .{ .vector_type = .{ .len = 8, .child = .f16_type } }, + // @Vector(2, f32) + .{ .vector_type = .{ .len = 2, .child = .f32_type } }, // @Vector(4, f32) .{ .vector_type = .{ .len = 4, .child = .f32_type } }, // @Vector(8, f32) @@ -11778,6 +11781,7 @@ pub fn typeOf(ip: *const InternPool, index: Index) Index { .vector_4_u64_type, .vector_4_f16_type, .vector_8_f16_type, + .vector_2_f32_type, .vector_4_f32_type, .vector_8_f32_type, .vector_2_f64_type, @@ -12117,6 +12121,7 @@ pub fn zigTypeTag(ip: *const InternPool, index: Index) std.builtin.TypeId { .vector_4_u64_type, .vector_4_f16_type, .vector_8_f16_type, + .vector_2_f32_type, .vector_4_f32_type, .vector_8_f32_type, .vector_2_f64_type, diff --git a/src/Liveness.zig b/src/Liveness.zig index 28102a9c45..199e81b86b 100644 --- a/src/Liveness.zig +++ b/src/Liveness.zig @@ -402,8 +402,6 @@ pub fn categorizeOperand( .is_non_err, .is_err_ptr, .is_non_err_ptr, - .int_from_ptr, - .int_from_bool, .is_named_enum_value, .tag_name, .error_name, @@ -1028,8 +1026,6 @@ fn analyzeInst( .is_non_err, .is_err_ptr, .is_non_err_ptr, - .int_from_ptr, - .int_from_bool, .is_named_enum_value, .tag_name, .error_name, diff --git a/src/Liveness/Verify.zig b/src/Liveness/Verify.zig index 583c6d46bb..a8cb81c51b 100644 --- a/src/Liveness/Verify.zig +++ b/src/Liveness/Verify.zig @@ -130,8 +130,6 @@ fn verifyBody(self: *Verify, body: []const Air.Inst.Index) Error!void { .is_non_err, .is_err_ptr, .is_non_err_ptr, - .int_from_ptr, - .int_from_bool, .is_named_enum_value, .tag_name, .error_name, diff --git a/src/Sema.zig b/src/Sema.zig index 5c1b6a10f5..b50faa4b9b 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -10038,6 +10038,8 @@ fn zirIntFromPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! }; return sema.failWithOwnedErrorMsg(block, msg); } + const len = if (is_vector) operand_ty.vectorLen(zcu) else undefined; + const dest_ty: Type = if (is_vector) try pt.vectorType(.{ .child = .usize_type, .len = len }) else .usize; if (try sema.resolveValueIntable(operand)) |operand_val| ct: { if (!is_vector) { if (operand_val.isUndef(zcu)) { @@ -10048,8 +10050,6 @@ fn zirIntFromPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! (try operand_val.toUnsignedIntSema(pt)), )).toIntern()); } - const len = operand_ty.vectorLen(zcu); - const dest_ty = try pt.vectorType(.{ .child = .usize_type, .len = len }); const new_elems = try sema.arena.alloc(InternPool.Index, len); for (new_elems, 0..) |*new_elem, i| { const ptr_val = try operand_val.elemValue(pt, i); @@ -10073,16 +10073,14 @@ fn zirIntFromPtr(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! } try sema.requireRuntimeBlock(block, block.nodeOffset(inst_data.src_node), ptr_src); try sema.validateRuntimeValue(block, ptr_src, operand); - if (!is_vector) { - return block.addUnOp(.int_from_ptr, operand); + if (!is_vector or zcu.backendSupportsFeature(.all_vector_instructions)) { + return block.addBitCast(dest_ty, operand); } - const len = operand_ty.vectorLen(zcu); - const dest_ty = try pt.vectorType(.{ .child = .usize_type, .len = len }); const new_elems = try sema.arena.alloc(Air.Inst.Ref, len); for (new_elems, 0..) |*new_elem, i| { const idx_ref = try pt.intRef(Type.usize, i); const old_elem = try block.addBinOp(.array_elem_val, operand, idx_ref); - new_elem.* = try block.addUnOp(.int_from_ptr, old_elem); + new_elem.* = try block.addBitCast(.usize, old_elem); } return block.addAggregateInit(dest_ty, new_elems); } @@ -10569,7 +10567,7 @@ fn zirFloatCast(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A if (dst_bits >= src_bits) { return sema.coerce(block, dest_ty, operand, operand_src); } - if (!is_vector) { + if (!is_vector or zcu.backendSupportsFeature(.all_vector_instructions)) { return block.addTyOp(.fptrunc, dest_ty, operand); } const vec_len = operand_ty.vectorLen(zcu); @@ -14746,7 +14744,7 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai }); const many_ty = slice_ty.slicePtrFieldType(zcu); - const many_alloc = try block.addTyOp(.bitcast, many_ty, mutable_alloc); + const many_alloc = try block.addBitCast(many_ty, mutable_alloc); // lhs_dest_slice = dest[0..lhs.len] const slice_ty_ref = Air.internedToRef(slice_ty.toIntern()); @@ -14796,7 +14794,7 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai try sema.storePtr2(block, src, elem_ptr, src, init, lhs_src, .store); } - return block.addTyOp(.bitcast, constant_alloc_ty, mutable_alloc); + return block.addBitCast(constant_alloc_ty, mutable_alloc); } var elem_i: u32 = 0; @@ -14829,7 +14827,7 @@ fn zirArrayCat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai try sema.storePtr2(block, src, elem_ptr, src, init, lhs_src, .store); } - return block.addTyOp(.bitcast, constant_alloc_ty, mutable_alloc); + return block.addBitCast(constant_alloc_ty, mutable_alloc); } const element_refs = try sema.arena.alloc(Air.Inst.Ref, result_len); @@ -16596,8 +16594,8 @@ fn analyzeArithmetic( }; try sema.requireRuntimeBlock(block, src, runtime_src); - const lhs_int = try block.addUnOp(.int_from_ptr, lhs); - const rhs_int = try block.addUnOp(.int_from_ptr, rhs); + const lhs_int = try block.addBitCast(.usize, lhs); + const rhs_int = try block.addBitCast(.usize, rhs); const address = try block.addBinOp(.sub_wrap, lhs_int, rhs_int); return try block.addBinOp(.div_exact, address, try pt.intRef(Type.usize, elem_size)); } @@ -21215,14 +21213,14 @@ fn zirIntFromBool(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError if (operand_scalar_ty.toIntern() != .bool_type) { return sema.fail(block, src, "expected 'bool', found '{}'", .{operand_scalar_ty.zigTypeTag(zcu)}); } + const len = if (is_vector) operand_ty.vectorLen(zcu) else undefined; + const dest_ty: Type = if (is_vector) try pt.vectorType(.{ .child = .u1_type, .len = len }) else .u1; if (try sema.resolveValue(operand)) |val| { if (!is_vector) { if (val.isUndef(zcu)) return pt.undefRef(Type.u1); if (val.toBool()) return Air.internedToRef((try pt.intValue(Type.u1, 1)).toIntern()); return Air.internedToRef((try pt.intValue(Type.u1, 0)).toIntern()); } - const len = operand_ty.vectorLen(zcu); - const dest_ty = try pt.vectorType(.{ .child = .u1_type, .len = len }); if (val.isUndef(zcu)) return pt.undefRef(dest_ty); const new_elems = try sema.arena.alloc(InternPool.Index, len); for (new_elems, 0..) |*new_elem, i| { @@ -21240,16 +21238,14 @@ fn zirIntFromBool(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError .storage = .{ .elems = new_elems }, } })); } - if (!is_vector) { - return block.addUnOp(.int_from_bool, operand); + if (!is_vector or zcu.backendSupportsFeature(.all_vector_instructions)) { + return block.addBitCast(dest_ty, operand); } - const len = operand_ty.vectorLen(zcu); - const dest_ty = try pt.vectorType(.{ .child = .u1_type, .len = len }); const new_elems = try sema.arena.alloc(Air.Inst.Ref, len); for (new_elems, 0..) |*new_elem, i| { const idx_ref = try pt.intRef(Type.usize, i); const old_elem = try block.addBinOp(.array_elem_val, operand, idx_ref); - new_elem.* = try block.addUnOp(.int_from_bool, old_elem); + new_elem.* = try block.addBitCast(.u1, old_elem); } return block.addAggregateInit(dest_ty, new_elems); } @@ -22842,14 +22838,27 @@ fn zirIntFromFloat(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErro .storage = .{ .repeated_elem = (try pt.intValue(dest_scalar_ty, 0)).toIntern() }, } })); } - if (!is_vector) { + if (!is_vector or zcu.backendSupportsFeature(.all_vector_instructions)) { const result = try block.addTyOp(if (block.float_mode == .optimized) .int_from_float_optimized else .int_from_float, dest_ty, operand); if (block.wantSafety()) { const back = try block.addTyOp(.float_from_int, operand_ty, result); - const diff = try block.addBinOp(.sub, operand, back); - const ok_pos = try block.addBinOp(if (block.float_mode == .optimized) .cmp_lt_optimized else .cmp_lt, diff, Air.internedToRef((try pt.floatValue(operand_ty, 1.0)).toIntern())); - const ok_neg = try block.addBinOp(if (block.float_mode == .optimized) .cmp_gt_optimized else .cmp_gt, diff, Air.internedToRef((try pt.floatValue(operand_ty, -1.0)).toIntern())); - const ok = try block.addBinOp(.bool_and, ok_pos, ok_neg); + const diff = try block.addBinOp(if (block.float_mode == .optimized) .sub_optimized else .sub, operand, back); + const ok = if (is_vector) ok: { + const ok_pos = try block.addCmpVector(diff, Air.internedToRef((try sema.splat(operand_ty, try pt.floatValue(operand_scalar_ty, 1.0))).toIntern()), .lt); + const ok_neg = try block.addCmpVector(diff, Air.internedToRef((try sema.splat(operand_ty, try pt.floatValue(operand_scalar_ty, -1.0))).toIntern()), .gt); + const ok = try block.addBinOp(.bit_and, ok_pos, ok_neg); + break :ok try block.addInst(.{ + .tag = .reduce, + .data = .{ .reduce = .{ + .operand = ok, + .operation = .And, + } }, + }); + } else ok: { + const ok_pos = try block.addBinOp(if (block.float_mode == .optimized) .cmp_lt_optimized else .cmp_lt, diff, Air.internedToRef((try pt.floatValue(operand_ty, 1.0)).toIntern())); + const ok_neg = try block.addBinOp(if (block.float_mode == .optimized) .cmp_gt_optimized else .cmp_gt, diff, Air.internedToRef((try pt.floatValue(operand_ty, -1.0)).toIntern())); + break :ok try block.addBinOp(.bool_and, ok_pos, ok_neg); + }; try sema.addSafetyCheck(block, src, ok, .integer_part_out_of_bounds); } return result; @@ -22901,7 +22910,7 @@ fn zirFloatFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErro } try sema.requireRuntimeBlock(block, src, operand_src); - if (!is_vector) { + if (!is_vector or zcu.backendSupportsFeature(.all_vector_instructions)) { return block.addTyOp(.float_from_int, dest_ty, operand); } const len = operand_ty.vectorLen(zcu); @@ -22980,17 +22989,37 @@ fn zirPtrFromInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError! }); } try sema.requireRuntimeBlock(block, src, operand_src); - if (!is_vector) { + if (!is_vector or zcu.backendSupportsFeature(.all_vector_instructions)) { if (block.wantSafety() and (try elem_ty.hasRuntimeBitsSema(pt) or elem_ty.zigTypeTag(zcu) == .@"fn")) { if (!ptr_ty.isAllowzeroPtr(zcu)) { - const is_non_zero = try block.addBinOp(.cmp_neq, operand_coerced, .zero_usize); + const is_non_zero = if (is_vector) all_non_zero: { + const zero_usize = Air.internedToRef((try sema.splat(operand_ty, .zero_usize)).toIntern()); + const is_non_zero = try block.addCmpVector(operand_coerced, zero_usize, .neq); + break :all_non_zero try block.addInst(.{ + .tag = .reduce, + .data = .{ .reduce = .{ + .operand = is_non_zero, + .operation = .And, + } }, + }); + } else try block.addBinOp(.cmp_neq, operand_coerced, .zero_usize); try sema.addSafetyCheck(block, src, is_non_zero, .cast_to_null); } if (ptr_align.compare(.gt, .@"1")) { const align_bytes_minus_1 = ptr_align.toByteUnits().? - 1; - const align_minus_1 = Air.internedToRef((try pt.intValue(Type.usize, align_bytes_minus_1)).toIntern()); + const align_minus_1 = Air.internedToRef((try sema.splat(operand_ty, try pt.intValue(Type.usize, align_bytes_minus_1))).toIntern()); const remainder = try block.addBinOp(.bit_and, operand_coerced, align_minus_1); - const is_aligned = try block.addBinOp(.cmp_eq, remainder, .zero_usize); + const is_aligned = if (is_vector) all_aligned: { + const splat_zero_usize = Air.internedToRef((try sema.splat(operand_ty, .zero_usize)).toIntern()); + const is_aligned = try block.addCmpVector(remainder, splat_zero_usize, .eq); + break :all_aligned try block.addInst(.{ + .tag = .reduce, + .data = .{ .reduce = .{ + .operand = is_aligned, + .operation = .And, + } }, + }); + } else try block.addBinOp(.cmp_eq, remainder, .zero_usize); try sema.addSafetyCheck(block, src, is_aligned, .incorrect_alignment); } } @@ -23543,7 +23572,11 @@ fn ptrCastFull( if (block.wantSafety() and operand_ty.ptrAllowsZero(zcu) and !dest_ty.ptrAllowsZero(zcu) and (try Type.fromInterned(dest_info.child).hasRuntimeBitsSema(pt) or Type.fromInterned(dest_info.child).zigTypeTag(zcu) == .@"fn")) { - const ptr_int = try block.addUnOp(.int_from_ptr, ptr); + const actual_ptr = if (src_info.flags.size == .slice) + try sema.analyzeSlicePtr(block, src, ptr, operand_ty) + else + ptr; + const ptr_int = try block.addBitCast(.usize, actual_ptr); const is_non_zero = try block.addBinOp(.cmp_neq, ptr_int, .zero_usize); const ok = if (src_info.flags.size == .slice and dest_info.flags.size == .slice) ok: { const len = try sema.analyzeSliceLen(block, operand_src, ptr); @@ -23559,7 +23592,11 @@ fn ptrCastFull( { const align_bytes_minus_1 = dest_align.toByteUnits().? - 1; const align_minus_1 = Air.internedToRef((try pt.intValue(Type.usize, align_bytes_minus_1)).toIntern()); - const ptr_int = try block.addUnOp(.int_from_ptr, ptr); + const actual_ptr = if (src_info.flags.size == .slice) + try sema.analyzeSlicePtr(block, src, ptr, operand_ty) + else + ptr; + const ptr_int = try block.addBitCast(.usize, actual_ptr); const remainder = try block.addBinOp(.bit_and, ptr_int, align_minus_1); const is_aligned = try block.addBinOp(.cmp_eq, remainder, .zero_usize); const ok = if (src_info.flags.size == .slice and dest_info.flags.size == .slice) ok: { @@ -31407,7 +31444,7 @@ fn coerceCompatiblePtrs( try sema.analyzeSlicePtr(block, inst_src, inst, inst_ty) else inst; - const ptr_int = try block.addUnOp(.int_from_ptr, actual_ptr); + const ptr_int = try block.addBitCast(.usize, actual_ptr); const is_non_zero = try block.addBinOp(.cmp_neq, ptr_int, .zero_usize); const ok = if (inst_ty.isSlice(zcu)) ok: { const len = try sema.analyzeSliceLen(block, inst_src, inst); @@ -36700,6 +36737,7 @@ pub fn typeHasOnePossibleValue(sema: *Sema, ty: Type) CompileError!?Value { .vector_4_u64_type, .vector_4_f16_type, .vector_8_f16_type, + .vector_2_f32_type, .vector_4_f32_type, .vector_8_f32_type, .vector_2_f64_type, diff --git a/src/Type.zig b/src/Type.zig index 403caad668..0fd6e184d8 100644 --- a/src/Type.zig +++ b/src/Type.zig @@ -4216,6 +4216,7 @@ pub const vector_2_u64: Type = .{ .ip_index = .vector_2_u64_type }; pub const vector_4_u64: Type = .{ .ip_index = .vector_4_u64_type }; pub const vector_4_f16: Type = .{ .ip_index = .vector_4_f16_type }; pub const vector_8_f16: Type = .{ .ip_index = .vector_8_f16_type }; +pub const vector_2_f32: Type = .{ .ip_index = .vector_2_f32_type }; pub const vector_4_f32: Type = .{ .ip_index = .vector_4_f32_type }; pub const vector_8_f32: Type = .{ .ip_index = .vector_8_f32_type }; pub const vector_2_f64: Type = .{ .ip_index = .vector_2_f64_type }; diff --git a/src/Zcu.zig b/src/Zcu.zig index 13b302180d..74653bce01 100644 --- a/src/Zcu.zig +++ b/src/Zcu.zig @@ -3336,6 +3336,15 @@ pub const Feature = enum { safety_checked_instructions, /// If the backend supports running from another thread. separate_thread, + /// If the backend supports the following AIR instructions with vector types: + /// * `Air.Inst.Tag.bit_and` + /// * `Air.Inst.Tag.bit_or` + /// * `Air.Inst.Tag.bitcast` + /// * `Air.Inst.Tag.float_from_int` + /// * `Air.Inst.Tag.fptrunc` + /// * `Air.Inst.Tag.int_from_float` + /// If not supported, Sema will scalarize the operation. + all_vector_instructions, }; pub fn backendSupportsFeature(zcu: *const Zcu, comptime feature: Feature) bool { diff --git a/src/arch/aarch64/CodeGen.zig b/src/arch/aarch64/CodeGen.zig index 9ff240259c..d3aa7d4b46 100644 --- a/src/arch/aarch64/CodeGen.zig +++ b/src/arch/aarch64/CodeGen.zig @@ -734,7 +734,6 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .fpext => try self.airFpext(inst), .intcast => try self.airIntCast(inst), .trunc => try self.airTrunc(inst), - .int_from_bool => try self.airIntFromBool(inst), .is_non_null => try self.airIsNonNull(inst), .is_non_null_ptr => try self.airIsNonNullPtr(inst), .is_null => try self.airIsNull(inst), @@ -746,7 +745,6 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .load => try self.airLoad(inst), .loop => try self.airLoop(inst), .not => try self.airNot(inst), - .int_from_ptr => try self.airIntFromPtr(inst), .ret => try self.airRet(inst), .ret_safe => try self.airRet(inst), // TODO .ret_load => try self.airRetLoad(inst), @@ -1294,13 +1292,6 @@ fn airTrunc(self: *Self, inst: Air.Inst.Index) InnerError!void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airIntFromBool(self: *Self, inst: Air.Inst.Index) InnerError!void { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try self.resolveInst(un_op); - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else operand; - return self.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airNot(self: *Self, inst: Air.Inst.Index) InnerError!void { const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const pt = self.pt; @@ -5906,12 +5897,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I } } -fn airIntFromPtr(self: *Self, inst: Air.Inst.Index) InnerError!void { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const result = try self.resolveInst(un_op); - return self.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airBitCast(self: *Self, inst: Air.Inst.Index) InnerError!void { const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const result = if (self.liveness.isUnused(inst)) .dead else result: { diff --git a/src/arch/arm/CodeGen.zig b/src/arch/arm/CodeGen.zig index fc7335b4c6..96026531b2 100644 --- a/src/arch/arm/CodeGen.zig +++ b/src/arch/arm/CodeGen.zig @@ -723,7 +723,6 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .fpext => try self.airFpext(inst), .intcast => try self.airIntCast(inst), .trunc => try self.airTrunc(inst), - .int_from_bool => try self.airIntFromBool(inst), .is_non_null => try self.airIsNonNull(inst), .is_non_null_ptr => try self.airIsNonNullPtr(inst), .is_null => try self.airIsNull(inst), @@ -735,7 +734,6 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .load => try self.airLoad(inst), .loop => try self.airLoop(inst), .not => try self.airNot(inst), - .int_from_ptr => try self.airIntFromPtr(inst), .ret => try self.airRet(inst), .ret_safe => try self.airRet(inst), // TODO .ret_load => try self.airRetLoad(inst), @@ -1258,13 +1256,6 @@ fn airTrunc(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airIntFromBool(self: *Self, inst: Air.Inst.Index) !void { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try self.resolveInst(un_op); - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else operand; - return self.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airNot(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const pt = self.pt; @@ -5874,12 +5865,6 @@ fn genSetStackArgument(self: *Self, ty: Type, stack_offset: u32, mcv: MCValue) I } } -fn airIntFromPtr(self: *Self, inst: Air.Inst.Index) !void { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const result = try self.resolveInst(un_op); - return self.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airBitCast(self: *Self, inst: Air.Inst.Index) !void { const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const result = if (self.liveness.isUnused(inst)) .dead else result: { diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index de0f9836b2..2db96edd6d 100644 --- a/src/arch/riscv64/CodeGen.zig +++ b/src/arch/riscv64/CodeGen.zig @@ -1557,7 +1557,6 @@ fn genBody(func: *Func, body: []const Air.Inst.Index) InnerError!void { .fpext => try func.airFpext(inst), .intcast => try func.airIntCast(inst), .trunc => try func.airTrunc(inst), - .int_from_bool => try func.airIntFromBool(inst), .is_non_null => try func.airIsNonNull(inst), .is_non_null_ptr => try func.airIsNonNullPtr(inst), .is_null => try func.airIsNull(inst), @@ -1569,7 +1568,6 @@ fn genBody(func: *Func, body: []const Air.Inst.Index) InnerError!void { .load => try func.airLoad(inst), .loop => try func.airLoop(inst), .not => try func.airNot(inst), - .int_from_ptr => try func.airIntFromPtr(inst), .ret => try func.airRet(inst, false), .ret_safe => try func.airRet(inst, true), .ret_load => try func.airRetLoad(inst), @@ -2299,13 +2297,6 @@ fn airTrunc(func: *Func, inst: Air.Inst.Index) !void { return func.finishAir(inst, operand, .{ ty_op.operand, .none, .none }); } -fn airIntFromBool(func: *Func, inst: Air.Inst.Index) !void { - const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try func.resolveInst(un_op); - const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else operand; - return func.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airNot(func: *Func, inst: Air.Inst.Index) !void { const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else result: { @@ -7262,21 +7253,6 @@ fn genSetMem( } } -fn airIntFromPtr(func: *Func, inst: Air.Inst.Index) !void { - const un_op = func.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const result = result: { - const src_mcv = try func.resolveInst(un_op); - const src_ty = func.typeOfIndex(inst); - if (func.reuseOperand(inst, un_op, 0, src_mcv)) break :result src_mcv; - - const dst_mcv = try func.allocRegOrMem(src_ty, inst, true); - const dst_ty = func.typeOfIndex(inst); - try func.genCopy(dst_ty, dst_mcv, src_mcv); - break :result dst_mcv; - }; - return func.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airBitCast(func: *Func, inst: Air.Inst.Index) !void { const pt = func.pt; const zcu = pt.zcu; @@ -7285,8 +7261,9 @@ fn airBitCast(func: *Func, inst: Air.Inst.Index) !void { const result = if (func.liveness.isUnused(inst)) .unreach else result: { const src_mcv = try func.resolveInst(ty_op.operand); - const dst_ty = func.typeOfIndex(inst); const src_ty = func.typeOf(ty_op.operand); + if (src_ty.toIntern() == .bool_type) break :result src_mcv; + const dst_ty = func.typeOfIndex(inst); const src_lock = if (src_mcv.getReg()) |reg| func.register_manager.lockReg(reg) else null; defer if (src_lock) |lock| func.register_manager.unlockReg(lock); diff --git a/src/arch/sparc64/CodeGen.zig b/src/arch/sparc64/CodeGen.zig index 626914c38b..23133a13db 100644 --- a/src/arch/sparc64/CodeGen.zig +++ b/src/arch/sparc64/CodeGen.zig @@ -577,7 +577,6 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .fpext => @panic("TODO try self.airFpext(inst)"), .intcast => try self.airIntCast(inst), .trunc => try self.airTrunc(inst), - .int_from_bool => try self.airIntFromBool(inst), .is_non_null => try self.airIsNonNull(inst), .is_non_null_ptr => @panic("TODO try self.airIsNonNullPtr(inst)"), .is_null => try self.airIsNull(inst), @@ -589,7 +588,6 @@ fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { .load => try self.airLoad(inst), .loop => try self.airLoop(inst), .not => try self.airNot(inst), - .int_from_ptr => try self.airIntFromPtr(inst), .ret => try self.airRet(inst), .ret_safe => try self.airRet(inst), // TODO .ret_load => try self.airRetLoad(inst), @@ -1077,13 +1075,6 @@ fn airBinOp(self: *Self, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void { return self.finishAir(inst, result, .{ bin_op.lhs, bin_op.rhs, .none }); } -fn airIntFromBool(self: *Self, inst: Air.Inst.Index) !void { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try self.resolveInst(un_op); - const result: MCValue = if (self.liveness.isUnused(inst)) .dead else operand; - return self.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airPtrArithmetic(self: *Self, inst: Air.Inst.Index, tag: Air.Inst.Tag) !void { const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; const bin_op = self.air.extraData(Air.Bin, ty_pl.payload).data; @@ -2230,12 +2221,6 @@ fn airPtrSlicePtrPtr(self: *Self, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airIntFromPtr(self: *Self, inst: Air.Inst.Index) !void { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const result = try self.resolveInst(un_op); - return self.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airRem(self: *Self, inst: Air.Inst.Index) !void { const bin_op = self.air.instructions.items(.data)[@intFromEnum(inst)].bin_op; const lhs = try self.resolveInst(bin_op.lhs); diff --git a/src/arch/wasm/CodeGen.zig b/src/arch/wasm/CodeGen.zig index ecce271459..50dbf597db 100644 --- a/src/arch/wasm/CodeGen.zig +++ b/src/arch/wasm/CodeGen.zig @@ -1926,7 +1926,6 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { .br => cg.airBr(inst), .repeat => cg.airRepeat(inst), .switch_dispatch => return cg.fail("TODO implement `switch_dispatch`", .{}), - .int_from_bool => cg.airIntFromBool(inst), .cond_br => cg.airCondBr(inst), .intcast => cg.airIntcast(inst), .fptrunc => cg.airFptrunc(inst), @@ -1972,7 +1971,6 @@ fn genInst(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { .ptr_sub => cg.airPtrBinOp(inst, .sub), .ptr_elem_ptr => cg.airPtrElemPtr(inst), .ptr_elem_val => cg.airPtrElemVal(inst), - .int_from_ptr => cg.airIntFromPtr(inst), .ret => cg.airRet(inst), .ret_safe => cg.airRet(inst), // TODO .ret_ptr => cg.airRetPtr(inst), @@ -3777,7 +3775,11 @@ fn airBitcast(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { break :result try cg.wrapOperand(operand, wanted_ty); } - break :result cg.reuseOperand(ty_op.operand, operand); + break :result switch (operand) { + // for stack offset, return a pointer to this offset. + .stack_offset => try cg.buildPointerOffset(operand, 0, .new), + else => cg.reuseOperand(ty_op.operand, operand), + }; }; return cg.finishAir(inst, result, &.{ty_op.operand}); } @@ -4637,14 +4639,6 @@ fn trunc(cg: *CodeGen, operand: WValue, wanted_ty: Type, given_ty: Type) InnerEr return result; } -fn airIntFromBool(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { - const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try cg.resolveInst(un_op); - const result = cg.reuseOperand(un_op, operand); - - return cg.finishAir(inst, result, &.{un_op}); -} - fn airArrayToSlice(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { const zcu = cg.pt.zcu; const ty_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; @@ -4668,21 +4662,6 @@ fn airArrayToSlice(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { return cg.finishAir(inst, slice_local, &.{ty_op.operand}); } -fn airIntFromPtr(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { - const zcu = cg.pt.zcu; - const un_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try cg.resolveInst(un_op); - const ptr_ty = cg.typeOf(un_op); - const result = if (ptr_ty.isSlice(zcu)) - try cg.slicePtr(operand) - else switch (operand) { - // for stack offset, return a pointer to this offset. - .stack_offset => try cg.buildPointerOffset(operand, 0, .new), - else => cg.reuseOperand(un_op, operand), - }; - return cg.finishAir(inst, result, &.{un_op}); -} - fn airPtrElemVal(cg: *CodeGen, inst: Air.Inst.Index) InnerError!void { const zcu = cg.pt.zcu; const bin_op = cg.air.instructions.items(.data)[@intFromEnum(inst)].bin_op; diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index fc3dbcb23d..956aa29c09 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -1339,7 +1339,7 @@ fn addExtraAssumeCapacity(self: *CodeGen, extra: anytype) u32 { self.mir_extra.appendAssumeCapacity(switch (field.type) { u32 => @field(extra, field.name), i32, Mir.Memory.Info => @bitCast(@field(extra, field.name)), - bits.FrameIndex => @intFromEnum(@field(extra, field.name)), + FrameIndex => @intFromEnum(@field(extra, field.name)), else => @compileError("bad field type: " ++ field.name ++ ": " ++ @typeName(field.type)), }); } @@ -2414,7 +2414,7 @@ fn genBodyBlock(self: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { - @setEvalBranchQuota(3_900); + @setEvalBranchQuota(4_500); const pt = cg.pt; const zcu = pt.zcu; const ip = &zcu.intern_pool; @@ -2499,9 +2499,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .cmp_lt_errors_len => try cg.airCmpLtErrorsLen(inst), .bitcast => try cg.airBitCast(inst), - .fptrunc => try cg.airFptrunc(inst), - .fpext => try cg.airFpext(inst), - .intcast => try cg.airIntCast(inst), .trunc => try cg.airTrunc(inst), .is_non_null => try cg.airIsNonNull(inst), .is_null => try cg.airIsNull(inst), @@ -2591,7 +2588,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leaa(.none, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leaa(.src0, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 1 }}, @@ -2600,7 +2597,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 2 }}, @@ -2609,7 +2606,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"2", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"2", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 2 + 1 }}, @@ -2618,8 +2615,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"2", .src1), ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"2", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 4 }}, @@ -2628,7 +2625,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"4", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"4", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 4 + 1 }}, @@ -2637,8 +2634,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .ref = .src1 }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"4", .src1), ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"4", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -2648,7 +2645,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"8", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"8", .src1), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -2658,8 +2655,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .ref = .src1 }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"8", .src1), ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"8", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .dst_constraints = .{.po2_elem_size}, @@ -2670,7 +2667,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._l, .sh, .src1p, .sa(.none, .add_log2_src0_elem_size), ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .src1), ._, ._ }, } }, }, .{ .patterns = &.{ @@ -2680,7 +2677,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, .i_, .mul, .dst0p, .src1p, .sa(.none, .add_src0_elem_size), ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, } }) catch |err| switch (err) { error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ @@ -2707,7 +2704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leaa(.none, .src0, .sub_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leaa(.src0, .sub_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 1 }}, @@ -2718,7 +2715,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 2 }}, @@ -2729,7 +2726,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"2", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"2", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 2 + 1 }}, @@ -2739,9 +2736,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .general_purpose }}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"2", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"2", .src1), ._, ._ }, .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 4 }}, @@ -2752,7 +2749,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"4", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"4", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .elem_size_is = 4 + 1 }}, @@ -2762,9 +2759,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .general_purpose }}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"4", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"4", .src1), ._, ._ }, .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -2776,7 +2773,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src0, .@"8", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src0, .@"8", .src1), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -2787,9 +2784,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .general_purpose }}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .lea, .dst0p, .leasi(.none, .src1, .@"8", .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leasi(.src1, .@"8", .src1), ._, ._ }, .{ ._, ._, .neg, .dst0p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, }, .{ .dst_constraints = .{.po2_elem_size}, @@ -2801,7 +2798,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .each = .{ .once = &.{ .{ ._, ._l, .sa, .src1p, .sa(.none, .add_log2_src0_elem_size), ._, ._ }, .{ ._, ._, .neg, .src1p, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .src1), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .src1), ._, ._ }, } }, }, .{ .patterns = &.{ @@ -2811,7 +2808,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, .i_, .mul, .dst0p, .src1p, .sa(.none, .sub_src0_elem_size), ._ }, - .{ ._, ._, .lea, .dst0p, .leai(.none, .src0, .dst0), ._, ._ }, + .{ ._, ._, .lea, .dst0p, .leai(.src0, .dst0), ._, ._ }, } }, } }) catch |err| switch (err) { error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ @@ -4542,7 +4539,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .dst0x, .lea(.tmp0x), ._, ._ }, .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, .{ ._, .p_, .xor, .dst0x, .src0x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .src1x, ._, ._ }, @@ -4680,7 +4677,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, @@ -4999,7 +4996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ }, .{ ._, .vp_q, .cmpgt, .dst0x, .tmp2x, .dst0x, ._ }, @@ -5030,7 +5027,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, @@ -5062,7 +5059,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ }, .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, .{ ._, .vp_q, .cmpgt, .dst0y, .tmp2y, .dst0y, ._ }, @@ -5092,7 +5089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, @@ -5128,7 +5125,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, @@ -5164,7 +5161,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, @@ -5266,7 +5263,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, @@ -5305,7 +5302,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, @@ -5344,7 +5341,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, @@ -5381,7 +5378,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, @@ -5569,13 +5566,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) }, .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, - .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -5602,14 +5599,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, - .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -5636,7 +5633,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, @@ -5644,7 +5641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ }, .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -5659,7 +5656,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .call_frame = .{ .alignment = .@"16" }, .extra_temps = .{ .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, - .{ .type = .f16, .kind = .{ .reg = .eax } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, .{ .type = .f32, .kind = .mem }, .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, @@ -5671,7 +5668,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, @@ -5682,7 +5679,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ }, .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -5880,14 +5877,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, .{ ._, .v_ps, .max, .tmp1y, .tmp2y, .tmp1y, ._ }, .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -5913,7 +5910,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, @@ -5921,7 +5918,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -5947,7 +5944,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, @@ -5957,7 +5954,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ }, .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ }, .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -6181,14 +6178,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, .{ ._, .v_pd, .max, .tmp1y, .tmp2y, .tmp1y, ._ }, .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -6214,7 +6211,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, @@ -6222,7 +6219,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -6248,7 +6245,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, @@ -6258,7 +6255,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ }, .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ }, .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -6285,14 +6282,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ }, .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ }, .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -6582,12 +6579,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -6614,12 +6611,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -6646,12 +6643,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, } }) catch |err| switch (err) { @@ -8382,7 +8379,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .dst0x, .lea(.tmp0x), ._, ._ }, .{ ._, ._dqa, .mov, .tmp2x, .dst0x, ._, ._ }, .{ ._, .p_, .xor, .dst0x, .src1x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, @@ -8520,7 +8517,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, @@ -8843,7 +8840,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, .vp_, .xor, .dst0x, .tmp2x, .src0x, ._ }, .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .src1x, ._ }, .{ ._, .vp_q, .cmpgt, .dst0x, .dst0x, .tmp2x, ._ }, @@ -8874,7 +8871,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .src0x, ._, ._ }, .{ ._, .p_, .xor, .tmp3x, .src1x, ._, ._ }, @@ -8906,7 +8903,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ }, .{ ._, .vp_, .xor, .dst0y, .tmp2y, .src0y, ._ }, .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .src1y, ._ }, .{ ._, .vp_q, .cmpgt, .dst0y, .dst0y, .tmp2y, ._ }, @@ -8936,7 +8933,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .vp_q, .broadcast, .tmp2y, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, @@ -8972,7 +8969,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .v_, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, @@ -9008,7 +9005,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._, .movddup, .tmp2x, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, ._, .movddup, .tmp2x, .lea(.tmp0q), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp5x, .tmp2x, ._, ._ }, .{ ._, ._dqa, .mov, .tmp6x, .tmp2x, ._, ._ }, @@ -9110,7 +9107,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, @@ -9149,7 +9146,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, @@ -9188,7 +9185,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, @@ -9225,7 +9222,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._c, .cl, ._, ._, ._, ._ }, .{ .@"1:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .sbb, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, - .{ ._, ._, .lea, .tmp0p, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0p, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._c, .de, .tmp1d, ._, ._, ._ }, .{ ._, ._nz, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .memia(.src0, .tmp0, .add_size_sub_elem_size), ._, ._ }, @@ -9413,13 +9410,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ }, .{ ._, .vp_w, .insr, .tmp1x, .tmp2x, .memia(.src0w, .tmp0, .add_size), .ui(0) }, .{ ._, .vp_w, .insr, .tmp2x, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0) }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, - .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -9446,14 +9443,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, .{ ._, .p_w, .insr, .tmp2x, .memia(.src1w, .tmp0, .add_size), .ui(0), ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_size), .tmp1x, .ui(0), ._ }, - .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -9480,7 +9477,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ }, .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_size), .ui(0), ._ }, @@ -9488,7 +9485,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ }, .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp4w, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -9503,7 +9500,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .call_frame = .{ .alignment = .@"16" }, .extra_temps = .{ .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, - .{ .type = .f16, .kind = .{ .reg = .eax } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, .{ .type = .f32, .kind = .mem }, .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, .{ .type = .f16, .kind = .{ .reg = .xmm1 } }, @@ -9515,7 +9512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, @@ -9526,7 +9523,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp3x, ._, ._ }, .{ ._, ._, .mov, .tmp1d, .mem(.tmp2d), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_size), .tmp1w, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(2), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -9724,14 +9721,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_ps, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_ps, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_ps, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, .{ ._, .v_ps, .min, .tmp1y, .tmp2y, .tmp1y, ._ }, .{ ._, .v_ps, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -9757,7 +9754,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, @@ -9765,7 +9762,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, .{ ._, ._ps, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -9791,7 +9788,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, @@ -9801,7 +9798,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .andn, .tmp1x, .tmp2x, ._, ._ }, .{ ._, ._ps, .@"or", .tmp1x, .tmp3x, ._, ._ }, .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -10025,14 +10022,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_pd, .mova, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_pd, .mova, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._, ._ }, .{ ._, .v_pd, .cmp, .tmp3y, .tmp1y, .tmp1y, .vp(.unord) }, .{ ._, .v_pd, .min, .tmp1y, .tmp2y, .tmp1y, ._ }, .{ ._, .v_pd, .blendv, .tmp1y, .tmp1y, .tmp2y, .tmp3y }, .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(32), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -10058,7 +10055,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, @@ -10066,7 +10063,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._pd, .cmp, .tmp1x, .tmp1x, .vp(.unord), ._ }, .{ ._, ._pd, .blendv, .tmp3x, .tmp2x, .tmp1x, ._ }, .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp3x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -10092,7 +10089,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._pd, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._pd, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, @@ -10102,7 +10099,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._pd, .andn, .tmp1x, .tmp2x, ._, ._ }, .{ ._, ._pd, .@"or", .tmp1x, .tmp3x, ._, ._ }, .{ ._, ._pd, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -10129,14 +10126,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ }, .{ ._, ._ps, .xor, .tmp2x, .tmp2x, ._, ._ }, .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .movl, .tmp2x, .memia(.src1q, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(8), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -10414,12 +10411,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, .v_dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -10446,12 +10443,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._dqa, .mov, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -10478,12 +10475,12 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0q, .sa(.src0, .sub_size), ._, ._ }, + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .mova, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, - .{ ._, ._, .add, .tmp0q, .si(16), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, } }) catch |err| switch (err) { @@ -10999,7 +10996,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .p_, .xor, .dst0q, .lea(.tmp0q), ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -11033,7 +11030,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -11067,7 +11064,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .sse, null, null, null }, @@ -11089,7 +11086,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx2, null, null, null }, @@ -11123,7 +11120,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -11157,7 +11154,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx2, null, null, null }, @@ -11814,7 +11811,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .xor, .dst0q, .lea(.qword, .tmp0), ._, ._ }, + .{ ._, .p_, .xor, .dst0q, .lea(.tmp0q), ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -11848,7 +11845,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .vp_, .xor, .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -11882,7 +11879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, .p_, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .sse, null, null, null }, @@ -11904,7 +11901,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .xor, .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .xor, .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx2, null, null, null }, @@ -11938,7 +11935,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .vp_, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -11972,7 +11969,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_pd, .xor, .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -11992,13 +11989,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.mem}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, - .{ .@"0:", ._, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_src0_unaligned_size), ._, ._ }, - .{ ._, ._, .xor, .tmp2q, .leaia(.qword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ }, - .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_src0_unaligned_size), .tmp2q, ._, ._ }, - .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, - .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ }, + .{ ._, ._, .xor, .tmp2q, .leai(.tmp1q, .tmp0), ._, ._ }, + .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 8), ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, + .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .patterns = &.{ @@ -12017,13 +12015,14 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.mem}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_src0_unaligned_size), ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, - .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_src0_unaligned_size), ._, ._ }, - .{ ._, ._, .xor, .tmp2d, .leaia(.dword, .tmp1, .tmp0, .add_src0_unaligned_size), ._, ._ }, - .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_src0_unaligned_size), .tmp2d, ._, ._ }, - .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, - .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ }, + .{ ._, ._, .xor, .tmp2d, .leai(.tmp1d, .tmp0), ._, ._ }, + .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 4), ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, + .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, } }) catch |err| switch (err) { error.SelectFailed => return cg.fail("failed to select {s} {} {}", .{ @@ -13161,7 +13160,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, @@ -13190,7 +13189,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, @@ -13220,7 +13219,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13250,7 +13249,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13281,7 +13280,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, @@ -13310,7 +13309,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .bsf_bsr_0_clobbers_result, null, null }, @@ -13340,7 +13339,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .mov, .dst0d, .si(-1), ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13370,7 +13369,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13404,7 +13403,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, @@ -13436,7 +13435,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -13467,7 +13466,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -13501,7 +13500,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, @@ -13533,7 +13532,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ .@"0:", ._, .neg, .tmp0d, ._, ._, ._ }, - .{ ._, ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .add_src0_bit_size, -64), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -13564,7 +13563,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, - .{ .@"0:", ._, .lea, .dst0d, .leasiad(.none, .dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"0:", ._, .lea, .dst0d, .leasiad(.dst0, .@"8", .tmp0, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .dst0d, ._, ._, ._ }, } }, }, .{ @@ -14558,8 +14557,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, - .dst_constraints = .{.{ .scalar_int_is = .byte }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14581,7 +14580,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, @@ -14590,16 +14589,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, - .dst_constraints = .{.{ .scalar_int_is = .byte }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14621,7 +14620,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, @@ -14629,16 +14628,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .scalar_int_is = .byte }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14660,24 +14659,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, - .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, - .dst_constraints = .{.{ .scalar_int_is = .byte }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14699,7 +14698,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, @@ -14708,16 +14707,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, - .dst_constraints = .{.{ .scalar_int_is = .byte }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14739,7 +14738,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, @@ -14747,16 +14746,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .scalar_int_is = .byte }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14778,24 +14777,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, - .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .tmp3b, ._, ._, ._ }, .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_len), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, - .dst_constraints = .{.{ .scalar_int_is = .word }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .word }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14817,7 +14816,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, @@ -14826,16 +14825,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, - .dst_constraints = .{.{ .scalar_int_is = .word }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .word }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14857,7 +14856,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, @@ -14865,16 +14864,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .scalar_int_is = .word }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .word }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14896,24 +14895,24 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-16, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, - .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, - .dst_constraints = .{.{ .scalar_int_is = .word }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .word }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14935,7 +14934,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, @@ -14944,16 +14943,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", .lzcnt, null, null }, - .dst_constraints = .{.{ .scalar_int_is = .word }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .word }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14975,7 +14974,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._, .lzcnt, .tmp4q, .tmp3q, ._, ._ }, .{ ._, ._nc, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, @@ -14983,16 +14982,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, .{ .@"1:", ._, .neg, .tmp2d, ._, ._, ._ }, - .{ ._, ._, .lea, .tmp3d, .leasiad(.none, .tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, + .{ ._, ._, .lea, .tmp3d, .leasiad(.tmp4, .@"8", .tmp2, .add_src0_bit_size, -64), ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .scalar_int_is = .word }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .word }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -15014,17 +15013,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp1q, .mem(.src0), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .sia(-8, .none, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .mov, .tmp3q, .ua(.src0, .add_umax), ._, ._ }, - .{ .@"1:", ._, .@"and", .tmp3q, .leai(.qword, .tmp1, .tmp2), ._, ._ }, + .{ .@"1:", ._, .@"and", .tmp3q, .leai(.tmp1q, .tmp2), ._, ._ }, .{ ._, ._r, .bs, .tmp3q, .tmp3q, ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3q, .si(-1), ._, ._ }, .{ ._, ._, .sub, .tmp2d, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"1b", ._, ._, ._ }, .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, - .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.none, .tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, + .{ .@"1:", ._, .lea, .tmp3d, .leasiad(.tmp3, .@"8", .tmp2, .sub_src0_bit_size, 1), ._, ._ }, .{ ._, ._, .neg, .tmp3d, ._, ._, ._ }, .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_2_len), .tmp3w, ._, ._ }, - .{ ._, ._, .lea, .tmp1q, .leaa(.none, .tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -15524,7 +15523,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15536,7 +15535,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15570,7 +15569,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ }, .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15583,7 +15582,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15616,7 +15615,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ }, .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15628,7 +15627,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ }, .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15663,7 +15662,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15687,7 +15686,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15730,7 +15729,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ }, .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15742,7 +15741,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15776,7 +15775,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ }, .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15789,7 +15788,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15824,7 +15823,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15848,7 +15847,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15893,7 +15892,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15917,7 +15916,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -15960,7 +15959,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ }, .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -15972,7 +15971,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .not, .tmp2d, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16006,7 +16005,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ }, .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16019,7 +16018,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ }, .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16054,7 +16053,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -16078,7 +16077,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b1111), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -16123,7 +16122,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -16147,7 +16146,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp3b, .si(0b11), ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -16190,7 +16189,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ }, .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16202,7 +16201,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ }, .{ ._, ._, .not, .tmp2b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, }, @@ -16239,7 +16238,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -16265,7 +16264,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp4b, .si(0b1111), ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -16313,7 +16312,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -16340,7 +16339,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp4b, .si(0b11), ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -16356,8 +16355,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, } }, }, .{ - .dst_constraints = .{.{ .bool_vec = .byte }}, .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, + .dst_constraints = .{.{ .bool_vec = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16388,8 +16387,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ - .dst_constraints = .{.{ .bool_vec = .byte }}, .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, + .dst_constraints = .{.{ .bool_vec = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16420,8 +16419,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ - .dst_constraints = .{.{ .bool_vec = .byte }}, .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, + .dst_constraints = .{.{ .bool_vec = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16453,8 +16452,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .bool_vec = .byte }}, .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, + .dst_constraints = .{.{ .bool_vec = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16485,8 +16484,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ - .dst_constraints = .{.{ .bool_vec = .byte }}, .src_constraints = .{ .any_scalar_int, .any_scalar_int }, + .dst_constraints = .{.{ .bool_vec = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16524,8 +16523,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, }, .{ - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16557,8 +16556,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16590,8 +16589,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16624,8 +16623,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16657,8 +16656,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .any_scalar_int, .any_scalar_int }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16698,8 +16697,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .bool_vec = .qword }}, .src_constraints = .{ .{ .scalar_int_is = .byte }, .{ .scalar_int_is = .byte } }, + .dst_constraints = .{.{ .bool_vec = .qword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16732,8 +16731,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .bool_vec = .qword }}, .src_constraints = .{ .{ .scalar_int_is = .word }, .{ .scalar_int_is = .word } }, + .dst_constraints = .{.{ .bool_vec = .qword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16765,8 +16764,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .bool_vec = .qword }}, .src_constraints = .{ .{ .scalar_int_is = .dword }, .{ .scalar_int_is = .dword } }, + .dst_constraints = .{.{ .bool_vec = .qword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16799,8 +16798,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .bool_vec = .qword }}, .src_constraints = .{ .{ .scalar_int_is = .qword }, .{ .scalar_int_is = .qword } }, + .dst_constraints = .{.{ .bool_vec = .qword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -16833,8 +16832,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, - .dst_constraints = .{.{ .bool_vec = .qword }}, .src_constraints = .{ .any_scalar_int, .any_scalar_int }, + .dst_constraints = .{.{ .bool_vec = .qword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -17281,8 +17280,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .ne => .neq, }) }, .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -17319,18 +17318,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .ne => .neq, }) }, .{ ._, .v_ps, .movmsk, .tmp4d, .tmp2y, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, .{ ._, ._c, .in, .tmp1p, ._, ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .avx, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -17371,11 +17370,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .avx, null, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -17416,11 +17415,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .sse2, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -17462,11 +17461,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .sse2, null, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -17508,11 +17507,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .sse, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -17556,11 +17555,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .sse, null, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -17642,7 +17641,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, @@ -17751,7 +17750,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, @@ -17863,7 +17862,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp0d, ._, ._ }, .{ ._, ._l, .sh, .tmp7q, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .tmp1q, .tmp7q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp0d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp5d, .tmp0d, ._, ._ }, @@ -17966,8 +17965,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .ne => .neq, }) }, .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18003,7 +18002,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .ne => .neq, }) }, .{ ._, .v_ps, .movmsk, .tmp3d, .tmp2y, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, @@ -18048,8 +18047,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .p_w, .ackssd, .tmp2x, .tmp3x, ._, ._ }, .{ ._, .p_b, .ackssw, .tmp2x, .tmp2x, ._, ._ }, .{ ._, .p_b, .movmsk, .tmp4d, .tmp2x, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18094,8 +18093,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18134,8 +18133,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .movmsk, .tmp4d, .tmp2x, ._, ._ }, .{ ._, ._l, .sh, .tmp4b, .ui(4), ._, ._ }, .{ ._, ._, .@"or", .tmp3b, .tmp4b, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ .@"1:", ._ps, .mova, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, .{ ._, ._ps, .cmp, .tmp2x, .memia(.src1x, .tmp0, .add_size), .vp(switch (cc) { else => unreachable, @@ -18145,7 +18144,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._ps, .movmsk, .tmp3d, .tmp2x, ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(32), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp3b, ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp3b, ._, ._ }, } }, }, .{ .required_features = .{ .avx, .slow_incdec, null, null }, @@ -18188,8 +18187,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ }, .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1p, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, @@ -18234,7 +18233,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp5d, .tmp3y, ._, ._ }, .{ ._, ._l, .sh, .tmp5b, .ui(4), ._, ._ }, .{ ._, ._, .@"or", .tmp4b, .tmp5b, ._, ._ }, - .{ ._, ._, .mov, .lea(.byte, .tmp1), .tmp4b, ._, ._ }, + .{ ._, ._, .mov, .lea(.tmp1b), .tmp4b, ._, ._ }, .{ ._, ._c, .in, .tmp1q, ._, ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(64), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, @@ -18274,7 +18273,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .v_pd, .movmsk, .tmp4d, .tmp3y, ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 4), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -18323,7 +18322,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._pd, .movmsk, .tmp4d, .tmp3x, ._, ._ }, .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 2), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ }, @@ -18382,7 +18381,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .tmp3b, .tmp4b, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -18550,7 +18549,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .tmp3b, .tmp4b, ._, ._ }, .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ }, .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ }, @@ -18675,11 +18674,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .avx, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -18714,17 +18713,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .avx, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -18765,11 +18764,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .sse2, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -18804,17 +18803,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .sse2, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -18855,11 +18854,11 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .sse, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -18894,17 +18893,17 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp7d, .tmp6b, ._, ._ }, .{ ._, ._, .@"or", .dst0d, .tmp7d, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .required_features = .{ .sse2, .slow_incdec, null, null }, - .dst_constraints = .{.{ .bool_vec = .dword }}, .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -18983,7 +18982,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, @@ -19091,7 +19090,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, @@ -19199,7 +19198,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .mov, .tmp7d, .tmp1d, ._, ._ }, .{ ._, ._l, .sh, .tmp8q, .tmp7b, ._, ._ }, .{ ._, ._, .@"or", .tmp2q, .tmp8q, ._, ._ }, - .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .lead(.tmp1, 1), ._, ._ }, .{ ._, ._, .@"test", .tmp1d, .si(0b111111), ._, ._ }, .{ ._, ._nz, .j, .@"1f", ._, ._, ._ }, .{ ._, ._, .mov, .tmp6d, .tmp1d, ._, ._ }, @@ -20245,10 +20244,10 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .sbb, .tmp4q, .tmp2q, ._, ._ }, .{ ._, ._c, .set, .tmp3b, ._, ._, ._ }, .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp4q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._, .sub, .tmp1d, .si(8), ._, ._ }, .{ ._, ._a, .j, .@"1b", ._, ._, ._ }, - .{ ._, ._, .cmp, .tmp0d, .sa(.none, .add_src0_unaligned_size), ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, }, .{ @@ -20271,7 +20270,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .v_ps, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse, null, null, null }, @@ -20293,7 +20292,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20315,7 +20314,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_ps, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20337,7 +20336,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .v_pd, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -20359,7 +20358,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._pd, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._pd, .@"and", .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20381,7 +20380,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .x87, null, null, null }, @@ -20427,7 +20426,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.xword, .tmp0), ._ }, + .{ ._, .vp_, .@"and", .dst0x, .src0x, .lea(.tmp0x), ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -20449,7 +20448,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .p_, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, .p_, .@"and", .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .sse, null, null, null }, @@ -20471,7 +20470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .ref = .src0 }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .@"and", .dst0x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .@"and", .dst0x, .lea(.tmp0x), ._, ._ }, } }, }, .{ .required_features = .{ .avx2, null, null, null }, @@ -20493,7 +20492,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .vp_, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20515,7 +20514,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.yword, .tmp0), ._ }, + .{ ._, .v_pd, .@"and", .dst0y, .src0y, .lea(.tmp0y), ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -20537,7 +20536,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_ps, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, + .{ ._, .v_ps, .mova, .tmp2y, .lea(.tmp0y), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_ps, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, .{ ._, .v_ps, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, @@ -20564,7 +20563,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, @@ -20592,7 +20591,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, + .{ ._, .v_pd, .mova, .tmp2y, .lea(.tmp0y), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, @@ -20619,7 +20618,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._pd, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._pd, .mova, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._pd, .mova, .tmp3x, .tmp2x, ._, ._ }, .{ ._, ._pd, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, @@ -20647,7 +20646,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_dqa, .mov, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, + .{ ._, .v_dqa, .mov, .tmp2y, .lea(.tmp0y), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .vp_, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, .{ ._, .v_dqa, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, @@ -20674,7 +20673,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, .v_pd, .mova, .tmp2y, .lea(.yword, .tmp0), ._, ._ }, + .{ ._, .v_pd, .mova, .tmp2y, .lea(.tmp0y), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", .v_pd, .@"and", .tmp3y, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._ }, .{ ._, .v_pd, .mova, .memia(.dst0y, .tmp0, .add_size), .tmp3y, ._, ._ }, @@ -20701,7 +20700,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._dqa, .mov, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._dqa, .mov, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._dqa, .mov, .tmp3x, .tmp2x, ._, ._ }, .{ ._, .p_, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, @@ -20729,7 +20728,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .dst_temps = .{.mem}, .each = .{ .once = &.{ .{ ._, ._, .lea, .tmp0p, .mem(.tmp1), ._, ._ }, - .{ ._, ._ps, .mova, .tmp2x, .lea(.xword, .tmp0), ._, ._ }, + .{ ._, ._ps, .mova, .tmp2x, .lea(.tmp0x), ._, ._ }, .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, .{ .@"0:", ._ps, .mova, .tmp3x, .tmp2x, ._, ._ }, .{ ._, ._ps, .@"and", .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ }, @@ -21855,17 +21854,6 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, cg); try res.finish(inst, &.{ty_op.operand}, &ops, cg); }, - .int_from_ptr => if (use_old) try cg.airIntFromPtr(inst) else { - const un_op = air_datas[@intFromEnum(inst)].un_op; - var ops = try cg.tempsFromOperands(inst, .{un_op}); - try ops[0].toSlicePtr(cg); - try ops[0].finish(inst, &.{un_op}, &ops, cg); - }, - .int_from_bool => if (use_old) try cg.airIntFromBool(inst) else { - const un_op = air_datas[@intFromEnum(inst)].un_op; - const ops = try cg.tempsFromOperands(inst, .{un_op}); - try ops[0].finish(inst, &.{un_op}, &ops, cg); - }, .ret => try cg.airRet(inst, false), .ret_safe => try cg.airRet(inst, true), .ret_load => try cg.airRetLoad(inst), @@ -21901,6 +21889,6972 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { for (ops) |op| try op.die(cg); }, .unreach => {}, + .fptrunc => |air_tag| if (use_old) try cg.airFptrunc(inst) else { + const ty_op = air_datas[@intFromEnum(inst)].ty_op; + var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); + var res: [1]Temp = undefined; + cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_, .cvtps2ph, .dst0x, .src0y, .rm(.{}), ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ }, + .{ .@"0:", .v_ps, .mova, .tmp1y, .memsia(.src0y, .@"2", .tmp0, .add_size), ._, ._ }, + .{ ._, .v_, .cvtps2ph, .memia(.dst0x, .tmp0, .add_size), .tmp1y, .rm(.{}), ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f32, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f32, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f32, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncsfhf2" } } }, + .{ .type = .f32, .kind = .mem }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ss, .mov, .tmp1x, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ }, + .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._sd, .mov, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncdfhf2" } } }, + .{ .type = .f32, .kind = .mem }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ }, + .{ ._, ._ps, .movl, .tmp1x, .memsia(.src0q, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ }, + .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .dst_temps = .{.{ .rc = .sse }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .xor, .dst0x, .dst0x, .dst0x, ._ }, + .{ ._, .v_ss, .cvtsd2, .dst0x, .dst0x, .src0q, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ss, .cvtsd2, .dst0x, .src0x, .src0q, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .rc = .sse }}, + .each = .{ .once = &.{ + .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ }, + .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, .f_, .ld, .src0q, ._, ._, ._ }, + .{ ._, .f_p, .st, .dst0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtpd2, .dst0x, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, ._ps, .cvtpd2, .dst0x, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .yword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtpd2, .dst0x, .src0y, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_f32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ }, + .{ .@"0:", .v_ps, .cvtpd2, .tmp1x, .memsia(.src0y, .@"2", .tmp0, .add_size), ._, ._ }, + .{ ._, .v_ps, .mova, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_f32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_size), ._, ._ }, + .{ .@"0:", ._ps, .cvtpd2, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_size), ._, ._ }, + .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .f_, .ld, .memsia(.src0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, .f_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .reg = .xmm0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, .v_dqa, .mov, .dst0x, .mem(.src0x), ._, ._ }, + .{ ._, .v_dqa, .mov, .mem(.tmp0x), .dst0x, ._, ._ }, + .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .reg = .xmm0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._dqa, .mov, .dst0x, .mem(.src0x), ._, ._ }, + .{ ._, ._dqa, .mov, .mem(.tmp0x), .dst0x, ._, ._ }, + .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .reg = .xmm0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._ps, .mova, .dst0x, .mem(.src0x), ._, ._ }, + .{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ }, + .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .xmm0 } }, + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ }, + .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, + .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .xmm0 } }, + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ }, + .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, + .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .xmm0 } }, + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ }, + .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, + .{ ._, .p_w, .extr, .tmp4d, .tmp1x, .ui(0), ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .xmm0 } }, + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__truncxfhf2" } } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._ps, .mova, .mem(.tmp2x), .tmp1x, ._, ._ }, + .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, + .{ ._, ._ss, .mov, .mem(.tmp2d), .tmp1x, ._, ._ }, + .{ ._, ._, .mov, .tmp4d, .mem(.tmp2d), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_x87, .none } }, + }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, + .{ ._, .f_p, .st, .dst0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, .f_p, .st, .memia(.dst0d, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_x87, .none } }, + }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, .f_, .ld, .src0t, ._, ._, ._ }, + .{ ._, .f_p, .st, .dst0q, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .f_, .ld, .memsia(.src0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, .f_p, .st, .memia(.dst0q, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .vp_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .p_w, .extr, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1x, .ui(0), ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .p_w, .extr, .tmp3d, .tmp1x, .ui(0), ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp3w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfhf2" } } }, + .{ .type = .f32, .kind = .mem }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ss, .mov, .mem(.tmp3d), .tmp1x, ._, ._ }, + .{ ._, ._, .mov, .tmp4d, .mem(.tmp3d), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp4w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .v_ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfsf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ss, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .v_sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._dqa, .mov, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._sd, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfdf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ps, .mova, .tmp1x, .memsia(.src0x, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ps, .movl, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .reg = .st0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ }, + .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ }, + .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f128, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__trunctfxf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ }, + .{ ._, .f_p, .st, .memia(.dst0t, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + } }) catch |err| switch (err) { + error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ + @tagName(air_tag), + ty_op.ty.toType().fmt(pt), + cg.typeOf(ty_op.operand).fmt(pt), + ops[0].tracking(cg), + }), + else => |e| return e, + }; + try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); + }, + .fpext => |air_tag| if (use_old) try cg.airFpext(inst) else { + const ty_op = air_datas[@intFromEnum(inst)].ty_op; + var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); + var res: [1]Temp = undefined; + cg.select(&res, &.{ty_op.ty.toType()}, &ops, comptime &.{ .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_ps, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, + .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .v_ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, + .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .{ .type = .f32, .kind = .mem }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfsf2" } } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, + .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, + .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, + .{ ._, ._ss, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, + .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .dst0d, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, + .{ ._, .v_pd, .cvtps2, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, + .{ ._, .v_pd, .cvtps2, .dst0y, .dst0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .zword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, + .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtph2, .tmp0y, .src0x, ._, ._ }, + .{ ._, .v_pd, .cvtps2, .tmp1y, .tmp0x, ._, ._ }, + .{ ._, .v_f128, .extract, .tmp0x, .tmp0y, .ui(1), ._ }, + .{ ._, .v_pd, .mova, .mem(.dst0y), .tmp1y, ._, ._ }, + .{ ._, .v_pd, .cvtps2, .tmp1y, .tmp0x, ._, ._ }, + .{ ._, .v_pd, .mova, .memd(.dst0y, 32), .tmp1y, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .zword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_f32, .kind = .{ .rc = .sse } }, + .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .v_ps, .cvtph2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_pd, .cvtps2, .tmp2y, .tmp1x, ._, ._ }, + .{ ._, .v_f128, .extract, .tmp1x, .tmp1y, .ui(1), ._ }, + .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"4", .tmp0, .add_size), .tmp2y, ._, ._ }, + .{ ._, .v_pd, .cvtps2, .tmp2y, .tmp1x, ._, ._ }, + .{ ._, .v_pd, .mova, .memsiad(.dst0y, .@"4", .tmp0, .add_size, 32), .tmp2y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, + .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .v_sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, + .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._sd, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .{ .type = .f32, .kind = .mem }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfdf2" } } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, + .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, + .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, + .{ ._, ._ps, .movl, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .f16c, .x87, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } }, + .{ .type = .f32, .kind = .mem }, + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .rc = .x87 }}, + .each = .{ .once = &.{ + .{ ._, .v_ps, .cvtph2, .tmp0x, .src0q, ._, ._ }, + .{ ._, .v_ss, .mov, .mem(.tmp1d), .tmp0x, ._, ._ }, + .{ ._, .f_, .ld, .mem(.tmp1d), ._, ._, ._ }, + .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .reg = .st0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, + .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ }, + .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, + .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ }, + .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .{ .type = .f32, .kind = .mem }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhfxf2" } } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, + .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, + .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, + .{ .pseudo, .f_cstp, .de, ._, ._, ._, ._ }, + .{ ._, .f_p, .st, .memsia(.dst0t, .@"8", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ }, + .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0) }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ }, + .{ ._, .p_w, .insr, .tmp1x, .memia(.src0w, .tmp0, .add_unaligned_size), .ui(0), ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f16, .kind = .{ .reg = .ax } }, + .{ .type = .f32, .kind = .mem }, + .{ .type = .f16, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendhftf2" } } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .mem(.tmp2d), .tmp1d, ._, ._ }, + .{ ._, ._ss, .mov, .tmp3x, .mem(.tmp2d), ._, ._ }, + .{ ._, ._, .call, .tmp4d, ._, ._, ._ }, + .{ ._, ._ps, .mova, .memsia(.dst0x, .@"8", .tmp0, .add_unaligned_size), .tmp3x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .dst_temps = .{.{ .rc = .sse }}, + .each = .{ .once = &.{ + .{ ._, .v_pd, .xor, .dst0x, .dst0x, .dst0x, ._ }, + .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .src0d, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_sd, .cvtss2, .dst0x, .src0x, .src0d, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .rc = .sse }}, + .each = .{ .once = &.{ + .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ }, + .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, .f_, .ld, .src0d, ._, ._, ._ }, + .{ ._, .f_p, .st, .dst0q, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_pd, .cvtps2, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, ._pd, .cvtps2, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .v_pd, .cvtps2, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_f64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .v_pd, .cvtps2, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_pd, .mova, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_f64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", ._pd, .cvtps2, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, ._pd, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .f_, .ld, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, .f_p, .st, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, .f_, .ld, .src0d, ._, ._, ._ }, + .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .f_, .ld, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, .f_p, .st, .memsia(.dst0t, .@"4", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f32, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f32, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f32, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendsftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ss, .mov, .tmp1x, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ps, .mova, .memsia(.dst0x, .@"4", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, .f_, .ld, .src0q, ._, ._, ._ }, + .{ ._, .f_p, .st, .dst0t, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .x87, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .st7 } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .f_, .ld, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, .f_p, .st, .memsia(.dst0t, .@"2", .tmp0, .add_unaligned_size), ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .{ .to_reg = .xmm0 }, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._sd, .mov, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f64, .kind = .{ .reg = .xmm0 } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extenddftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ps, .xor, .tmp1x, .tmp1x, ._, ._ }, + .{ ._, ._ps, .movl, .tmp1x, .memia(.src0q, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .call, .tmp2d, ._, ._, ._ }, + .{ ._, ._ps, .mova, .memsia(.dst0x, .@"2", .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .reg = .xmm0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, .v_dqa, .mov, .dst0x, .mem(.src0x), ._, ._ }, + .{ ._, .v_dqa, .mov, .mem(.tmp0x), .dst0x, ._, ._ }, + .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .reg = .xmm0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._dqa, .mov, .dst0x, .mem(.src0x), ._, ._ }, + .{ ._, ._dqa, .mov, .mem(.tmp0x), .dst0x, ._, ._ }, + .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .reg = .xmm0 }}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._ps, .mova, .dst0x, .mem(.src0x), ._, ._ }, + .{ ._, ._ps, .mova, .mem(.tmp0x), .dst0x, ._, ._ }, + .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .xmm0 } }, + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", .v_dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ }, + .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, + .{ ._, .v_dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .xmm0 } }, + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._dqa, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._dqa, .mov, .mem(.tmp2x), .tmp1x, ._, ._ }, + .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, + .{ ._, ._dqa, .mov, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_float = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .call_frame = .{ .size = 16, .alignment = .@"16" }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .f80, .kind = .{ .reg = .xmm0 } }, + .{ .type = .f80, .kind = .{ .frame = .call_frame } }, + .{ .type = .usize, .kind = .{ .symbol = &.{ .name = "__extendxftf2" } } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true, .caller_preserved = .ccc }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._ps, .mova, .tmp1x, .memia(.src0x, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._ps, .mova, .mem(.tmp2x), .tmp1x, ._, ._ }, + .{ ._, ._, .call, .tmp3d, ._, ._, ._ }, + .{ ._, ._ps, .mova, .memia(.dst0x, .tmp0, .add_unaligned_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + } }) catch |err| switch (err) { + error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ + @tagName(air_tag), + ty_op.ty.toType().fmt(pt), + cg.typeOf(ty_op.operand).fmt(pt), + ops[0].tracking(cg), + }), + else => |e| return e, + }; + try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); + }, + .intcast => |air_tag| if (use_old) try cg.airIntCast(inst) else { + const ty_op = air_datas[@intFromEnum(inst)].ty_op; + const dst_ty = ty_op.ty.toType(); + const src_ty = cg.typeOf(ty_op.operand); + var ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); + var res: [1]Temp = undefined; + cg.select(&res, &.{dst_ty}, &ops, if (dst_ty.scalarType(zcu).abiSize(zcu) <= src_ty.scalarType(zcu).abiSize(zcu)) comptime &.{ .{ + .dst_constraints = .{.{ .int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_gpr, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_gpr, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .dst_constraints = .{.{ .int = .byte }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0b, .mem(.src0b), ._, ._ }, + } }, + }, .{ + .dst_constraints = .{.{ .int = .word }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0w, .mem(.src0w), ._, ._ }, + } }, + }, .{ + .dst_constraints = .{.{ .int = .dword }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .mem(.src0d), ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0q, .mem(.src0q), ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_b, .ackssw, .dst0x, .src0x, .dst0x, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .qword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_b, .ackusw, .dst0x, .src0x, .dst0x, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_b, .ackssw, .dst0x, .dst0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .qword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_b, .ackusw, .dst0x, .dst0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_b, .ackssw, .dst0y, .src0y, .dst0y, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_b, .ackusw, .dst0y, .src0y, .dst0y, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memsia(.src0w, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .ackssd, .dst0x, .src0x, .dst0x, ._ }, + .{ ._, .vp_b, .ackssw, .dst0x, .dst0x, .dst0x, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .dword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .ackusd, .dst0x, .src0x, .dst0x, ._ }, + .{ ._, .vp_b, .ackusw, .dst0x, .dst0x, .dst0x, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_w, .ackssd, .dst0x, .dst0x, ._, ._ }, + .{ ._, .p_b, .ackssw, .dst0x, .dst0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .dword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_w, .ackusd, .dst0x, .dst0x, ._, ._ }, + .{ ._, .p_b, .ackusw, .dst0x, .dst0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .ackssd, .dst0y, .src0y, .dst0y, ._ }, + .{ ._, .vp_b, .ackssw, .dst0y, .dst0y, .dst0y, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .qword, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .ackusd, .dst0y, .src0y, .dst0y, ._ }, + .{ ._, .vp_b, .ackusw, .dst0y, .dst0y, .dst0y, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp1b, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u8, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0b, .tmp0, .add_unaligned_size), .tmp2b, ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .qword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .ackssd, .dst0x, .src0x, .dst0x, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .qword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .ackusd, .dst0x, .src0x, .dst0x, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .qword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_w, .ackssd, .dst0x, .dst0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .qword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_w, .ackusd, .dst0x, .dst0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .ackssd, .dst0y, .src0y, .dst0y, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .ackusd, .dst0y, .src0y, .dst0y, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp1w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0w, .tmp0, .add_unaligned_size), .tmp2w, ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .qword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .shuf, .dst0x, .src0x, .ui(0b10_00_10_00), ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .qword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_d, .shuf, .dst0x, .src0x, .ui(0b10_00_10_00), ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"2", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"4", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .yword, .is = .yword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memsia(.src0d, .@"8", .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp1), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0d, .tmp0, .add_unaligned_size), .tmp2d, ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.dst0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ }, + .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp1), ._, ._ }, + .{ ._, ._, .mov, .memia(.dst0q, .tmp0, .add_unaligned_size), .tmp2q, ._, ._ }, + .{ ._, ._, .lea, .tmp1d, .leaa(.tmp1, .add_src0_elem_size), ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .yword, .is = .yword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .yword } }}, + .patterns = &.{ + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.any_scalar_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp3d, .sa(.dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.any_scalar_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp3d, .sa(.dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._, .add, .tmp1p, .sa2(.src0, .dst0, .add_delta_elem_size), ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + } } else comptime &.{ .{ + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .dst0d, .src0b, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .byte }, .any }, + .dst_constraints = .{.{ .int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .dst0q, .src0b, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .byte }, .any }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .tmp0q, .src0b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .byte }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .tmp0d, .src0b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .ui(31), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .byte }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src0b, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sd", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .word }, .any }, + .dst_constraints = .{.{ .signed_int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .dst0d, .src0w, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .word }, .any }, + .dst_constraints = .{.{ .int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .dst0d, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .word }, .any }, + .dst_constraints = .{.{ .signed_int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .dst0q, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .word }, .any }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .dst0d, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .word }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .tmp0q, .src0w, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .word }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .word }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movsx, .tmp0d, .src0w, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .ui(31), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .word }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .movzx, .tmp0d, .src0w, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sd", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .dword }, .any }, + .dst_constraints = .{.{ .signed_int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._d, .movsx, .dst0q, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .dword }, .any }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .dword }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._d, .movsx, .tmp0q, .src0d, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .dword }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .signed_int = .dword }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0d, .ui(31), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .int = .dword }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .reg = .eax } }, + .{ .type = .usize, .kind = .{ .reg = .edi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .src0d, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sd, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_4), ._, ._ }, + .{ ._, .@"rep _sd", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_int = .qword }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp0q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .int = .qword }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .extra_temps = .{ + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0q, .src0q, ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .signed_remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sia(-1, .src0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._sq, .lod, ._, ._, ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp3q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa2(.dst0, .src0, .add_delta_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .remainder_int = .{ .of = .qword, .is = .qword } }, .any }, + .dst_constraints = .{.{ .remainder_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa(.src0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp3d, .tmp3d, ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa2(.dst0, .src0, .add_delta_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .movsxb, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .movzxb, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_w, .movsxb, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_w, .movzxb, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_b, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .yword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .movsxb, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_w, .movzxb, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_16_i16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_w, .movsxb, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .yword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_16_u16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_w, .movzxb, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_w, .movsxb, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_w, .movzxb, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_w, .movsxb, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_w, .movzxb, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .word, .is = .word } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u16, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0w, .@"2", .tmp0, .add_unaligned_size), .tmp1w, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .movsxb, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .movzxb, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_d, .movsxb, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_d, .movzxb, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_b, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .movsxb, .dst0y, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .movzxb, .dst0y, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"4", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"4", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_d, .movsxb, .tmp1x, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_d, .movzxb, .tmp1x, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0d, .@"4", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxb, .dst0x, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxb, .dst0x, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movsxb, .dst0x, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movzxb, .dst0x, .src0w, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_b, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxb, .dst0y, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxb, .dst0y, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movsxb, .tmp1y, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"8", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movzxb, .tmp1y, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"8", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movsxb, .tmp1x, .memia(.src0w, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movzxb, .tmp1x, .memia(.src0w, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_q, .movsxb, .tmp1x, .memia(.src0w, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_q, .movzxb, .tmp1x, .memia(.src0w, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"8", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .slow_incdec, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0q, .@"8", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxb, .dst0x, .src0w, ._, ._ }, + .{ ._, .vp_q, .movsxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxb, .dst0x, .src0w, ._, ._ }, + .{ ._, .vp_q, .movzxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movsxb, .dst0x, .src0w, ._, ._ }, + .{ ._, .p_q, .movsxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movzxb, .dst0x, .src0w, ._, ._ }, + .{ ._, .p_q, .movzxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_16_i8, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_b, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_16_u8, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklbw, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.any_scalar_signed_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.any_scalar_signed_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.any_scalar_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(1), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .byte, .is = .byte } }, .any }, + .dst_constraints = .{.any_scalar_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0b, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._c, .in, .tmp0p, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .movsxw, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .movzxw, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_d, .movsxw, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_d, .movzxw, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .movsxw, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_d, .movzxw, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_i32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .yword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_8_u32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_d, .movsxw, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_d, .movzxw, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0d, .@"2", .tmp0, .add_unaligned_size), .tmp1d, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxw, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxw, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movsxw, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movzxw, .dst0x, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxw, .dst0y, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxw, .dst0y, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movsxw, .tmp1y, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"4", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movzxw, .tmp1y, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"4", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movsxw, .tmp1x, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movzxw, .tmp1x, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_q, .movsxw, .tmp1x, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_q, .movzxw, .tmp1x, .memia(.src0d, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"4", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp1q, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp1d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0q, .@"4", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxw, .dst0x, .src0d, ._, ._ }, + .{ ._, .vp_q, .movsxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxw, .dst0x, .src0d, ._, ._ }, + .{ ._, .vp_q, .movzxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movsxw, .dst0x, .src0d, ._, ._ }, + .{ ._, .p_q, .movsxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movzxw, .dst0x, .src0d, ._, ._ }, + .{ ._, .p_q, .movzxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_8_i16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_w, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_8_u16, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklwd, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.any_scalar_signed_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .movsx, .tmp2q, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .word, .is = .word } }, .any }, + .dst_constraints = .{.any_scalar_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .movzx, .tmp2d, .memia(.src0w, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(2), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxd, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxd, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movsxd, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movzxd, .dst0x, .src0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_d, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxd, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxd, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movsxd, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx2, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .xword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .yword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_4_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movzxd, .tmp1y, .memia(.src0x, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0y, .@"2", .tmp0, .add_size), .tmp1y, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(16), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movsxd, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .word } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .vp_q, .movzxd, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, .v_dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_i64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_q, .movsxd, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .qword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .xword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .vector_2_u64, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_size), ._, ._ }, + .{ .@"0:", .p_q, .movzxd, .tmp1x, .memia(.src0q, .tmp0, .add_size), ._, ._ }, + .{ ._, ._dqa, .mov, .memsia(.dst0x, .@"2", .tmp0, .add_size), .tmp1x, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(8), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_signed_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .i64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .movsxd, .tmp1q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .multiple_scalar_int = .{ .of = .qword, .is = .qword } }}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .u64, .kind = .{ .rc = .general_purpose } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp1d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._, .mov, .memsia(.dst0q, .@"2", .tmp0, .add_unaligned_size), .tmp1q, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movsxd, .dst0x, .src0q, ._, ._ }, + .{ ._, .vp_q, .movsxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .avx, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .vp_q, .movzxd, .dst0x, .src0q, ._, ._ }, + .{ ._, .vp_q, .movzxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movsxd, .dst0x, .src0q, ._, ._ }, + .{ ._, .p_q, .movsxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse4_1, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_sse, .none } }, + }, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .each = .{ .once = &.{ + .{ ._, .p_q, .movzxd, .dst0x, .src0q, ._, ._ }, + .{ ._, .p_q, .movzxd, .dst0x, .dst0q, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_signed_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_4_i32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_d, .cmpgt, .tmp0x, .src0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .sse2, null, null, null }, + .src_constraints = .{ .{ .scalar_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.{ .scalar_int = .{ .of = .xword, .is = .xword } }}, + .patterns = &.{ + .{ .src = .{ .to_mut_sse, .none } }, + }, + .extra_temps = .{ + .{ .type = .vector_4_u32, .kind = .{ .rc = .sse } }, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, .p_, .xor, .tmp0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpckldq, .dst0x, .tmp0x, ._, ._ }, + .{ ._, .p_, .unpcklqdq, .dst0x, .tmp0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_signed_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.any_scalar_signed_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .movsxd, .tmp2q, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp2q, .si(63), ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .{ .multiple_scalar_int = .{ .of = .dword, .is = .dword } }, .any }, + .dst_constraints = .{.any_scalar_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .isize, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .unused, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0p, .sa(.src0, .sub_unaligned_size), ._, ._ }, + .{ ._, ._, .lea, .tmp1q, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp2d, .memia(.src0d, .tmp0, .add_unaligned_size), ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sia(-1, .dst0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._, .add, .tmp0p, .si(4), ._, ._ }, + .{ ._, ._nc, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ .any_scalar_signed_int, .any }, + .dst_constraints = .{.any_scalar_signed_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._sq, .lod, ._, ._, ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp4q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .any_scalar_signed_int, .any }, + .dst_constraints = .{.any_scalar_signed_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .{ .type = .i64, .kind = .{ .reg = .rax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp3d, .sia(-1, .src0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._sq, .lod, ._, ._, ._, ._ }, + .{ ._, ._sq, .sto, ._, ._, ._, ._ }, + .{ ._, ._r, .sa, .tmp4q, .ui(63), ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .slow_incdec, null, null }, + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.any_scalar_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp3d, .sa(.src0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._, .sub, .tmp0d, .si(1), ._, ._ }, + .{ ._, ._a, .j, .@"0b", ._, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .src_constraints = .{ .any_scalar_int, .any }, + .dst_constraints = .{.any_scalar_int}, + .patterns = &.{ + .{ .src = .{ .to_mem, .none } }, + }, + .extra_temps = .{ + .{ .type = .u32, .kind = .{ .rc = .general_purpose } }, + .{ .type = .usize, .kind = .{ .reg = .rsi } }, + .{ .type = .usize, .kind = .{ .reg = .rdi } }, + .{ .type = .u32, .kind = .{ .reg = .ecx } }, + .{ .type = .u64, .kind = .{ .reg = .rax } }, + .unused, + .unused, + .unused, + .unused, + }, + .dst_temps = .{.mem}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .tmp0d, .sa(.src0, .add_len), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp2p, .mem(.dst0), ._, ._ }, + .{ .@"0:", ._, .mov, .tmp3d, .sa(.src0, .add_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + .{ ._, ._, .xor, .tmp4d, .tmp4d, ._, ._ }, + .{ ._, ._, .mov, .tmp3d, .sa2(.dst0, .src0, .add_delta_elem_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .sto, ._, ._, ._, ._ }, + .{ ._, ._c, .de, .tmp0d, ._, ._, ._ }, + .{ ._, ._nz, .j, .@"0b", ._, ._, ._ }, + } }, + } }) catch |err| switch (err) { + error.SelectFailed => return cg.fail("failed to select {s} {} {} {}", .{ + @tagName(air_tag), + dst_ty.fmt(pt), + src_ty.fmt(pt), + ops[0].tracking(cg), + }), + else => |e| return e, + }; + try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); + }, .optional_payload_ptr => if (use_old) try cg.airOptionalPayloadPtr(inst) else { const ty_op = air_datas[@intFromEnum(inst)].ty_op; const ops = try cg.tempsFromOperands(inst, .{ty_op.operand}); @@ -22080,7 +29034,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .movzx, .dst0d, .leaa(.byte, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .movzx, .dst0d, .leaa(.src0b, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .byte }}, @@ -22089,7 +29043,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .movzx, .dst0d, .leai(.byte, .src0, .src1), ._, ._ }, + .{ ._, ._, .movzx, .dst0d, .leai(.src0b, .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .word }}, @@ -22098,7 +29052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .movzx, .dst0d, .leaa(.word, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .movzx, .dst0d, .leaa(.src0w, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .word }}, @@ -22107,7 +29061,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .movzx, .dst0d, .leasi(.word, .src0, .@"2", .src1), ._, ._ }, + .{ ._, ._, .movzx, .dst0d, .leasi(.src0w, .@"2", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .dword }}, @@ -22116,7 +29070,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0d, .leaa(.dword, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .leaa(.src0d, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .dword }}, @@ -22125,7 +29079,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0d, .leasi(.dword, .src0, .@"4", .src1), ._, ._ }, + .{ ._, ._, .mov, .dst0d, .leasi(.src0d, .@"4", .src1), ._, ._ }, } }, }, .{ .dst_constraints = .{.{ .int = .qword }}, @@ -22134,7 +29088,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0q, .leaa(.qword, .src0, .add_src0_elem_size_times_src1), ._, ._ }, + .{ ._, ._, .mov, .dst0q, .leaa(.src0q, .add_src0_elem_size_times_src1), ._, ._ }, } }, }, .{ .required_features = .{ .@"64bit", null, null, null }, @@ -22144,7 +29098,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }, .dst_temps = .{.{ .rc = .general_purpose }}, .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0q, .leasi(.qword, .src0, .@"8", .src1), ._, ._ }, + .{ ._, ._, .mov, .dst0q, .leasi(.src0q, .@"8", .src1), ._, ._ }, } }, } }) catch |err| switch (err) { error.SelectFailed => { @@ -23562,19 +30516,6 @@ fn airTrunc(self: *CodeGen, inst: Air.Inst.Index) !void { return self.finishAir(inst, result, .{ ty_op.operand, .none, .none }); } -fn airIntFromBool(self: *CodeGen, inst: Air.Inst.Index) !void { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const ty = self.typeOfIndex(inst); - - const operand = try self.resolveInst(un_op); - const dst_mcv = if (self.reuseOperand(inst, un_op, 0, operand)) - operand - else - try self.copyToRegisterWithInstTracking(inst, ty, operand); - - return self.finishAir(inst, dst_mcv, .{ un_op, .none, .none }); -} - fn airSlice(self: *CodeGen, inst: Air.Inst.Index) !void { const zcu = self.pt.zcu; const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; @@ -29808,6 +36749,7 @@ fn genBinOp( try self.copyToTmpRegister(rhs_ty, rhs_mcv)).to128(), ); try self.asmRegisterRegister(.{ .v_ps, .cvtph2 }, dst_reg, dst_reg); + try self.asmRegisterRegister(.{ .v_, .movshdup }, tmp_reg, dst_reg); break :src .{ .register = tmp_reg }; } else rhs_mcv; @@ -35227,7 +42169,7 @@ fn genCopy(self: *CodeGen, ty: Type, dst_mcv: MCValue, src_mcv: MCValue, opts: C .reserved_frame, .air_ref, => unreachable, // unmodifiable destination - .register => |reg| try self.genSetReg(reg, ty, src_mcv, opts), + .register => |dst_reg| try self.genSetReg(dst_reg, ty, src_mcv, opts), .register_offset => |dst_reg_off| try self.genSetReg(dst_reg_off.reg, ty, switch (src_mcv) { .none, .unreach, @@ -35377,7 +42319,8 @@ fn genSetReg( const pt = self.pt; const zcu = pt.zcu; const abi_size: u32 = @intCast(ty.abiSize(zcu)); - if (ty.bitSize(zcu) > dst_reg.bitSize()) + const dst_alias = registerAlias(dst_reg, abi_size); + if (ty.bitSize(zcu) > dst_alias.bitSize()) return self.fail("genSetReg called with a value larger than dst_reg", .{}); switch (src_mcv) { .none, @@ -35433,13 +42376,13 @@ fn genSetReg( } else if (abi_size <= 4 and @as(i64, @bitCast(imm)) < 0) { try self.asmRegisterImmediate( .{ ._, .mov }, - registerAlias(dst_reg, abi_size), + dst_alias, .s(@intCast(@as(i64, @bitCast(imm)))), ); } else { try self.asmRegisterImmediate( .{ ._, .mov }, - registerAlias(dst_reg, abi_size), + dst_alias, .u(imm), ); } @@ -35448,12 +42391,12 @@ fn genSetReg( .general_purpose => switch (src_reg.class()) { .general_purpose => try self.asmRegisterRegister( .{ ._, .mov }, - registerAlias(dst_reg, abi_size), + dst_alias, registerAlias(src_reg, abi_size), ), .segment => try self.asmRegisterRegister( .{ ._, .mov }, - registerAlias(dst_reg, abi_size), + dst_alias, src_reg, ), .x87, .mmx, .ip, .cr, .dr => unreachable, @@ -35480,7 +42423,7 @@ fn genSetReg( .base = .{ .frame = frame_index }, .mod = .{ .rm = .{ .size = .fromSize(frame_size) } }, }, src_reg.to128()); - try self.asmRegisterMemory(.{ ._, .mov }, registerAlias(dst_reg, abi_size), .{ + try self.asmRegisterMemory(.{ ._, .mov }, dst_alias, .{ .base = .{ .frame = frame_index }, .mod = .{ .rm = .{ .size = .fromSize(abi_size) } }, }); @@ -35617,7 +42560,7 @@ fn genSetReg( else => unreachable, }, }) orelse return self.fail("TODO implement genSetReg for {}", .{ty.fmt(pt)}), - registerAlias(dst_reg, abi_size), + dst_alias, registerAlias(src_reg, abi_size), ), }, @@ -35678,7 +42621,7 @@ fn genSetReg( ), .lea_frame => .{ .move = .{ ._, .lea } }, else => unreachable, - }).read(self, registerAlias(dst_reg, abi_size), switch (src_mcv) { + }).read(self, dst_alias, switch (src_mcv) { .register_offset, .indirect => |reg_off| .{ .base = .{ .reg = reg_off.reg.to64() }, .mod = .{ .rm = .{ @@ -35743,7 +42686,7 @@ fn genSetReg( ty, dst_reg.class(), ty.abiAlignment(zcu).check(@as(u32, @bitCast(small_addr))), - )).read(self, registerAlias(dst_reg, abi_size), .{ + )).read(self, dst_alias, .{ .base = .{ .reg = .ds }, .mod = .{ .rm = .{ .size = self.memSize(ty), @@ -35753,7 +42696,7 @@ fn genSetReg( .load_symbol => |sym_off| switch (dst_reg.class()) { .general_purpose => { assert(sym_off.off == 0); - try self.asmRegisterMemory(.{ ._, .mov }, registerAlias(dst_reg, abi_size), .{ + try self.asmRegisterMemory(.{ ._, .mov }, dst_alias, .{ .base = .{ .reloc = sym_off.sym_index }, .mod = .{ .rm = .{ .size = self.memSize(ty), @@ -35771,7 +42714,7 @@ fn genSetReg( .tag = .mov, .ops = .direct_reloc, .data = .{ .rx = .{ - .r1 = registerAlias(dst_reg, abi_size), + .r1 = dst_alias, .payload = try self.addExtra(bits.SymbolOffset{ .sym_index = sym_index }), } }, }); @@ -35788,7 +42731,7 @@ fn genSetReg( const addr_lock = self.register_manager.lockRegAssumeUnused(addr_reg); defer self.register_manager.unlockReg(addr_lock); - try (try self.moveStrategy(ty, dst_reg.class(), false)).read(self, registerAlias(dst_reg, abi_size), .{ + try (try self.moveStrategy(ty, dst_reg.class(), false)).read(self, dst_alias, .{ .base = .{ .reg = addr_reg.to64() }, .mod = .{ .rm = .{ .size = self.memSize(ty) } }, }); @@ -36274,21 +43217,6 @@ fn genLazySymbolRef( } } -fn airIntFromPtr(self: *CodeGen, inst: Air.Inst.Index) !void { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const result = result: { - // TODO: handle case where the operand is a slice not a raw pointer - const src_mcv = try self.resolveInst(un_op); - if (self.reuseOperand(inst, un_op, 0, src_mcv)) break :result src_mcv; - - const dst_mcv = try self.allocRegOrMem(inst, true); - const dst_ty = self.typeOfIndex(inst); - try self.genCopy(dst_ty, dst_mcv, src_mcv, .{}); - break :result dst_mcv; - }; - return self.finishAir(inst, result, .{ un_op, .none, .none }); -} - fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void { const pt = self.pt; const zcu = pt.zcu; @@ -36328,7 +43256,7 @@ fn airBitCast(self: *CodeGen, inst: Air.Inst.Index) !void { if (dst_ty.isRuntimeFloat()) break :result dst_mcv; - if (dst_ty.isAbiInt(zcu) and src_ty.isAbiInt(zcu) and + if (dst_ty.isAbiInt(zcu) and src_ty.isAbiInt(zcu) and src_ty.zigTypeTag(zcu) != .@"struct" and dst_ty.intInfo(zcu).signedness == src_ty.intInfo(zcu).signedness) break :result dst_mcv; const abi_size = dst_ty.abiSize(zcu); @@ -40916,8 +47844,8 @@ const Temp = struct { const first_temp_tracking = first_temp.unwrap(cg).temp.tracking(cg); const second_temp_tracking = second_temp.unwrap(cg).temp.tracking(cg); const result: MCValue = .{ .register_pair = .{ - first_temp_tracking.short.register, - second_temp_tracking.short.register, + first_temp_tracking.short.register.to64(), + second_temp_tracking.short.register.to64(), } }; const result_temp_index = cg.next_temp_index; const result_temp: Temp = .{ .index = result_temp_index.toIndex() }; @@ -42369,7 +49297,7 @@ const Temp = struct { .temp => |temp_index| { const temp_tracking = temp_index.tracking(cg); tracking_log.debug("{} => {} (birth)", .{ inst, temp_tracking.short }); - cg.inst_tracking.putAssumeCapacityNoClobber(inst, temp_tracking.*); + cg.inst_tracking.putAssumeCapacityNoClobber(inst, .init(temp_tracking.short)); assert(cg.reuseTemp(inst, temp_index.toIndex(), temp_tracking)); }, } @@ -42616,7 +49544,7 @@ const Select = struct { top: u3, fn emitLabel(s: *Select, label_index: Label) void { - if (label_index == ._) return; + assert(@intFromEnum(label_index) < @intFromEnum(Label._)); const label = &s.labels[@intFromEnum(label_index)]; for (&label.forward) |*reloc| { if (reloc.*) |r| s.cg.performReloc(r); @@ -42626,29 +49554,35 @@ const Select = struct { } fn emit(s: *Select, inst: Instruction) !void { - s.emitLabel(inst[0]); const mir_tag: Mir.Inst.FixedTag = .{ inst[1], inst[2] }; - var mir_ops: [4]CodeGen.Operand = undefined; - inline for (&mir_ops, 3..) |*mir_op, inst_index| mir_op.* = try inst[inst_index].lower(s); - s.cg.asmOps(mir_tag, mir_ops) catch |err| switch (err) { - error.InvalidInstruction => { - const fixes = @tagName(mir_tag[0]); - const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; - return s.cg.fail( - "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'", - .{ - fixes[0..fixes_blank], - @tagName(mir_tag[1]), - fixes[fixes_blank + 1 ..], - @tagName(mir_ops[0]), - @tagName(mir_ops[1]), - @tagName(mir_ops[2]), - @tagName(mir_ops[3]), - }, - ); - }, - else => |e| return e, - }; + pseudo: { + switch (inst[0]) { + .@"0:", .@"1:", .@"2:" => |label| s.emitLabel(label), + ._ => {}, + .pseudo => break :pseudo, + } + var mir_ops: [4]CodeGen.Operand = undefined; + inline for (&mir_ops, 3..) |*mir_op, inst_index| mir_op.* = try inst[inst_index].lower(s); + s.cg.asmOps(mir_tag, mir_ops) catch |err| switch (err) { + error.InvalidInstruction => { + const fixes = @tagName(mir_tag[0]); + const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; + return s.cg.fail( + "invalid instruction: '{s}{s}{s} {s} {s} {s} {s}'", + .{ + fixes[0..fixes_blank], + @tagName(mir_tag[1]), + fixes[fixes_blank + 1 ..], + @tagName(mir_ops[0]), + @tagName(mir_ops[1]), + @tagName(mir_ops[2]), + @tagName(mir_ops[3]), + }, + ); + }, + else => |e| return e, + }; + } switch (mir_tag[0]) { .f_ => switch (mir_tag[1]) { .@"2xm1", @@ -42702,32 +49636,6 @@ const Select = struct { .yl2x => s.top +%= 1, else => unreachable, }, - .fb_ => switch (mir_tag[1]) { - .ld => s.top -%= 1, - else => unreachable, - }, - .fb_p => switch (mir_tag[1]) { - .st => s.top +%= 1, - else => unreachable, - }, - .fi_ => switch (mir_tag[1]) { - .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {}, - .ld => s.top -%= 1, - else => unreachable, - }, - .fi_p => switch (mir_tag[1]) { - .com, .st => s.top +%= 1, - else => unreachable, - }, - .fn_ => switch (mir_tag[1]) { - .clex => {}, - .init, .save => s.top = 0, - else => unreachable, - }, - .fn_cw, .fn_env, .fn_sw => switch (mir_tag[1]) { - .st => {}, - else => unreachable, - }, .f_cstp => switch (mir_tag[1]) { .de => s.top -%= 1, .in => s.top +%= 1, @@ -42754,6 +49662,32 @@ const Select = struct { .com, .ucom => s.top +%= 2, else => unreachable, }, + .fb_ => switch (mir_tag[1]) { + .ld => s.top -%= 1, + else => unreachable, + }, + .fb_p => switch (mir_tag[1]) { + .st => s.top +%= 1, + else => unreachable, + }, + .fi_ => switch (mir_tag[1]) { + .add, .com, .div, .divr, .mul, .st, .stt, .sub, .subr => {}, + .ld => s.top -%= 1, + else => unreachable, + }, + .fi_p => switch (mir_tag[1]) { + .com, .st => s.top +%= 1, + else => unreachable, + }, + .fn_ => switch (mir_tag[1]) { + .clex => {}, + .init, .save => s.top = 0, + else => unreachable, + }, + .fn_cw, .fn_env, .fn_sw => switch (mir_tag[1]) { + .st => {}, + else => unreachable, + }, .fx_ => switch (mir_tag[1]) { .rstor => unreachable, .save => {}, @@ -42770,8 +49704,8 @@ const Select = struct { const Case = struct { required_features: [4]?std.Target.x86.Feature = @splat(null), - dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any), src_constraints: [@intFromEnum(Select.Operand.Ref.none) - @intFromEnum(Select.Operand.Ref.src0)]Constraint = @splat(.any), + dst_constraints: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]Constraint = @splat(.any), patterns: []const Select.Pattern, call_frame: packed struct(u16) { size: u10 = 0, alignment: InternPool.Alignment } = .{ .size = 0, .alignment = .none }, extra_temps: [@intFromEnum(Select.Operand.Ref.dst0) - @intFromEnum(Select.Operand.Ref.tmp0)]TempSpec = @splat(.unused), @@ -43168,6 +50102,7 @@ const Select = struct { smax_mem: ConstInfo, umin_mem: ConstInfo, umax_mem: ConstInfo, + frame: FrameIndex, symbol: *const struct { lib: ?[]const u8 = null, name: []const u8 }, const ConstInfo = struct { ref: Select.Operand.Ref, vectorize_to: ?Memory.Size = null }; @@ -43284,6 +50219,7 @@ const Select = struct { } })) else res_scalar_val; return .{ try cg.tempMemFromValue(res_val), true }; }, + .frame => |frame_index| .{ try cg.tempInit(spec.type, .{ .load_frame = .{ .index = frame_index } }), true }, .symbol => |symbol| .{ try cg.tempInit(spec.type, .{ .lea_symbol = .{ .sym_index = if (cg.bin_file.cast(.elf)) |elf_file| try elf_file.getGlobalSymbol(symbol.name, symbol.lib) @@ -43305,18 +50241,21 @@ const Select = struct { Select.Operand, Select.Operand, }; - const Label = enum { @"0:", @"1:", @"2:", @"_" }; + const Label = enum { @"0:", @"1:", @"2:", @"_", pseudo }; const Operand = struct { - tag: Tag, + flags: packed struct(u16) { + tag: Tag, + adjust: Adjust = .none, + unused: u4 = 0, + }, base: Ref.Sized = .none, index: packed struct(u6) { ref: Ref, - scale: Memory.Scale, - } = .{ .ref = .none, .scale = .@"1" }, - adjust: Adjust = .none, + scale: Memory.Scale = .@"1", + } = .{ .ref = .none }, imm: i32 = 0, - const Tag = enum { + const Tag = enum(u3) { none, backward_label, forward_label, @@ -43326,19 +50265,22 @@ const Select = struct { lea, mem, }; - const Adjust = packed struct(u8) { + const Adjust = packed struct(u9) { sign: enum(u1) { neg, pos }, - lhs: enum(u4) { + lhs: enum(u5) { none, ptr_size, ptr_bit_size, size, + delta_size, + delta_elem_size, size_sub_elem_size, - src0_unaligned_size, + unaligned_size, bit_size, src0_bit_size, len, elem_limbs, + elem_size, src0_elem_size, src0_elem_size_times_src1, log2_src0_elem_size, @@ -43353,13 +50295,17 @@ const Select = struct { const sub_ptr_size: Adjust = .{ .sign = .neg, .lhs = .ptr_size, .op = .mul, .rhs = .@"1" }; const add_ptr_bit_size: Adjust = .{ .sign = .pos, .lhs = .ptr_bit_size, .op = .mul, .rhs = .@"1" }; const add_size: Adjust = .{ .sign = .pos, .lhs = .size, .op = .mul, .rhs = .@"1" }; + const add_size_div_4: Adjust = .{ .sign = .pos, .lhs = .size, .op = .div, .rhs = .@"4" }; const add_size_div_8: Adjust = .{ .sign = .pos, .lhs = .size, .op = .div, .rhs = .@"8" }; const sub_size_div_8: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"8" }; const sub_size_div_4: Adjust = .{ .sign = .neg, .lhs = .size, .op = .div, .rhs = .@"4" }; const sub_size: Adjust = .{ .sign = .neg, .lhs = .size, .op = .mul, .rhs = .@"1" }; + const add_delta_size_div_8: Adjust = .{ .sign = .pos, .lhs = .delta_size, .op = .div, .rhs = .@"8" }; + const add_delta_elem_size: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .mul, .rhs = .@"1" }; + const add_delta_elem_size_div_8: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .div, .rhs = .@"8" }; const add_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_size, .op = .mul, .rhs = .@"1" }; - const add_src0_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" }; - const sub_src0_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .src0_unaligned_size, .op = .mul, .rhs = .@"1" }; + const add_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" }; + const sub_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" }; const add_2_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"2" }; const add_bit_size: Adjust = .{ .sign = .pos, .lhs = .bit_size, .op = .mul, .rhs = .@"1" }; const sub_bit_size: Adjust = .{ .sign = .neg, .lhs = .bit_size, .op = .mul, .rhs = .@"1" }; @@ -43371,6 +50317,7 @@ const Select = struct { const add_2_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"2" }; const add_len: Adjust = .{ .sign = .pos, .lhs = .len, .op = .mul, .rhs = .@"1" }; const sub_len: Adjust = .{ .sign = .neg, .lhs = .len, .op = .mul, .rhs = .@"1" }; + const add_elem_size_div_8: Adjust = .{ .sign = .pos, .lhs = .elem_size, .op = .div, .rhs = .@"8" }; const add_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"1" }; const add_2_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"2" }; const add_4_src0_elem_size: Adjust = .{ .sign = .pos, .lhs = .src0_elem_size, .op = .mul, .rhs = .@"4" }; @@ -43530,298 +50477,293 @@ const Select = struct { } }; - const @"_": Select.Operand = .{ .tag = .none }; + const @"_": Select.Operand = .{ .flags = .{ .tag = .none } }; - const @"0b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp0, .size = .none } }; - const @"0f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp0, .size = .none } }; - const @"1b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp1, .size = .none } }; - const @"1f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp1, .size = .none } }; - const @"2b": Select.Operand = .{ .tag = .backward_label, .base = .{ .ref = .tmp2, .size = .none } }; - const @"2f": Select.Operand = .{ .tag = .forward_label, .base = .{ .ref = .tmp2, .size = .none } }; + const @"0b": Select.Operand = .{ .flags = .{ .tag = .backward_label }, .base = .{ .ref = .tmp0, .size = .none } }; + const @"0f": Select.Operand = .{ .flags = .{ .tag = .forward_label }, .base = .{ .ref = .tmp0, .size = .none } }; + const @"1b": Select.Operand = .{ .flags = .{ .tag = .backward_label }, .base = .{ .ref = .tmp1, .size = .none } }; + const @"1f": Select.Operand = .{ .flags = .{ .tag = .forward_label }, .base = .{ .ref = .tmp1, .size = .none } }; + const @"2b": Select.Operand = .{ .flags = .{ .tag = .backward_label }, .base = .{ .ref = .tmp2, .size = .none } }; + const @"2f": Select.Operand = .{ .flags = .{ .tag = .forward_label }, .base = .{ .ref = .tmp2, .size = .none } }; - const tmp0b: Select.Operand = .{ .tag = .ref, .base = .tmp0b }; - const tmp0w: Select.Operand = .{ .tag = .ref, .base = .tmp0w }; - const tmp0d: Select.Operand = .{ .tag = .ref, .base = .tmp0d }; - const tmp0p: Select.Operand = .{ .tag = .ref, .base = .tmp0p }; - const tmp0q: Select.Operand = .{ .tag = .ref, .base = .tmp0q }; - const tmp0t: Select.Operand = .{ .tag = .ref, .base = .tmp0t }; - const tmp0x: Select.Operand = .{ .tag = .ref, .base = .tmp0x }; - const tmp0y: Select.Operand = .{ .tag = .ref, .base = .tmp0y }; + const tmp0b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0b }; + const tmp0w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0w }; + const tmp0d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0d }; + const tmp0p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0p }; + const tmp0q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0q }; + const tmp0t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0t }; + const tmp0x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0x }; + const tmp0y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp0y }; - const tmp1b: Select.Operand = .{ .tag = .ref, .base = .tmp1b }; - const tmp1w: Select.Operand = .{ .tag = .ref, .base = .tmp1w }; - const tmp1d: Select.Operand = .{ .tag = .ref, .base = .tmp1d }; - const tmp1p: Select.Operand = .{ .tag = .ref, .base = .tmp1p }; - const tmp1q: Select.Operand = .{ .tag = .ref, .base = .tmp1q }; - const tmp1t: Select.Operand = .{ .tag = .ref, .base = .tmp1t }; - const tmp1x: Select.Operand = .{ .tag = .ref, .base = .tmp1x }; - const tmp1y: Select.Operand = .{ .tag = .ref, .base = .tmp1y }; + const tmp1b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1b }; + const tmp1w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1w }; + const tmp1d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1d }; + const tmp1p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1p }; + const tmp1q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1q }; + const tmp1t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1t }; + const tmp1x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1x }; + const tmp1y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp1y }; - const tmp2b: Select.Operand = .{ .tag = .ref, .base = .tmp2b }; - const tmp2w: Select.Operand = .{ .tag = .ref, .base = .tmp2w }; - const tmp2d: Select.Operand = .{ .tag = .ref, .base = .tmp2d }; - const tmp2p: Select.Operand = .{ .tag = .ref, .base = .tmp2p }; - const tmp2q: Select.Operand = .{ .tag = .ref, .base = .tmp2q }; - const tmp2t: Select.Operand = .{ .tag = .ref, .base = .tmp2t }; - const tmp2x: Select.Operand = .{ .tag = .ref, .base = .tmp2x }; - const tmp2y: Select.Operand = .{ .tag = .ref, .base = .tmp2y }; + const tmp2b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2b }; + const tmp2w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2w }; + const tmp2d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2d }; + const tmp2p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2p }; + const tmp2q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2q }; + const tmp2t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2t }; + const tmp2x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2x }; + const tmp2y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp2y }; - const tmp3b: Select.Operand = .{ .tag = .ref, .base = .tmp3b }; - const tmp3w: Select.Operand = .{ .tag = .ref, .base = .tmp3w }; - const tmp3d: Select.Operand = .{ .tag = .ref, .base = .tmp3d }; - const tmp3p: Select.Operand = .{ .tag = .ref, .base = .tmp3p }; - const tmp3q: Select.Operand = .{ .tag = .ref, .base = .tmp3q }; - const tmp3t: Select.Operand = .{ .tag = .ref, .base = .tmp3t }; - const tmp3x: Select.Operand = .{ .tag = .ref, .base = .tmp3x }; - const tmp3y: Select.Operand = .{ .tag = .ref, .base = .tmp3y }; + const tmp3b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3b }; + const tmp3w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3w }; + const tmp3d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3d }; + const tmp3p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3p }; + const tmp3q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3q }; + const tmp3t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3t }; + const tmp3x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3x }; + const tmp3y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp3y }; - const tmp4b: Select.Operand = .{ .tag = .ref, .base = .tmp4b }; - const tmp4w: Select.Operand = .{ .tag = .ref, .base = .tmp4w }; - const tmp4d: Select.Operand = .{ .tag = .ref, .base = .tmp4d }; - const tmp4p: Select.Operand = .{ .tag = .ref, .base = .tmp4p }; - const tmp4q: Select.Operand = .{ .tag = .ref, .base = .tmp4q }; - const tmp4t: Select.Operand = .{ .tag = .ref, .base = .tmp4t }; - const tmp4x: Select.Operand = .{ .tag = .ref, .base = .tmp4x }; - const tmp4y: Select.Operand = .{ .tag = .ref, .base = .tmp4y }; + const tmp4b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4b }; + const tmp4w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4w }; + const tmp4d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4d }; + const tmp4p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4p }; + const tmp4q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4q }; + const tmp4t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4t }; + const tmp4x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4x }; + const tmp4y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp4y }; - const tmp5b: Select.Operand = .{ .tag = .ref, .base = .tmp5b }; - const tmp5w: Select.Operand = .{ .tag = .ref, .base = .tmp5w }; - const tmp5d: Select.Operand = .{ .tag = .ref, .base = .tmp5d }; - const tmp5p: Select.Operand = .{ .tag = .ref, .base = .tmp5p }; - const tmp5q: Select.Operand = .{ .tag = .ref, .base = .tmp5q }; - const tmp5t: Select.Operand = .{ .tag = .ref, .base = .tmp5t }; - const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x }; - const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y }; + const tmp5b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5b }; + const tmp5w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5w }; + const tmp5d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5d }; + const tmp5p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5p }; + const tmp5q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5q }; + const tmp5t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5t }; + const tmp5x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5x }; + const tmp5y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp5y }; - const tmp6b: Select.Operand = .{ .tag = .ref, .base = .tmp6b }; - const tmp6w: Select.Operand = .{ .tag = .ref, .base = .tmp6w }; - const tmp6d: Select.Operand = .{ .tag = .ref, .base = .tmp6d }; - const tmp6p: Select.Operand = .{ .tag = .ref, .base = .tmp6p }; - const tmp6q: Select.Operand = .{ .tag = .ref, .base = .tmp6q }; - const tmp6t: Select.Operand = .{ .tag = .ref, .base = .tmp6t }; - const tmp6x: Select.Operand = .{ .tag = .ref, .base = .tmp6x }; - const tmp6y: Select.Operand = .{ .tag = .ref, .base = .tmp6y }; + const tmp6b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6b }; + const tmp6w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6w }; + const tmp6d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6d }; + const tmp6p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6p }; + const tmp6q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6q }; + const tmp6t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6t }; + const tmp6x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6x }; + const tmp6y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp6y }; - const tmp7b: Select.Operand = .{ .tag = .ref, .base = .tmp7b }; - const tmp7w: Select.Operand = .{ .tag = .ref, .base = .tmp7w }; - const tmp7d: Select.Operand = .{ .tag = .ref, .base = .tmp7d }; - const tmp7p: Select.Operand = .{ .tag = .ref, .base = .tmp7p }; - const tmp7q: Select.Operand = .{ .tag = .ref, .base = .tmp7q }; - const tmp7t: Select.Operand = .{ .tag = .ref, .base = .tmp7t }; - const tmp7x: Select.Operand = .{ .tag = .ref, .base = .tmp7x }; - const tmp7y: Select.Operand = .{ .tag = .ref, .base = .tmp7y }; + const tmp7b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7b }; + const tmp7w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7w }; + const tmp7d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7d }; + const tmp7p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7p }; + const tmp7q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7q }; + const tmp7t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7t }; + const tmp7x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7x }; + const tmp7y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp7y }; - const tmp8b: Select.Operand = .{ .tag = .ref, .base = .tmp8b }; - const tmp8w: Select.Operand = .{ .tag = .ref, .base = .tmp8w }; - const tmp8d: Select.Operand = .{ .tag = .ref, .base = .tmp8d }; - const tmp8p: Select.Operand = .{ .tag = .ref, .base = .tmp8p }; - const tmp8q: Select.Operand = .{ .tag = .ref, .base = .tmp8q }; - const tmp8t: Select.Operand = .{ .tag = .ref, .base = .tmp8t }; - const tmp8x: Select.Operand = .{ .tag = .ref, .base = .tmp8x }; - const tmp8y: Select.Operand = .{ .tag = .ref, .base = .tmp8y }; + const tmp8b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8b }; + const tmp8w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8w }; + const tmp8d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8d }; + const tmp8p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8p }; + const tmp8q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8q }; + const tmp8t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8t }; + const tmp8x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8x }; + const tmp8y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .tmp8y }; - const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b }; - const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w }; - const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d }; - const dst0p: Select.Operand = .{ .tag = .ref, .base = .dst0p }; - const dst0q: Select.Operand = .{ .tag = .ref, .base = .dst0q }; - const dst0t: Select.Operand = .{ .tag = .ref, .base = .dst0t }; - const dst0x: Select.Operand = .{ .tag = .ref, .base = .dst0x }; - const dst0y: Select.Operand = .{ .tag = .ref, .base = .dst0y }; + const dst0b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0b }; + const dst0w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0w }; + const dst0d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0d }; + const dst0p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0p }; + const dst0q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0q }; + const dst0t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0t }; + const dst0x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0x }; + const dst0y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .dst0y }; - const src0b: Select.Operand = .{ .tag = .ref, .base = .src0b }; - const src0w: Select.Operand = .{ .tag = .ref, .base = .src0w }; - const src0d: Select.Operand = .{ .tag = .ref, .base = .src0d }; - const src0p: Select.Operand = .{ .tag = .ref, .base = .src0p }; - const src0q: Select.Operand = .{ .tag = .ref, .base = .src0q }; - const src0t: Select.Operand = .{ .tag = .ref, .base = .src0t }; - const src0x: Select.Operand = .{ .tag = .ref, .base = .src0x }; - const src0y: Select.Operand = .{ .tag = .ref, .base = .src0y }; + const src0b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0b }; + const src0w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0w }; + const src0d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0d }; + const src0p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0p }; + const src0q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0q }; + const src0t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0t }; + const src0x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0x }; + const src0y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src0y }; - const src1b: Select.Operand = .{ .tag = .ref, .base = .src1b }; - const src1w: Select.Operand = .{ .tag = .ref, .base = .src1w }; - const src1d: Select.Operand = .{ .tag = .ref, .base = .src1d }; - const src1p: Select.Operand = .{ .tag = .ref, .base = .src1p }; - const src1q: Select.Operand = .{ .tag = .ref, .base = .src1q }; - const src1t: Select.Operand = .{ .tag = .ref, .base = .src1t }; - const src1x: Select.Operand = .{ .tag = .ref, .base = .src1x }; - const src1y: Select.Operand = .{ .tag = .ref, .base = .src1y }; + const src1b: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1b }; + const src1w: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1w }; + const src1d: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1d }; + const src1p: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1p }; + const src1q: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1q }; + const src1t: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1t }; + const src1x: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1x }; + const src1y: Select.Operand = .{ .flags = .{ .tag = .ref }, .base = .src1y }; fn si(imm: i32) Select.Operand { - return .{ .tag = .simm, .imm = imm }; + return .{ .flags = .{ .tag = .simm }, .imm = imm }; } fn sa(base: Ref.Sized, adjust: Adjust) Select.Operand { - return .{ .tag = .simm, .base = base, .adjust = adjust }; + return .{ .flags = .{ .tag = .simm, .adjust = adjust }, .base = base }; + } + fn sa2(base: Ref.Sized, index: Ref, adjust: Adjust) Select.Operand { + return .{ .flags = .{ .tag = .simm, .adjust = adjust }, .base = base, .index = .{ .ref = index } }; } fn sia(imm: i32, base: Ref.Sized, adjust: Adjust) Select.Operand { - return .{ .tag = .simm, .base = base, .adjust = adjust, .imm = imm }; + return .{ .flags = .{ .tag = .simm, .adjust = adjust }, .base = base, .imm = imm }; } fn ui(imm: u32) Select.Operand { - return .{ .tag = .uimm, .imm = @bitCast(imm) }; + return .{ .flags = .{ .tag = .uimm }, .imm = @bitCast(imm) }; } fn ua(base: Ref.Sized, adjust: Adjust) Select.Operand { - return .{ .tag = .uimm, .base = base, .adjust = adjust }; + return .{ .flags = .{ .tag = .uimm, .adjust = adjust }, .base = base }; } fn uia(imm: u32, base: Ref.Sized, adjust: Adjust) Select.Operand { - return .{ .tag = .uimm, .base = base, .adjust = adjust, .imm = @bitCast(imm) }; + return .{ .flags = .{ .tag = .uimm, .adjust = adjust }, .base = base, .imm = @bitCast(imm) }; } fn rm(mode: bits.RoundMode) Select.Operand { - return .{ .tag = .uimm, .imm = @intCast(mode.imm().unsigned) }; + return .{ .flags = .{ .tag = .uimm }, .imm = @intCast(mode.imm().unsigned) }; } fn sp(pred: bits.SseFloatPredicate) Select.Operand { - return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) }; + return .{ .flags = .{ .tag = .uimm }, .imm = @intCast(pred.imm().unsigned) }; } fn vp(pred: bits.VexFloatPredicate) Select.Operand { - return .{ .tag = .uimm, .imm = @intCast(pred.imm().unsigned) }; + return .{ .flags = .{ .tag = .uimm }, .imm = @intCast(pred.imm().unsigned) }; } - fn lea(size: Memory.Size, base: Ref) Select.Operand { + fn lea(base: Ref.Sized) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea }, + .base = base, }; } - fn leaa(size: Memory.Size, base: Ref, adjust: Adjust) Select.Operand { + fn leaa(base: Ref.Sized, adjust: Adjust) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, - .adjust = adjust, + .flags = .{ .tag = .lea, .adjust = adjust }, + .base = base, }; } - fn lead(size: Memory.Size, base: Ref, disp: i32) Select.Operand { + fn lead(base: Ref.Sized, disp: i32) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea }, + .base = base, .imm = disp, }; } - fn leai(size: Memory.Size, base: Ref, index: Ref) Select.Operand { + fn leai(base: Ref.Sized, index: Ref) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, - .index = .{ .ref = index, .scale = .@"1" }, + .flags = .{ .tag = .lea }, + .base = base, + .index = .{ .ref = index }, }; } - fn leaia(size: Memory.Size, base: Ref, index: Ref, adjust: Adjust) Select.Operand { + fn leaia(base: Ref.Sized, index: Ref, adjust: Adjust) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, - .index = .{ .ref = index, .scale = .@"1" }, - .adjust = adjust, + .flags = .{ .tag = .lea, .adjust = adjust }, + .base = base, + .index = .{ .ref = index }, }; } - fn leaid(size: Memory.Size, base: Ref, index: Ref, disp: i32) Select.Operand { + fn leaid(base: Ref.Sized, index: Ref, disp: i32) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, - .index = .{ .ref = index, .scale = .@"1" }, + .flags = .{ .tag = .lea }, + .base = base, + .index = .{ .ref = index }, .imm = disp, }; } - fn leasi(size: Memory.Size, base: Ref, scale: Memory.Scale, index: Ref) Select.Operand { + fn leasi(base: Ref.Sized, scale: Memory.Scale, index: Ref) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea }, + .base = base, .index = .{ .ref = index, .scale = scale }, }; } - fn leasid(size: Memory.Size, base: Ref, scale: Memory.Scale, index: Ref, disp: i32) Select.Operand { + fn leasid(base: Ref.Sized, scale: Memory.Scale, index: Ref, disp: i32) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea }, + .base = base, .index = .{ .ref = index, .scale = scale }, .imm = disp, }; } - fn leasiad(size: Memory.Size, base: Ref, scale: Memory.Scale, index: Ref, adjust: Adjust, disp: i32) Select.Operand { + fn leasiad(base: Ref.Sized, scale: Memory.Scale, index: Ref, adjust: Adjust, disp: i32) Select.Operand { return .{ - .tag = .lea, - .base = .{ .ref = base, .size = size }, + .flags = .{ .tag = .lea, .adjust = adjust }, + .base = base, .index = .{ .ref = index, .scale = scale }, - .adjust = adjust, .imm = disp, }; } fn mem(base: Ref.Sized) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, }; } fn memd(base: Ref.Sized, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, .imm = disp, }; } fn mema(base: Ref.Sized, adjust: Adjust) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, - .adjust = adjust, }; } fn memad(base: Ref.Sized, adjust: Adjust, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, - .adjust = adjust, .imm = disp, }; } fn memi(base: Ref.Sized, index: Ref) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, - .index = .{ .ref = index, .scale = .@"1" }, + .index = .{ .ref = index }, }; } fn memia(base: Ref.Sized, index: Ref, adjust: Adjust) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, - .index = .{ .ref = index, .scale = .@"1" }, - .adjust = adjust, + .index = .{ .ref = index }, }; } fn memiad(base: Ref.Sized, index: Ref, adjust: Adjust, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, - .index = .{ .ref = index, .scale = .@"1" }, - .adjust = adjust, + .index = .{ .ref = index }, .imm = disp, }; } fn memid(base: Ref.Sized, index: Ref, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, - .index = .{ .ref = index, .scale = .@"1" }, + .index = .{ .ref = index }, .imm = disp, }; } fn memsi(base: Ref.Sized, scale: Memory.Scale, index: Ref) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, .index = .{ .ref = index, .scale = scale }, }; } fn memsia(base: Ref.Sized, scale: Memory.Scale, index: Ref, adjust: Adjust) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, .index = .{ .ref = index, .scale = scale }, - .adjust = adjust, }; } fn memsid(base: Ref.Sized, scale: Memory.Scale, index: Ref, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem }, .base = base, .index = .{ .ref = index, .scale = scale }, .imm = disp, @@ -43829,10 +50771,9 @@ const Select = struct { } fn memsiad(base: Ref.Sized, scale: Memory.Scale, index: Ref, adjust: Adjust, disp: i32) Select.Operand { return .{ - .tag = .mem, + .flags = .{ .tag = .mem, .adjust = adjust }, .base = base, .index = .{ .ref = index, .scale = scale }, - .adjust = adjust, .imm = disp, }; } @@ -43841,16 +50782,20 @@ const Select = struct { const UnsignedImm = @Type(.{ .int = .{ .signedness = .unsigned, .bits = @typeInfo(SignedImm).int.bits }, }); - const lhs: SignedImm = lhs: switch (op.adjust.lhs) { + const lhs: SignedImm = lhs: switch (op.flags.adjust.lhs) { .none => 0, .ptr_size => @divExact(s.cg.target.ptrBitWidth(), 8), .ptr_bit_size => s.cg.target.ptrBitWidth(), .size => @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu)), + .delta_size => @intCast(@as(SignedImm, @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu))) - + @as(SignedImm, @intCast(op.index.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu)))), + .delta_elem_size => @intCast(@as(SignedImm, @intCast(op.base.ref.deref(s).typeOf(s.cg).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu))) - + @as(SignedImm, @intCast(op.index.ref.deref(s).typeOf(s.cg).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu)))), .size_sub_elem_size => { const ty = op.base.ref.deref(s).typeOf(s.cg); break :lhs @intCast(ty.abiSize(s.cg.pt.zcu) - ty.elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu)); }, - .src0_unaligned_size => @intCast(s.cg.unalignedSize(Select.Operand.Ref.src0.deref(s).typeOf(s.cg))), + .unaligned_size => @intCast(s.cg.unalignedSize(op.base.ref.deref(s).typeOf(s.cg))), .bit_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), .src0_bit_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu)), .len => @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu)), @@ -43858,6 +50803,7 @@ const Select = struct { op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu), @divExact(op.base.size.bitSize(s.cg.target), 8), )), + .elem_size => @intCast(op.base.ref.deref(s).typeOf(s.cg).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu)), .src0_elem_size => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu)), .src0_elem_size_times_src1 => @intCast(Select.Operand.Ref.src0.deref(s).typeOf(s.cg).elemType2(s.cg.pt.zcu).abiSize(s.cg.pt.zcu) * Select.Operand.Ref.src1.deref(s).tracking(s.cg).short.immediate), @@ -43872,8 +50818,8 @@ const Select = struct { -%op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).bitSize(s.cg.pt.zcu), )), }; - const rhs = op.adjust.rhs.toLog2(); - const res = res: switch (op.adjust.op) { + const rhs = op.flags.adjust.rhs.toLog2(); + const res = res: switch (op.flags.adjust.op) { .mul => { const res = @shlWithOverflow(lhs, rhs); assert(res[1] == 0); @@ -43881,14 +50827,14 @@ const Select = struct { }, .div => @shrExact(lhs, rhs), }; - return switch (op.adjust.sign) { + return switch (op.flags.adjust.sign) { .neg => op.imm - res, .pos => op.imm + res, }; } fn lower(op: Select.Operand, s: *Select) !CodeGen.Operand { - return switch (op.tag) { + return switch (op.flags.tag) { .none => .none, .backward_label => .{ .inst = s.labels[@intFromEnum(op.base.ref)].backward.? }, .forward_label => for (&s.labels[@intFromEnum(op.base.ref)].forward) |*label| { @@ -43945,11 +50891,11 @@ fn select( @setEvalBranchQuota(33_600); cases: for (cases) |case| { for (case.required_features) |required_feature| if (required_feature) |feature| if (!cg.hasFeature(feature)) continue :cases; - for (case.dst_constraints[0..dst_temps.len], dst_tys) |dst_constraint, dst_ty| if (!dst_constraint.accepts(dst_ty, cg)) continue :cases; for (case.src_constraints[0..src_temps.len], src_temps) |src_constraint, src_temp| if (!src_constraint.accepts(src_temp.typeOf(cg), cg)) continue :cases; + for (case.dst_constraints[0..dst_temps.len], dst_tys) |dst_constraint, dst_ty| if (!dst_constraint.accepts(dst_ty, cg)) continue :cases; if (std.debug.runtime_safety) { - for (case.dst_constraints[dst_temps.len..]) |dst_constraint| assert(dst_constraint == .any); for (case.src_constraints[src_temps.len..]) |src_constraint| assert(src_constraint == .any); + for (case.dst_constraints[dst_temps.len..]) |dst_constraint| assert(dst_constraint == .any); } patterns: for (case.patterns) |pattern| { for (pattern.src[0..src_temps.len], src_temps) |src_pattern, src_temp| if (!src_pattern.matches(src_temp, cg)) continue :patterns; diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 241f215875..b9731716f7 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -3325,7 +3325,6 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) error{ AnalysisFail, .bitcast => try airBitcast(f, inst), .intcast => try airIntCast(f, inst), .trunc => try airTrunc(f, inst), - .int_from_bool => try airIntFromBool(f, inst), .load => try airLoad(f, inst), .store => try airStore(f, inst, false), .store_safe => try airStore(f, inst, true), @@ -3371,8 +3370,6 @@ fn genBodyInner(f: *Function, body: []const Air.Inst.Index) error{ AnalysisFail, .fpext, => try airFloatCast(f, inst), - .int_from_ptr => try airIntFromPtr(f, inst), - .atomic_store_unordered => try airAtomicStore(f, inst, toMemoryOrder(.unordered)), .atomic_store_monotonic => try airAtomicStore(f, inst, toMemoryOrder(.monotonic)), .atomic_store_release => try airAtomicStore(f, inst, toMemoryOrder(.release)), @@ -3983,21 +3980,6 @@ fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue { return local; } -fn airIntFromBool(f: *Function, inst: Air.Inst.Index) !CValue { - const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try f.resolveInst(un_op); - try reap(f, inst, &.{un_op}); - const writer = f.object.writer(); - const inst_ty = f.typeOfIndex(inst); - const local = try f.allocLocal(inst, inst_ty); - const a = try Assignment.start(f, writer, try f.ctypeFromType(inst_ty, .complete)); - try f.writeCValue(writer, local, .Other); - try a.assign(f, writer); - try f.writeCValue(writer, operand, .Other); - try a.end(f, writer); - return local; -} - fn airStore(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue { const pt = f.object.dg.pt; const zcu = pt.zcu; @@ -4970,7 +4952,7 @@ fn bitcast(f: *Function, dest_ty: Type, operand: CValue, operand_ty: Type) !CVal src_info.bits == dest_info.bits) return operand; } - if (dest_ty.isPtrAtRuntime(zcu) and operand_ty.isPtrAtRuntime(zcu)) { + if (dest_ty.isPtrAtRuntime(zcu) or operand_ty.isPtrAtRuntime(zcu)) { const local = try f.allocLocal(null, dest_ty); try f.writeCValue(writer, local, .Other); try writer.writeAll(" = ("); @@ -6455,30 +6437,6 @@ fn airFloatCast(f: *Function, inst: Air.Inst.Index) !CValue { return local; } -fn airIntFromPtr(f: *Function, inst: Air.Inst.Index) !CValue { - const pt = f.object.dg.pt; - const zcu = pt.zcu; - const un_op = f.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - - const operand = try f.resolveInst(un_op); - const operand_ty = f.typeOf(un_op); - try reap(f, inst, &.{un_op}); - const inst_ty = f.typeOfIndex(inst); - const writer = f.object.writer(); - const local = try f.allocLocal(inst, inst_ty); - try f.writeCValue(writer, local, .Other); - - try writer.writeAll(" = ("); - try f.renderType(writer, inst_ty); - try writer.writeByte(')'); - if (operand_ty.isSlice(zcu)) - try f.writeCValueMember(writer, operand, .{ .identifier = "ptr" }) - else - try f.writeCValue(writer, operand, .Other); - try writer.writeAll(";\n"); - return local; -} - fn airUnBuiltinCall( f: *Function, inst: Air.Inst.Index, diff --git a/src/codegen/c/Type.zig b/src/codegen/c/Type.zig index 53e8a6be82..4c6f37c69d 100644 --- a/src/codegen/c/Type.zig +++ b/src/codegen/c/Type.zig @@ -1707,6 +1707,21 @@ pub const Pool = struct { }; return pool.fromFields(allocator, .@"struct", &fields, kind); }, + .vector_2_f32_type => { + const vector_ctype = try pool.getVector(allocator, .{ + .elem_ctype = .f32, + .len = 2, + }); + if (!kind.isParameter()) return vector_ctype; + var fields = [_]Info.Field{ + .{ + .name = .{ .index = .array }, + .ctype = vector_ctype, + .alignas = AlignAs.fromAbiAlignment(Type.f32.abiAlignment(zcu)), + }, + }; + return pool.fromFields(allocator, .@"struct", &fields, kind); + }, .vector_4_f32_type => { const vector_ctype = try pool.getVector(allocator, .{ .elem_ctype = .f32, diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 7ca35d149b..97ed00c98d 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -5154,7 +5154,6 @@ pub const FuncGen = struct { .ret_ptr => try self.airRetPtr(inst), .arg => try self.airArg(inst), .bitcast => try self.airBitCast(inst), - .int_from_bool => try self.airIntFromBool(inst), .breakpoint => try self.airBreakpoint(inst), .ret_addr => try self.airRetAddr(inst), .frame_addr => try self.airFrameAddress(inst), @@ -5167,7 +5166,6 @@ pub const FuncGen = struct { .trunc => try self.airTrunc(inst), .fptrunc => try self.airFptrunc(inst), .fpext => try self.airFpext(inst), - .int_from_ptr => try self.airIntFromPtr(inst), .load => try self.airLoad(body[i..]), .not => try self.airNot(inst), .store => try self.airStore(inst, false), @@ -9435,16 +9433,6 @@ pub const FuncGen = struct { } } - fn airIntFromPtr(self: *FuncGen, inst: Air.Inst.Index) !Builder.Value { - const o = self.ng.object; - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try self.resolveInst(un_op); - const ptr_ty = self.typeOf(un_op); - const operand_ptr = try self.sliceOrArrayPtr(operand, ptr_ty); - const dest_llvm_ty = try o.lowerType(self.typeOfIndex(inst)); - return self.wip.cast(.ptrtoint, operand_ptr, dest_llvm_ty, ""); - } - fn airBitCast(self: *FuncGen, inst: Air.Inst.Index) !Builder.Value { const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const operand_ty = self.typeOf(ty_op.operand); @@ -9476,6 +9464,10 @@ pub const FuncGen = struct { return self.wip.cast(.inttoptr, operand, llvm_dest_ty, ""); } + if (operand_ty.isPtrAtRuntime(zcu) and inst_ty.zigTypeTag(zcu) == .int) { + return self.wip.cast(.ptrtoint, operand, llvm_dest_ty, ""); + } + if (operand_ty.zigTypeTag(zcu) == .vector and inst_ty.zigTypeTag(zcu) == .array) { const elem_ty = operand_ty.childType(zcu); if (!result_is_ref) { @@ -9564,12 +9556,6 @@ pub const FuncGen = struct { return self.wip.cast(.bitcast, operand, llvm_dest_ty, ""); } - fn airIntFromBool(self: *FuncGen, inst: Air.Inst.Index) !Builder.Value { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try self.resolveInst(un_op); - return operand; - } - fn airArg(self: *FuncGen, inst: Air.Inst.Index) !Builder.Value { const o = self.ng.object; const pt = o.pt; diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig index e9322a9d70..e1baf20156 100644 --- a/src/codegen/spirv.zig +++ b/src/codegen/spirv.zig @@ -3449,10 +3449,8 @@ const NavGen = struct { .bitcast => try self.airBitCast(inst), .intcast, .trunc => try self.airIntCast(inst), - .int_from_ptr => try self.airIntFromPtr(inst), .float_from_int => try self.airFloatFromInt(inst), .int_from_float => try self.airIntFromFloat(inst), - .int_from_bool => try self.airIntFromBool(inst), .fpext, .fptrunc => try self.airFloatCast(inst), .not => try self.airNot(inst), @@ -4706,9 +4704,14 @@ const NavGen = struct { fn airBitCast(self: *NavGen, inst: Air.Inst.Index) !?IdRef { const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; - const operand_id = try self.resolve(ty_op.operand); const operand_ty = self.typeOf(ty_op.operand); const result_ty = self.typeOfIndex(inst); + if (operand_ty.toIntern() == .bool_type) { + const operand = try self.temporary(ty_op.operand); + const result = try self.intFromBool(operand); + return try result.materialize(self); + } + const operand_id = try self.resolve(ty_op.operand); return try self.bitCast(result_ty, operand_ty, operand_id); } @@ -4749,12 +4752,6 @@ const NavGen = struct { return result_id; } - fn airIntFromPtr(self: *NavGen, inst: Air.Inst.Index) !?IdRef { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand_id = try self.resolve(un_op); - return try self.intFromPtr(operand_id); - } - fn airFloatFromInt(self: *NavGen, inst: Air.Inst.Index) !?IdRef { const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const operand_ty = self.typeOf(ty_op.operand); @@ -4808,13 +4805,6 @@ const NavGen = struct { return result_id; } - fn airIntFromBool(self: *NavGen, inst: Air.Inst.Index) !?IdRef { - const un_op = self.air.instructions.items(.data)[@intFromEnum(inst)].un_op; - const operand = try self.temporary(un_op); - const result = try self.intFromBool(operand); - return try result.materialize(self); - } - fn airFloatCast(self: *NavGen, inst: Air.Inst.Index) !?IdRef { const ty_op = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; const operand_id = try self.resolve(ty_op.operand); diff --git a/src/print_air.zig b/src/print_air.zig index d4cd20f3d4..73e075a0b2 100644 --- a/src/print_air.zig +++ b/src/print_air.zig @@ -172,8 +172,6 @@ const Writer = struct { .is_non_err, .is_err_ptr, .is_non_err_ptr, - .int_from_ptr, - .int_from_bool, .ret, .ret_safe, .ret_load, diff --git a/src/target.zig b/src/target.zig index 546d10b0bc..29387f0cd5 100644 --- a/src/target.zig +++ b/src/target.zig @@ -745,5 +745,8 @@ pub inline fn backendSupportsFeature(backend: std.builtin.CompilerBackend, compt .stage2_llvm => false, else => true, }, + .all_vector_instructions => switch (backend) { + else => false, + }, }; } diff --git a/test/behavior/maximum_minimum.zig b/test/behavior/maximum_minimum.zig index e9bcdab125..8eca243c88 100644 --- a/test/behavior/maximum_minimum.zig +++ b/test/behavior/maximum_minimum.zig @@ -203,8 +203,8 @@ test "@min/@max notices vector bounds" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest; var x: @Vector(2, u16) = .{ 140, 40 }; const y: @Vector(2, u64) = .{ 5, 100 }; @@ -257,8 +257,8 @@ test "@min/@max notices bounds from vector types" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest; var x: @Vector(2, u16) = .{ 30, 67 }; var y: @Vector(2, u32) = .{ 20, 500 }; @@ -301,8 +301,7 @@ test "@min/@max notices bounds from vector types when element of comptime-known if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_x86_64 and - !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .sse4_1)) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest; var x: @Vector(2, u32) = .{ 1_000_000, 12345 }; _ = &x; diff --git a/test/behavior/x86_64/math.zig b/test/behavior/x86_64/math.zig index 510c8289c6..3befdab4bf 100644 --- a/test/behavior/x86_64/math.zig +++ b/test/behavior/x86_64/math.zig @@ -24,27 +24,32 @@ inline fn runtime(comptime Type: type, comptime value: Type) Type { }.variable; } +fn Scalar(comptime Type: type) type { + return switch (@typeInfo(Type)) { + else => Type, + .vector => |info| info.child, + }; +} +// inline to avoid a runtime `@splat` +inline fn splat(comptime Type: type, scalar: Scalar(Type)) Type { + return switch (@typeInfo(Type)) { + else => scalar, + .vector => @splat(scalar), + }; +} fn sign(rhs: anytype) switch (@typeInfo(@TypeOf(rhs))) { else => bool, .vector => |vector| @Vector(vector.len, bool), } { - switch (@typeInfo(@TypeOf(rhs))) { - else => { - const I = @Type(.{ .int = .{ - .signedness = .unsigned, - .bits = @bitSizeOf(@TypeOf(rhs)), - } }); - return @as(I, @bitCast(rhs)) & @as(I, 1) << (@bitSizeOf(I) - 1) != 0; - }, - .vector => |vector| { - const I = @Type(.{ .int = .{ - .signedness = .unsigned, - .bits = @bitSizeOf(vector.child), - } }); - const V = @Vector(vector.len, I); - return @as(V, @bitCast(rhs)) & @as(V, @splat(@as(I, 1) << (@bitSizeOf(I) - 1))) != @as(V, @splat(0)); - }, - } + const ScalarInt = @Type(.{ .int = .{ + .signedness = .unsigned, + .bits = @bitSizeOf(Scalar(@TypeOf(rhs))), + } }); + const VectorInt = switch (@typeInfo(@TypeOf(rhs))) { + else => ScalarInt, + .vector => |vector| @Vector(vector.len, ScalarInt), + }; + return @as(VectorInt, @bitCast(rhs)) & splat(VectorInt, @as(ScalarInt, 1) << @bitSizeOf(ScalarInt) - 1) != splat(VectorInt, 0); } fn boolAnd(lhs: anytype, rhs: @TypeOf(lhs)) @TypeOf(lhs) { switch (@typeInfo(@TypeOf(lhs))) { @@ -650,18 +655,18 @@ fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) t try testArgs(f16, -nan(f16)); try testArgs(f16, -inf(f16)); try testArgs(f16, -fmax(f16)); - try testArgs(f16, -10.0); - try testArgs(f16, -1.0); - try testArgs(f16, -0.1); + try testArgs(f16, -1e1); + try testArgs(f16, -1e0); + try testArgs(f16, -1e-1); try testArgs(f16, -fmin(f16)); try testArgs(f16, -tmin(f16)); try testArgs(f16, -0.0); try testArgs(f16, 0.0); try testArgs(f16, tmin(f16)); try testArgs(f16, fmin(f16)); - try testArgs(f16, 0.1); - try testArgs(f16, 1.0); - try testArgs(f16, 10.0); + try testArgs(f16, 1e-1); + try testArgs(f16, 1e0); + try testArgs(f16, 1e1); try testArgs(f16, fmax(f16)); try testArgs(f16, inf(f16)); try testArgs(f16, nan(f16)); @@ -669,18 +674,18 @@ fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) t try testArgs(f32, -nan(f32)); try testArgs(f32, -inf(f32)); try testArgs(f32, -fmax(f32)); - try testArgs(f32, -10.0); - try testArgs(f32, -1.0); - try testArgs(f32, -0.1); + try testArgs(f32, -1e1); + try testArgs(f32, -1e0); + try testArgs(f32, -1e-1); try testArgs(f32, -fmin(f32)); try testArgs(f32, -tmin(f32)); try testArgs(f32, -0.0); try testArgs(f32, 0.0); try testArgs(f32, tmin(f32)); try testArgs(f32, fmin(f32)); - try testArgs(f32, 0.1); - try testArgs(f32, 1.0); - try testArgs(f32, 10.0); + try testArgs(f32, 1e-1); + try testArgs(f32, 1e0); + try testArgs(f32, 1e1); try testArgs(f32, fmax(f32)); try testArgs(f32, inf(f32)); try testArgs(f32, nan(f32)); @@ -688,18 +693,18 @@ fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) t try testArgs(f64, -nan(f64)); try testArgs(f64, -inf(f64)); try testArgs(f64, -fmax(f64)); - try testArgs(f64, -10.0); - try testArgs(f64, -1.0); - try testArgs(f64, -0.1); + try testArgs(f64, -1e1); + try testArgs(f64, -1e0); + try testArgs(f64, -1e-1); try testArgs(f64, -fmin(f64)); try testArgs(f64, -tmin(f64)); try testArgs(f64, -0.0); try testArgs(f64, 0.0); try testArgs(f64, tmin(f64)); try testArgs(f64, fmin(f64)); - try testArgs(f64, 0.1); - try testArgs(f64, 1.0); - try testArgs(f64, 10.0); + try testArgs(f64, 1e-1); + try testArgs(f64, 1e0); + try testArgs(f64, 1e1); try testArgs(f64, fmax(f64)); try testArgs(f64, inf(f64)); try testArgs(f64, nan(f64)); @@ -707,18 +712,18 @@ fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) t try testArgs(f80, -nan(f80)); try testArgs(f80, -inf(f80)); try testArgs(f80, -fmax(f80)); - try testArgs(f80, -10.0); - try testArgs(f80, -1.0); - try testArgs(f80, -0.1); + try testArgs(f80, -1e1); + try testArgs(f80, -1e0); + try testArgs(f80, -1e-1); try testArgs(f80, -fmin(f80)); try testArgs(f80, -tmin(f80)); try testArgs(f80, -0.0); try testArgs(f80, 0.0); try testArgs(f80, tmin(f80)); try testArgs(f80, fmin(f80)); - try testArgs(f80, 0.1); - try testArgs(f80, 1.0); - try testArgs(f80, 10.0); + try testArgs(f80, 1e-1); + try testArgs(f80, 1e0); + try testArgs(f80, 1e1); try testArgs(f80, fmax(f80)); try testArgs(f80, inf(f80)); try testArgs(f80, nan(f80)); @@ -726,18 +731,18 @@ fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) t try testArgs(f128, -nan(f128)); try testArgs(f128, -inf(f128)); try testArgs(f128, -fmax(f128)); - try testArgs(f128, -10.0); - try testArgs(f128, -1.0); - try testArgs(f128, -0.1); + try testArgs(f128, -1e1); + try testArgs(f128, -1e0); + try testArgs(f128, -1e-1); try testArgs(f128, -fmin(f128)); try testArgs(f128, -tmin(f128)); try testArgs(f128, -0.0); try testArgs(f128, 0.0); try testArgs(f128, tmin(f128)); try testArgs(f128, fmin(f128)); - try testArgs(f128, 0.1); - try testArgs(f128, 1.0); - try testArgs(f128, 10.0); + try testArgs(f128, 1e-1); + try testArgs(f128, 1e0); + try testArgs(f128, 1e1); try testArgs(f128, fmax(f128)); try testArgs(f128, inf(f128)); try testArgs(f128, nan(f128)); @@ -1623,6 +1628,5493 @@ fn unary(comptime op: anytype, comptime opts: struct { strict: bool = false }) t }; } +fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) type { + return struct { + // noinline so that `mem_arg` is on the stack + noinline fn testArgKinds( + _: Gpr, + _: Gpr, + _: Gpr, + _: Gpr, + _: Gpr, + _: Gpr, + _: Gpr, + _: Gpr, + _: Sse, + _: Sse, + _: Sse, + _: Sse, + _: Sse, + _: Sse, + _: Sse, + _: Sse, + comptime Result: type, + comptime Type: type, + comptime imm_arg: Type, + mem_arg: Type, + ) !void { + const expected = comptime op(Result, Type, imm_arg, imm_arg); + var reg_arg = mem_arg; + _ = .{®_arg}; + try checkExpected(expected, op(Result, Type, reg_arg, imm_arg), opts.strict); + try checkExpected(expected, op(Result, Type, mem_arg, imm_arg), opts.strict); + try checkExpected(expected, op(Result, Type, imm_arg, imm_arg), opts.strict); + } + // noinline for a more helpful stack trace + noinline fn testArgs(comptime Result: type, comptime Type: type, comptime imm_arg: Type) !void { + try testArgKinds( + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + Result, + Type, + imm_arg, + imm_arg, + ); + } + fn testSameSignednessInts() !void { + try testArgs(i8, i1, -1); + try testArgs(i8, i1, 0); + try testArgs(i16, i1, -1); + try testArgs(i16, i1, 0); + try testArgs(i32, i1, -1); + try testArgs(i32, i1, 0); + try testArgs(i64, i1, -1); + try testArgs(i64, i1, 0); + try testArgs(i128, i1, -1); + try testArgs(i128, i1, 0); + try testArgs(i256, i1, -1); + try testArgs(i256, i1, 0); + try testArgs(i512, i1, -1); + try testArgs(i512, i1, 0); + try testArgs(i1024, i1, -1); + try testArgs(i1024, i1, 0); + try testArgs(u8, u1, 0); + try testArgs(u8, u1, 1 << 0); + try testArgs(u16, u1, 0); + try testArgs(u16, u1, 1 << 0); + try testArgs(u32, u1, 0); + try testArgs(u32, u1, 1 << 0); + try testArgs(u64, u1, 0); + try testArgs(u64, u1, 1 << 0); + try testArgs(u128, u1, 0); + try testArgs(u128, u1, 1 << 0); + try testArgs(u256, u1, 0); + try testArgs(u256, u1, 1 << 0); + try testArgs(u512, u1, 0); + try testArgs(u512, u1, 1 << 0); + try testArgs(u1024, u1, 0); + try testArgs(u1024, u1, 1 << 0); + + try testArgs(i8, i2, -1 << 1); + try testArgs(i8, i2, -1); + try testArgs(i8, i2, 0); + try testArgs(i16, i2, -1 << 1); + try testArgs(i16, i2, -1); + try testArgs(i16, i2, 0); + try testArgs(i32, i2, -1 << 1); + try testArgs(i32, i2, -1); + try testArgs(i32, i2, 0); + try testArgs(i64, i2, -1 << 1); + try testArgs(i64, i2, -1); + try testArgs(i64, i2, 0); + try testArgs(i128, i2, -1 << 1); + try testArgs(i128, i2, -1); + try testArgs(i128, i2, 0); + try testArgs(i256, i2, -1 << 1); + try testArgs(i256, i2, -1); + try testArgs(i256, i2, 0); + try testArgs(i512, i2, -1 << 1); + try testArgs(i512, i2, -1); + try testArgs(i512, i2, 0); + try testArgs(i1024, i2, -1 << 1); + try testArgs(i1024, i2, -1); + try testArgs(i1024, i2, 0); + try testArgs(u8, u2, 0); + try testArgs(u8, u2, 1 << 0); + try testArgs(u8, u2, 1 << 1); + try testArgs(u16, u2, 0); + try testArgs(u16, u2, 1 << 0); + try testArgs(u16, u2, 1 << 1); + try testArgs(u32, u2, 0); + try testArgs(u32, u2, 1 << 0); + try testArgs(u32, u2, 1 << 1); + try testArgs(u64, u2, 0); + try testArgs(u64, u2, 1 << 0); + try testArgs(u64, u2, 1 << 1); + try testArgs(u128, u2, 0); + try testArgs(u128, u2, 1 << 0); + try testArgs(u128, u2, 1 << 1); + try testArgs(u256, u2, 0); + try testArgs(u256, u2, 1 << 0); + try testArgs(u256, u2, 1 << 1); + try testArgs(u512, u2, 0); + try testArgs(u512, u2, 1 << 0); + try testArgs(u512, u2, 1 << 1); + try testArgs(u1024, u2, 0); + try testArgs(u1024, u2, 1 << 0); + try testArgs(u1024, u2, 1 << 1); + + try testArgs(i8, i3, -1 << 2); + try testArgs(i8, i3, -1); + try testArgs(i8, i3, 0); + try testArgs(i16, i3, -1 << 2); + try testArgs(i16, i3, -1); + try testArgs(i16, i3, 0); + try testArgs(i32, i3, -1 << 2); + try testArgs(i32, i3, -1); + try testArgs(i32, i3, 0); + try testArgs(i64, i3, -1 << 2); + try testArgs(i64, i3, -1); + try testArgs(i64, i3, 0); + try testArgs(i128, i3, -1 << 2); + try testArgs(i128, i3, -1); + try testArgs(i128, i3, 0); + try testArgs(i256, i3, -1 << 2); + try testArgs(i256, i3, -1); + try testArgs(i256, i3, 0); + try testArgs(i512, i3, -1 << 2); + try testArgs(i512, i3, -1); + try testArgs(i512, i3, 0); + try testArgs(i1024, i3, -1 << 2); + try testArgs(i1024, i3, -1); + try testArgs(i1024, i3, 0); + try testArgs(u8, u3, 0); + try testArgs(u8, u3, 1 << 0); + try testArgs(u8, u3, 1 << 2); + try testArgs(u16, u3, 0); + try testArgs(u16, u3, 1 << 0); + try testArgs(u16, u3, 1 << 2); + try testArgs(u32, u3, 0); + try testArgs(u32, u3, 1 << 0); + try testArgs(u32, u3, 1 << 2); + try testArgs(u64, u3, 0); + try testArgs(u64, u3, 1 << 0); + try testArgs(u64, u3, 1 << 2); + try testArgs(u128, u3, 0); + try testArgs(u128, u3, 1 << 0); + try testArgs(u128, u3, 1 << 2); + try testArgs(u256, u3, 0); + try testArgs(u256, u3, 1 << 0); + try testArgs(u256, u3, 1 << 2); + try testArgs(u512, u3, 0); + try testArgs(u512, u3, 1 << 0); + try testArgs(u512, u3, 1 << 2); + try testArgs(u1024, u3, 0); + try testArgs(u1024, u3, 1 << 0); + try testArgs(u1024, u3, 1 << 2); + + try testArgs(i8, i4, -1 << 3); + try testArgs(i8, i4, -1); + try testArgs(i8, i4, 0); + try testArgs(i16, i4, -1 << 3); + try testArgs(i16, i4, -1); + try testArgs(i16, i4, 0); + try testArgs(i32, i4, -1 << 3); + try testArgs(i32, i4, -1); + try testArgs(i32, i4, 0); + try testArgs(i64, i4, -1 << 3); + try testArgs(i64, i4, -1); + try testArgs(i64, i4, 0); + try testArgs(i128, i4, -1 << 3); + try testArgs(i128, i4, -1); + try testArgs(i128, i4, 0); + try testArgs(i256, i4, -1 << 3); + try testArgs(i256, i4, -1); + try testArgs(i256, i4, 0); + try testArgs(i512, i4, -1 << 3); + try testArgs(i512, i4, -1); + try testArgs(i512, i4, 0); + try testArgs(i1024, i4, -1 << 3); + try testArgs(i1024, i4, -1); + try testArgs(i1024, i4, 0); + try testArgs(u8, u4, 0); + try testArgs(u8, u4, 1 << 0); + try testArgs(u8, u4, 1 << 3); + try testArgs(u16, u4, 0); + try testArgs(u16, u4, 1 << 0); + try testArgs(u16, u4, 1 << 3); + try testArgs(u32, u4, 0); + try testArgs(u32, u4, 1 << 0); + try testArgs(u32, u4, 1 << 3); + try testArgs(u64, u4, 0); + try testArgs(u64, u4, 1 << 0); + try testArgs(u64, u4, 1 << 3); + try testArgs(u128, u4, 0); + try testArgs(u128, u4, 1 << 0); + try testArgs(u128, u4, 1 << 3); + try testArgs(u256, u4, 0); + try testArgs(u256, u4, 1 << 0); + try testArgs(u256, u4, 1 << 3); + try testArgs(u512, u4, 0); + try testArgs(u512, u4, 1 << 0); + try testArgs(u512, u4, 1 << 3); + try testArgs(u1024, u4, 0); + try testArgs(u1024, u4, 1 << 0); + try testArgs(u1024, u4, 1 << 3); + + try testArgs(i8, i5, -1 << 4); + try testArgs(i8, i5, -1); + try testArgs(i8, i5, 0); + try testArgs(i16, i5, -1 << 4); + try testArgs(i16, i5, -1); + try testArgs(i16, i5, 0); + try testArgs(i32, i5, -1 << 4); + try testArgs(i32, i5, -1); + try testArgs(i32, i5, 0); + try testArgs(i64, i5, -1 << 4); + try testArgs(i64, i5, -1); + try testArgs(i64, i5, 0); + try testArgs(i128, i5, -1 << 4); + try testArgs(i128, i5, -1); + try testArgs(i128, i5, 0); + try testArgs(i256, i5, -1 << 4); + try testArgs(i256, i5, -1); + try testArgs(i256, i5, 0); + try testArgs(i512, i5, -1 << 4); + try testArgs(i512, i5, -1); + try testArgs(i512, i5, 0); + try testArgs(i1024, i5, -1 << 4); + try testArgs(i1024, i5, -1); + try testArgs(i1024, i5, 0); + try testArgs(u8, u5, 0); + try testArgs(u8, u5, 1 << 0); + try testArgs(u8, u5, 1 << 4); + try testArgs(u16, u5, 0); + try testArgs(u16, u5, 1 << 0); + try testArgs(u16, u5, 1 << 4); + try testArgs(u32, u5, 0); + try testArgs(u32, u5, 1 << 0); + try testArgs(u32, u5, 1 << 4); + try testArgs(u64, u5, 0); + try testArgs(u64, u5, 1 << 0); + try testArgs(u64, u5, 1 << 4); + try testArgs(u128, u5, 0); + try testArgs(u128, u5, 1 << 0); + try testArgs(u128, u5, 1 << 4); + try testArgs(u256, u5, 0); + try testArgs(u256, u5, 1 << 0); + try testArgs(u256, u5, 1 << 4); + try testArgs(u512, u5, 0); + try testArgs(u512, u5, 1 << 0); + try testArgs(u512, u5, 1 << 4); + try testArgs(u1024, u5, 0); + try testArgs(u1024, u5, 1 << 0); + try testArgs(u1024, u5, 1 << 4); + + try testArgs(i8, i7, -1 << 6); + try testArgs(i8, i7, -1); + try testArgs(i8, i7, 0); + try testArgs(i16, i7, -1 << 6); + try testArgs(i16, i7, -1); + try testArgs(i16, i7, 0); + try testArgs(i32, i7, -1 << 6); + try testArgs(i32, i7, -1); + try testArgs(i32, i7, 0); + try testArgs(i64, i7, -1 << 6); + try testArgs(i64, i7, -1); + try testArgs(i64, i7, 0); + try testArgs(i128, i7, -1 << 6); + try testArgs(i128, i7, -1); + try testArgs(i128, i7, 0); + try testArgs(i256, i7, -1 << 6); + try testArgs(i256, i7, -1); + try testArgs(i256, i7, 0); + try testArgs(i512, i7, -1 << 6); + try testArgs(i512, i7, -1); + try testArgs(i512, i7, 0); + try testArgs(i1024, i7, -1 << 6); + try testArgs(i1024, i7, -1); + try testArgs(i1024, i7, 0); + try testArgs(u8, u7, 0); + try testArgs(u8, u7, 1 << 0); + try testArgs(u8, u7, 1 << 6); + try testArgs(u16, u7, 0); + try testArgs(u16, u7, 1 << 0); + try testArgs(u16, u7, 1 << 6); + try testArgs(u32, u7, 0); + try testArgs(u32, u7, 1 << 0); + try testArgs(u32, u7, 1 << 6); + try testArgs(u64, u7, 0); + try testArgs(u64, u7, 1 << 0); + try testArgs(u64, u7, 1 << 6); + try testArgs(u128, u7, 0); + try testArgs(u128, u7, 1 << 0); + try testArgs(u128, u7, 1 << 6); + try testArgs(u256, u7, 0); + try testArgs(u256, u7, 1 << 0); + try testArgs(u256, u7, 1 << 6); + try testArgs(u512, u7, 0); + try testArgs(u512, u7, 1 << 0); + try testArgs(u512, u7, 1 << 6); + try testArgs(u1024, u7, 0); + try testArgs(u1024, u7, 1 << 0); + try testArgs(u1024, u7, 1 << 6); + + try testArgs(i8, i8, -1 << 7); + try testArgs(i8, i8, -1); + try testArgs(i8, i8, 0); + try testArgs(i16, i8, -1 << 7); + try testArgs(i16, i8, -1); + try testArgs(i16, i8, 0); + try testArgs(i32, i8, -1 << 7); + try testArgs(i32, i8, -1); + try testArgs(i32, i8, 0); + try testArgs(i64, i8, -1 << 7); + try testArgs(i64, i8, -1); + try testArgs(i64, i8, 0); + try testArgs(i128, i8, -1 << 7); + try testArgs(i128, i8, -1); + try testArgs(i128, i8, 0); + try testArgs(i256, i8, -1 << 7); + try testArgs(i256, i8, -1); + try testArgs(i256, i8, 0); + try testArgs(i512, i8, -1 << 7); + try testArgs(i512, i8, -1); + try testArgs(i512, i8, 0); + try testArgs(i1024, i8, -1 << 7); + try testArgs(i1024, i8, -1); + try testArgs(i1024, i8, 0); + try testArgs(u8, u8, 0); + try testArgs(u8, u8, 1 << 0); + try testArgs(u8, u8, 1 << 7); + try testArgs(u16, u8, 0); + try testArgs(u16, u8, 1 << 0); + try testArgs(u16, u8, 1 << 7); + try testArgs(u32, u8, 0); + try testArgs(u32, u8, 1 << 0); + try testArgs(u32, u8, 1 << 7); + try testArgs(u64, u8, 0); + try testArgs(u64, u8, 1 << 0); + try testArgs(u64, u8, 1 << 7); + try testArgs(u128, u8, 0); + try testArgs(u128, u8, 1 << 0); + try testArgs(u128, u8, 1 << 7); + try testArgs(u256, u8, 0); + try testArgs(u256, u8, 1 << 0); + try testArgs(u256, u8, 1 << 7); + try testArgs(u512, u8, 0); + try testArgs(u512, u8, 1 << 0); + try testArgs(u512, u8, 1 << 7); + try testArgs(u1024, u8, 0); + try testArgs(u1024, u8, 1 << 0); + try testArgs(u1024, u8, 1 << 7); + + try testArgs(i8, i9, -1 << 8); + try testArgs(i8, i9, -1); + try testArgs(i8, i9, 0); + try testArgs(i16, i9, -1 << 8); + try testArgs(i16, i9, -1); + try testArgs(i16, i9, 0); + try testArgs(i32, i9, -1 << 8); + try testArgs(i32, i9, -1); + try testArgs(i32, i9, 0); + try testArgs(i64, i9, -1 << 8); + try testArgs(i64, i9, -1); + try testArgs(i64, i9, 0); + try testArgs(i128, i9, -1 << 8); + try testArgs(i128, i9, -1); + try testArgs(i128, i9, 0); + try testArgs(i256, i9, -1 << 8); + try testArgs(i256, i9, -1); + try testArgs(i256, i9, 0); + try testArgs(i512, i9, -1 << 8); + try testArgs(i512, i9, -1); + try testArgs(i512, i9, 0); + try testArgs(i1024, i9, -1 << 8); + try testArgs(i1024, i9, -1); + try testArgs(i1024, i9, 0); + try testArgs(u8, u9, 0); + try testArgs(u8, u9, 1 << 0); + try testArgs(u8, u9, 1 << 8); + try testArgs(u16, u9, 0); + try testArgs(u16, u9, 1 << 0); + try testArgs(u16, u9, 1 << 8); + try testArgs(u32, u9, 0); + try testArgs(u32, u9, 1 << 0); + try testArgs(u32, u9, 1 << 8); + try testArgs(u64, u9, 0); + try testArgs(u64, u9, 1 << 0); + try testArgs(u64, u9, 1 << 8); + try testArgs(u128, u9, 0); + try testArgs(u128, u9, 1 << 0); + try testArgs(u128, u9, 1 << 8); + try testArgs(u256, u9, 0); + try testArgs(u256, u9, 1 << 0); + try testArgs(u256, u9, 1 << 8); + try testArgs(u512, u9, 0); + try testArgs(u512, u9, 1 << 0); + try testArgs(u512, u9, 1 << 8); + try testArgs(u1024, u9, 0); + try testArgs(u1024, u9, 1 << 0); + try testArgs(u1024, u9, 1 << 8); + + try testArgs(i8, i15, -1 << 14); + try testArgs(i8, i15, -1); + try testArgs(i8, i15, 0); + try testArgs(i16, i15, -1 << 14); + try testArgs(i16, i15, -1); + try testArgs(i16, i15, 0); + try testArgs(i32, i15, -1 << 14); + try testArgs(i32, i15, -1); + try testArgs(i32, i15, 0); + try testArgs(i64, i15, -1 << 14); + try testArgs(i64, i15, -1); + try testArgs(i64, i15, 0); + try testArgs(i128, i15, -1 << 14); + try testArgs(i128, i15, -1); + try testArgs(i128, i15, 0); + try testArgs(i256, i15, -1 << 14); + try testArgs(i256, i15, -1); + try testArgs(i256, i15, 0); + try testArgs(i512, i15, -1 << 14); + try testArgs(i512, i15, -1); + try testArgs(i512, i15, 0); + try testArgs(i1024, i15, -1 << 14); + try testArgs(i1024, i15, -1); + try testArgs(i1024, i15, 0); + try testArgs(u8, u15, 0); + try testArgs(u8, u15, 1 << 0); + try testArgs(u8, u15, 1 << 14); + try testArgs(u16, u15, 0); + try testArgs(u16, u15, 1 << 0); + try testArgs(u16, u15, 1 << 14); + try testArgs(u32, u15, 0); + try testArgs(u32, u15, 1 << 0); + try testArgs(u32, u15, 1 << 14); + try testArgs(u64, u15, 0); + try testArgs(u64, u15, 1 << 0); + try testArgs(u64, u15, 1 << 14); + try testArgs(u128, u15, 0); + try testArgs(u128, u15, 1 << 0); + try testArgs(u128, u15, 1 << 14); + try testArgs(u256, u15, 0); + try testArgs(u256, u15, 1 << 0); + try testArgs(u256, u15, 1 << 14); + try testArgs(u512, u15, 0); + try testArgs(u512, u15, 1 << 0); + try testArgs(u512, u15, 1 << 14); + try testArgs(u1024, u15, 0); + try testArgs(u1024, u15, 1 << 0); + try testArgs(u1024, u15, 1 << 14); + + try testArgs(i8, i16, -1 << 15); + try testArgs(i8, i16, -1); + try testArgs(i8, i16, 0); + try testArgs(i16, i16, -1 << 15); + try testArgs(i16, i16, -1); + try testArgs(i16, i16, 0); + try testArgs(i32, i16, -1 << 15); + try testArgs(i32, i16, -1); + try testArgs(i32, i16, 0); + try testArgs(i64, i16, -1 << 15); + try testArgs(i64, i16, -1); + try testArgs(i64, i16, 0); + try testArgs(i128, i16, -1 << 15); + try testArgs(i128, i16, -1); + try testArgs(i128, i16, 0); + try testArgs(i256, i16, -1 << 15); + try testArgs(i256, i16, -1); + try testArgs(i256, i16, 0); + try testArgs(i512, i16, -1 << 15); + try testArgs(i512, i16, -1); + try testArgs(i512, i16, 0); + try testArgs(i1024, i16, -1 << 15); + try testArgs(i1024, i16, -1); + try testArgs(i1024, i16, 0); + try testArgs(u8, u16, 0); + try testArgs(u8, u16, 1 << 0); + try testArgs(u8, u16, 1 << 15); + try testArgs(u16, u16, 0); + try testArgs(u16, u16, 1 << 0); + try testArgs(u16, u16, 1 << 15); + try testArgs(u32, u16, 0); + try testArgs(u32, u16, 1 << 0); + try testArgs(u32, u16, 1 << 15); + try testArgs(u64, u16, 0); + try testArgs(u64, u16, 1 << 0); + try testArgs(u64, u16, 1 << 15); + try testArgs(u128, u16, 0); + try testArgs(u128, u16, 1 << 0); + try testArgs(u128, u16, 1 << 15); + try testArgs(u256, u16, 0); + try testArgs(u256, u16, 1 << 0); + try testArgs(u256, u16, 1 << 15); + try testArgs(u512, u16, 0); + try testArgs(u512, u16, 1 << 0); + try testArgs(u512, u16, 1 << 15); + try testArgs(u1024, u16, 0); + try testArgs(u1024, u16, 1 << 0); + try testArgs(u1024, u16, 1 << 15); + + try testArgs(i8, i17, -1 << 16); + try testArgs(i8, i17, -1); + try testArgs(i8, i17, 0); + try testArgs(i16, i17, -1 << 16); + try testArgs(i16, i17, -1); + try testArgs(i16, i17, 0); + try testArgs(i32, i17, -1 << 16); + try testArgs(i32, i17, -1); + try testArgs(i32, i17, 0); + try testArgs(i64, i17, -1 << 16); + try testArgs(i64, i17, -1); + try testArgs(i64, i17, 0); + try testArgs(i128, i17, -1 << 16); + try testArgs(i128, i17, -1); + try testArgs(i128, i17, 0); + try testArgs(i256, i17, -1 << 16); + try testArgs(i256, i17, -1); + try testArgs(i256, i17, 0); + try testArgs(i512, i17, -1 << 16); + try testArgs(i512, i17, -1); + try testArgs(i512, i17, 0); + try testArgs(i1024, i17, -1 << 16); + try testArgs(i1024, i17, -1); + try testArgs(i1024, i17, 0); + try testArgs(u8, u17, 0); + try testArgs(u8, u17, 1 << 0); + try testArgs(u8, u17, 1 << 16); + try testArgs(u16, u17, 0); + try testArgs(u16, u17, 1 << 0); + try testArgs(u16, u17, 1 << 16); + try testArgs(u32, u17, 0); + try testArgs(u32, u17, 1 << 0); + try testArgs(u32, u17, 1 << 16); + try testArgs(u64, u17, 0); + try testArgs(u64, u17, 1 << 0); + try testArgs(u64, u17, 1 << 16); + try testArgs(u128, u17, 0); + try testArgs(u128, u17, 1 << 0); + try testArgs(u128, u17, 1 << 16); + try testArgs(u256, u17, 0); + try testArgs(u256, u17, 1 << 0); + try testArgs(u256, u17, 1 << 16); + try testArgs(u512, u17, 0); + try testArgs(u512, u17, 1 << 0); + try testArgs(u512, u17, 1 << 16); + try testArgs(u1024, u17, 0); + try testArgs(u1024, u17, 1 << 0); + try testArgs(u1024, u17, 1 << 16); + + try testArgs(i8, i31, -1 << 30); + try testArgs(i8, i31, -1); + try testArgs(i8, i31, 0); + try testArgs(i16, i31, -1 << 30); + try testArgs(i16, i31, -1); + try testArgs(i16, i31, 0); + try testArgs(i32, i31, -1 << 30); + try testArgs(i32, i31, -1); + try testArgs(i32, i31, 0); + try testArgs(i64, i31, -1 << 30); + try testArgs(i64, i31, -1); + try testArgs(i64, i31, 0); + try testArgs(i128, i31, -1 << 30); + try testArgs(i128, i31, -1); + try testArgs(i128, i31, 0); + try testArgs(i256, i31, -1 << 30); + try testArgs(i256, i31, -1); + try testArgs(i256, i31, 0); + try testArgs(i512, i31, -1 << 30); + try testArgs(i512, i31, -1); + try testArgs(i512, i31, 0); + try testArgs(i1024, i31, -1 << 30); + try testArgs(i1024, i31, -1); + try testArgs(i1024, i31, 0); + try testArgs(u8, u31, 0); + try testArgs(u8, u31, 1 << 0); + try testArgs(u8, u31, 1 << 30); + try testArgs(u16, u31, 0); + try testArgs(u16, u31, 1 << 0); + try testArgs(u16, u31, 1 << 30); + try testArgs(u32, u31, 0); + try testArgs(u32, u31, 1 << 0); + try testArgs(u32, u31, 1 << 30); + try testArgs(u64, u31, 0); + try testArgs(u64, u31, 1 << 0); + try testArgs(u64, u31, 1 << 30); + try testArgs(u128, u31, 0); + try testArgs(u128, u31, 1 << 0); + try testArgs(u128, u31, 1 << 30); + try testArgs(u256, u31, 0); + try testArgs(u256, u31, 1 << 0); + try testArgs(u256, u31, 1 << 30); + try testArgs(u512, u31, 0); + try testArgs(u512, u31, 1 << 0); + try testArgs(u512, u31, 1 << 30); + try testArgs(u1024, u31, 0); + try testArgs(u1024, u31, 1 << 0); + try testArgs(u1024, u31, 1 << 30); + + try testArgs(i8, i32, -1 << 31); + try testArgs(i8, i32, -1); + try testArgs(i8, i32, 0); + try testArgs(i16, i32, -1 << 31); + try testArgs(i16, i32, -1); + try testArgs(i16, i32, 0); + try testArgs(i32, i32, -1 << 31); + try testArgs(i32, i32, -1); + try testArgs(i32, i32, 0); + try testArgs(i64, i32, -1 << 31); + try testArgs(i64, i32, -1); + try testArgs(i64, i32, 0); + try testArgs(i128, i32, -1 << 31); + try testArgs(i128, i32, -1); + try testArgs(i128, i32, 0); + try testArgs(i256, i32, -1 << 31); + try testArgs(i256, i32, -1); + try testArgs(i256, i32, 0); + try testArgs(i512, i32, -1 << 31); + try testArgs(i512, i32, -1); + try testArgs(i512, i32, 0); + try testArgs(i1024, i32, -1 << 31); + try testArgs(i1024, i32, -1); + try testArgs(i1024, i32, 0); + try testArgs(u8, u32, 0); + try testArgs(u8, u32, 1 << 0); + try testArgs(u8, u32, 1 << 31); + try testArgs(u16, u32, 0); + try testArgs(u16, u32, 1 << 0); + try testArgs(u16, u32, 1 << 31); + try testArgs(u32, u32, 0); + try testArgs(u32, u32, 1 << 0); + try testArgs(u32, u32, 1 << 31); + try testArgs(u64, u32, 0); + try testArgs(u64, u32, 1 << 0); + try testArgs(u64, u32, 1 << 31); + try testArgs(u128, u32, 0); + try testArgs(u128, u32, 1 << 0); + try testArgs(u128, u32, 1 << 31); + try testArgs(u256, u32, 0); + try testArgs(u256, u32, 1 << 0); + try testArgs(u256, u32, 1 << 31); + try testArgs(u512, u32, 0); + try testArgs(u512, u32, 1 << 0); + try testArgs(u512, u32, 1 << 31); + try testArgs(u1024, u32, 0); + try testArgs(u1024, u32, 1 << 0); + try testArgs(u1024, u32, 1 << 31); + + try testArgs(i8, i33, -1 << 32); + try testArgs(i8, i33, -1); + try testArgs(i8, i33, 0); + try testArgs(i16, i33, -1 << 32); + try testArgs(i16, i33, -1); + try testArgs(i16, i33, 0); + try testArgs(i32, i33, -1 << 32); + try testArgs(i32, i33, -1); + try testArgs(i32, i33, 0); + try testArgs(i64, i33, -1 << 32); + try testArgs(i64, i33, -1); + try testArgs(i64, i33, 0); + try testArgs(i128, i33, -1 << 32); + try testArgs(i128, i33, -1); + try testArgs(i128, i33, 0); + try testArgs(i256, i33, -1 << 32); + try testArgs(i256, i33, -1); + try testArgs(i256, i33, 0); + try testArgs(i512, i33, -1 << 32); + try testArgs(i512, i33, -1); + try testArgs(i512, i33, 0); + try testArgs(i1024, i33, -1 << 32); + try testArgs(i1024, i33, -1); + try testArgs(i1024, i33, 0); + try testArgs(u8, u33, 0); + try testArgs(u8, u33, 1 << 0); + try testArgs(u8, u33, 1 << 32); + try testArgs(u16, u33, 0); + try testArgs(u16, u33, 1 << 0); + try testArgs(u16, u33, 1 << 32); + try testArgs(u32, u33, 0); + try testArgs(u32, u33, 1 << 0); + try testArgs(u32, u33, 1 << 32); + try testArgs(u64, u33, 0); + try testArgs(u64, u33, 1 << 0); + try testArgs(u64, u33, 1 << 32); + try testArgs(u128, u33, 0); + try testArgs(u128, u33, 1 << 0); + try testArgs(u128, u33, 1 << 32); + try testArgs(u256, u33, 0); + try testArgs(u256, u33, 1 << 0); + try testArgs(u256, u33, 1 << 32); + try testArgs(u512, u33, 0); + try testArgs(u512, u33, 1 << 0); + try testArgs(u512, u33, 1 << 32); + try testArgs(u1024, u33, 0); + try testArgs(u1024, u33, 1 << 0); + try testArgs(u1024, u33, 1 << 32); + + try testArgs(i8, i63, -1 << 62); + try testArgs(i8, i63, -1); + try testArgs(i8, i63, 0); + try testArgs(i16, i63, -1 << 62); + try testArgs(i16, i63, -1); + try testArgs(i16, i63, 0); + try testArgs(i32, i63, -1 << 62); + try testArgs(i32, i63, -1); + try testArgs(i32, i63, 0); + try testArgs(i64, i63, -1 << 62); + try testArgs(i64, i63, -1); + try testArgs(i64, i63, 0); + try testArgs(i128, i63, -1 << 62); + try testArgs(i128, i63, -1); + try testArgs(i128, i63, 0); + try testArgs(i256, i63, -1 << 62); + try testArgs(i256, i63, -1); + try testArgs(i256, i63, 0); + try testArgs(i512, i63, -1 << 62); + try testArgs(i512, i63, -1); + try testArgs(i512, i63, 0); + try testArgs(i1024, i63, -1 << 62); + try testArgs(i1024, i63, -1); + try testArgs(i1024, i63, 0); + try testArgs(u8, u63, 0); + try testArgs(u8, u63, 1 << 0); + try testArgs(u8, u63, 1 << 62); + try testArgs(u16, u63, 0); + try testArgs(u16, u63, 1 << 0); + try testArgs(u16, u63, 1 << 62); + try testArgs(u32, u63, 0); + try testArgs(u32, u63, 1 << 0); + try testArgs(u32, u63, 1 << 62); + try testArgs(u64, u63, 0); + try testArgs(u64, u63, 1 << 0); + try testArgs(u64, u63, 1 << 62); + try testArgs(u128, u63, 0); + try testArgs(u128, u63, 1 << 0); + try testArgs(u128, u63, 1 << 62); + try testArgs(u256, u63, 0); + try testArgs(u256, u63, 1 << 0); + try testArgs(u256, u63, 1 << 62); + try testArgs(u512, u63, 0); + try testArgs(u512, u63, 1 << 0); + try testArgs(u512, u63, 1 << 62); + try testArgs(u1024, u63, 0); + try testArgs(u1024, u63, 1 << 0); + try testArgs(u1024, u63, 1 << 62); + + try testArgs(i8, i64, -1 << 63); + try testArgs(i8, i64, -1); + try testArgs(i8, i64, 0); + try testArgs(i16, i64, -1 << 63); + try testArgs(i16, i64, -1); + try testArgs(i16, i64, 0); + try testArgs(i32, i64, -1 << 63); + try testArgs(i32, i64, -1); + try testArgs(i32, i64, 0); + try testArgs(i64, i64, -1 << 63); + try testArgs(i64, i64, -1); + try testArgs(i64, i64, 0); + try testArgs(i128, i64, -1 << 63); + try testArgs(i128, i64, -1); + try testArgs(i128, i64, 0); + try testArgs(i256, i64, -1 << 63); + try testArgs(i256, i64, -1); + try testArgs(i256, i64, 0); + try testArgs(i512, i64, -1 << 63); + try testArgs(i512, i64, -1); + try testArgs(i512, i64, 0); + try testArgs(i1024, i64, -1 << 63); + try testArgs(i1024, i64, -1); + try testArgs(i1024, i64, 0); + try testArgs(u8, u64, 0); + try testArgs(u8, u64, 1 << 0); + try testArgs(u8, u64, 1 << 63); + try testArgs(u16, u64, 0); + try testArgs(u16, u64, 1 << 0); + try testArgs(u16, u64, 1 << 63); + try testArgs(u32, u64, 0); + try testArgs(u32, u64, 1 << 0); + try testArgs(u32, u64, 1 << 63); + try testArgs(u64, u64, 0); + try testArgs(u64, u64, 1 << 0); + try testArgs(u64, u64, 1 << 63); + try testArgs(u128, u64, 0); + try testArgs(u128, u64, 1 << 0); + try testArgs(u128, u64, 1 << 63); + try testArgs(u256, u64, 0); + try testArgs(u256, u64, 1 << 0); + try testArgs(u256, u64, 1 << 63); + try testArgs(u512, u64, 0); + try testArgs(u512, u64, 1 << 0); + try testArgs(u512, u64, 1 << 63); + try testArgs(u1024, u64, 0); + try testArgs(u1024, u64, 1 << 0); + try testArgs(u1024, u64, 1 << 63); + + try testArgs(i8, i65, -1 << 64); + try testArgs(i8, i65, -1); + try testArgs(i8, i65, 0); + try testArgs(i16, i65, -1 << 64); + try testArgs(i16, i65, -1); + try testArgs(i16, i65, 0); + try testArgs(i32, i65, -1 << 64); + try testArgs(i32, i65, -1); + try testArgs(i32, i65, 0); + try testArgs(i64, i65, -1 << 64); + try testArgs(i64, i65, -1); + try testArgs(i64, i65, 0); + try testArgs(i128, i65, -1 << 64); + try testArgs(i128, i65, -1); + try testArgs(i128, i65, 0); + try testArgs(i256, i65, -1 << 64); + try testArgs(i256, i65, -1); + try testArgs(i256, i65, 0); + try testArgs(i512, i65, -1 << 64); + try testArgs(i512, i65, -1); + try testArgs(i512, i65, 0); + try testArgs(i1024, i65, -1 << 64); + try testArgs(i1024, i65, -1); + try testArgs(i1024, i65, 0); + try testArgs(u8, u65, 0); + try testArgs(u8, u65, 1 << 0); + try testArgs(u8, u65, 1 << 64); + try testArgs(u16, u65, 0); + try testArgs(u16, u65, 1 << 0); + try testArgs(u16, u65, 1 << 64); + try testArgs(u32, u65, 0); + try testArgs(u32, u65, 1 << 0); + try testArgs(u32, u65, 1 << 64); + try testArgs(u64, u65, 0); + try testArgs(u64, u65, 1 << 0); + try testArgs(u64, u65, 1 << 64); + try testArgs(u128, u65, 0); + try testArgs(u128, u65, 1 << 0); + try testArgs(u128, u65, 1 << 64); + try testArgs(u256, u65, 0); + try testArgs(u256, u65, 1 << 0); + try testArgs(u256, u65, 1 << 64); + try testArgs(u512, u65, 0); + try testArgs(u512, u65, 1 << 0); + try testArgs(u512, u65, 1 << 64); + try testArgs(u1024, u65, 0); + try testArgs(u1024, u65, 1 << 0); + try testArgs(u1024, u65, 1 << 64); + + try testArgs(i8, i95, -1 << 94); + try testArgs(i8, i95, -1); + try testArgs(i8, i95, 0); + try testArgs(i16, i95, -1 << 94); + try testArgs(i16, i95, -1); + try testArgs(i16, i95, 0); + try testArgs(i32, i95, -1 << 94); + try testArgs(i32, i95, -1); + try testArgs(i32, i95, 0); + try testArgs(i64, i95, -1 << 94); + try testArgs(i64, i95, -1); + try testArgs(i64, i95, 0); + try testArgs(i128, i95, -1 << 94); + try testArgs(i128, i95, -1); + try testArgs(i128, i95, 0); + try testArgs(i256, i95, -1 << 94); + try testArgs(i256, i95, -1); + try testArgs(i256, i95, 0); + try testArgs(i512, i95, -1 << 94); + try testArgs(i512, i95, -1); + try testArgs(i512, i95, 0); + try testArgs(i1024, i95, -1 << 94); + try testArgs(i1024, i95, -1); + try testArgs(i1024, i95, 0); + try testArgs(u8, u95, 0); + try testArgs(u8, u95, 1 << 0); + try testArgs(u8, u95, 1 << 94); + try testArgs(u16, u95, 0); + try testArgs(u16, u95, 1 << 0); + try testArgs(u16, u95, 1 << 94); + try testArgs(u32, u95, 0); + try testArgs(u32, u95, 1 << 0); + try testArgs(u32, u95, 1 << 94); + try testArgs(u64, u95, 0); + try testArgs(u64, u95, 1 << 0); + try testArgs(u64, u95, 1 << 94); + try testArgs(u128, u95, 0); + try testArgs(u128, u95, 1 << 0); + try testArgs(u128, u95, 1 << 94); + try testArgs(u256, u95, 0); + try testArgs(u256, u95, 1 << 0); + try testArgs(u256, u95, 1 << 94); + try testArgs(u512, u95, 0); + try testArgs(u512, u95, 1 << 0); + try testArgs(u512, u95, 1 << 94); + try testArgs(u1024, u95, 0); + try testArgs(u1024, u95, 1 << 0); + try testArgs(u1024, u95, 1 << 94); + + try testArgs(i8, i97, -1 << 96); + try testArgs(i8, i97, -1); + try testArgs(i8, i97, 0); + try testArgs(i16, i97, -1 << 96); + try testArgs(i16, i97, -1); + try testArgs(i16, i97, 0); + try testArgs(i32, i97, -1 << 96); + try testArgs(i32, i97, -1); + try testArgs(i32, i97, 0); + try testArgs(i64, i97, -1 << 96); + try testArgs(i64, i97, -1); + try testArgs(i64, i97, 0); + try testArgs(i128, i97, -1 << 96); + try testArgs(i128, i97, -1); + try testArgs(i128, i97, 0); + try testArgs(i256, i97, -1 << 96); + try testArgs(i256, i97, -1); + try testArgs(i256, i97, 0); + try testArgs(i512, i97, -1 << 96); + try testArgs(i512, i97, -1); + try testArgs(i512, i97, 0); + try testArgs(i1024, i97, -1 << 96); + try testArgs(i1024, i97, -1); + try testArgs(i1024, i97, 0); + try testArgs(u8, u97, 0); + try testArgs(u8, u97, 1 << 0); + try testArgs(u8, u97, 1 << 96); + try testArgs(u16, u97, 0); + try testArgs(u16, u97, 1 << 0); + try testArgs(u16, u97, 1 << 96); + try testArgs(u32, u97, 0); + try testArgs(u32, u97, 1 << 0); + try testArgs(u32, u97, 1 << 96); + try testArgs(u64, u97, 0); + try testArgs(u64, u97, 1 << 0); + try testArgs(u64, u97, 1 << 96); + try testArgs(u128, u97, 0); + try testArgs(u128, u97, 1 << 0); + try testArgs(u128, u97, 1 << 96); + try testArgs(u256, u97, 0); + try testArgs(u256, u97, 1 << 0); + try testArgs(u256, u97, 1 << 96); + try testArgs(u512, u97, 0); + try testArgs(u512, u97, 1 << 0); + try testArgs(u512, u97, 1 << 96); + try testArgs(u1024, u97, 0); + try testArgs(u1024, u97, 1 << 0); + try testArgs(u1024, u97, 1 << 96); + + try testArgs(i8, i127, -1 << 126); + try testArgs(i8, i127, -1); + try testArgs(i8, i127, 0); + try testArgs(i16, i127, -1 << 126); + try testArgs(i16, i127, -1); + try testArgs(i16, i127, 0); + try testArgs(i32, i127, -1 << 126); + try testArgs(i32, i127, -1); + try testArgs(i32, i127, 0); + try testArgs(i64, i127, -1 << 126); + try testArgs(i64, i127, -1); + try testArgs(i64, i127, 0); + try testArgs(i128, i127, -1 << 126); + try testArgs(i128, i127, -1); + try testArgs(i128, i127, 0); + try testArgs(i256, i127, -1 << 126); + try testArgs(i256, i127, -1); + try testArgs(i256, i127, 0); + try testArgs(i512, i127, -1 << 126); + try testArgs(i512, i127, -1); + try testArgs(i512, i127, 0); + try testArgs(i1024, i127, -1 << 126); + try testArgs(i1024, i127, -1); + try testArgs(i1024, i127, 0); + try testArgs(u8, u127, 0); + try testArgs(u8, u127, 1 << 0); + try testArgs(u8, u127, 1 << 126); + try testArgs(u16, u127, 0); + try testArgs(u16, u127, 1 << 0); + try testArgs(u16, u127, 1 << 126); + try testArgs(u32, u127, 0); + try testArgs(u32, u127, 1 << 0); + try testArgs(u32, u127, 1 << 126); + try testArgs(u64, u127, 0); + try testArgs(u64, u127, 1 << 0); + try testArgs(u64, u127, 1 << 126); + try testArgs(u128, u127, 0); + try testArgs(u128, u127, 1 << 0); + try testArgs(u128, u127, 1 << 126); + try testArgs(u256, u127, 0); + try testArgs(u256, u127, 1 << 0); + try testArgs(u256, u127, 1 << 126); + try testArgs(u512, u127, 0); + try testArgs(u512, u127, 1 << 0); + try testArgs(u512, u127, 1 << 126); + try testArgs(u1024, u127, 0); + try testArgs(u1024, u127, 1 << 0); + try testArgs(u1024, u127, 1 << 126); + + try testArgs(i8, i128, -1 << 127); + try testArgs(i8, i128, -1); + try testArgs(i8, i128, 0); + try testArgs(i16, i128, -1 << 127); + try testArgs(i16, i128, -1); + try testArgs(i16, i128, 0); + try testArgs(i32, i128, -1 << 127); + try testArgs(i32, i128, -1); + try testArgs(i32, i128, 0); + try testArgs(i64, i128, -1 << 127); + try testArgs(i64, i128, -1); + try testArgs(i64, i128, 0); + try testArgs(i128, i128, -1 << 127); + try testArgs(i128, i128, -1); + try testArgs(i128, i128, 0); + try testArgs(i256, i128, -1 << 127); + try testArgs(i256, i128, -1); + try testArgs(i256, i128, 0); + try testArgs(i512, i128, -1 << 127); + try testArgs(i512, i128, -1); + try testArgs(i512, i128, 0); + try testArgs(i1024, i128, -1 << 127); + try testArgs(i1024, i128, -1); + try testArgs(i1024, i128, 0); + try testArgs(u8, u128, 0); + try testArgs(u8, u128, 1 << 0); + try testArgs(u8, u128, 1 << 127); + try testArgs(u16, u128, 0); + try testArgs(u16, u128, 1 << 0); + try testArgs(u16, u128, 1 << 127); + try testArgs(u32, u128, 0); + try testArgs(u32, u128, 1 << 0); + try testArgs(u32, u128, 1 << 127); + try testArgs(u64, u128, 0); + try testArgs(u64, u128, 1 << 0); + try testArgs(u64, u128, 1 << 127); + try testArgs(u128, u128, 0); + try testArgs(u128, u128, 1 << 0); + try testArgs(u128, u128, 1 << 127); + try testArgs(u256, u128, 0); + try testArgs(u256, u128, 1 << 0); + try testArgs(u256, u128, 1 << 127); + try testArgs(u512, u128, 0); + try testArgs(u512, u128, 1 << 0); + try testArgs(u512, u128, 1 << 127); + try testArgs(u1024, u128, 0); + try testArgs(u1024, u128, 1 << 0); + try testArgs(u1024, u128, 1 << 127); + + try testArgs(i8, i129, -1 << 128); + try testArgs(i8, i129, -1); + try testArgs(i8, i129, 0); + try testArgs(i16, i129, -1 << 128); + try testArgs(i16, i129, -1); + try testArgs(i16, i129, 0); + try testArgs(i32, i129, -1 << 128); + try testArgs(i32, i129, -1); + try testArgs(i32, i129, 0); + try testArgs(i64, i129, -1 << 128); + try testArgs(i64, i129, -1); + try testArgs(i64, i129, 0); + try testArgs(i128, i129, -1 << 128); + try testArgs(i128, i129, -1); + try testArgs(i128, i129, 0); + try testArgs(i256, i129, -1 << 128); + try testArgs(i256, i129, -1); + try testArgs(i256, i129, 0); + try testArgs(i512, i129, -1 << 128); + try testArgs(i512, i129, -1); + try testArgs(i512, i129, 0); + try testArgs(i1024, i129, -1 << 128); + try testArgs(i1024, i129, -1); + try testArgs(i1024, i129, 0); + try testArgs(u8, u129, 0); + try testArgs(u8, u129, 1 << 0); + try testArgs(u8, u129, 1 << 128); + try testArgs(u16, u129, 0); + try testArgs(u16, u129, 1 << 0); + try testArgs(u16, u129, 1 << 128); + try testArgs(u32, u129, 0); + try testArgs(u32, u129, 1 << 0); + try testArgs(u32, u129, 1 << 128); + try testArgs(u64, u129, 0); + try testArgs(u64, u129, 1 << 0); + try testArgs(u64, u129, 1 << 128); + try testArgs(u128, u129, 0); + try testArgs(u128, u129, 1 << 0); + try testArgs(u128, u129, 1 << 128); + try testArgs(u256, u129, 0); + try testArgs(u256, u129, 1 << 0); + try testArgs(u256, u129, 1 << 128); + try testArgs(u512, u129, 0); + try testArgs(u512, u129, 1 << 0); + try testArgs(u512, u129, 1 << 128); + try testArgs(u1024, u129, 0); + try testArgs(u1024, u129, 1 << 0); + try testArgs(u1024, u129, 1 << 128); + + try testArgs(i8, i255, -1 << 254); + try testArgs(i8, i255, -1); + try testArgs(i8, i255, 0); + try testArgs(i16, i255, -1 << 254); + try testArgs(i16, i255, -1); + try testArgs(i16, i255, 0); + try testArgs(i32, i255, -1 << 254); + try testArgs(i32, i255, -1); + try testArgs(i32, i255, 0); + try testArgs(i64, i255, -1 << 254); + try testArgs(i64, i255, -1); + try testArgs(i64, i255, 0); + try testArgs(i128, i255, -1 << 254); + try testArgs(i128, i255, -1); + try testArgs(i128, i255, 0); + try testArgs(i256, i255, -1 << 254); + try testArgs(i256, i255, -1); + try testArgs(i256, i255, 0); + try testArgs(i512, i255, -1 << 254); + try testArgs(i512, i255, -1); + try testArgs(i512, i255, 0); + try testArgs(i1024, i255, -1 << 254); + try testArgs(i1024, i255, -1); + try testArgs(i1024, i255, 0); + try testArgs(u8, u255, 0); + try testArgs(u8, u255, 1 << 0); + try testArgs(u8, u255, 1 << 254); + try testArgs(u16, u255, 0); + try testArgs(u16, u255, 1 << 0); + try testArgs(u16, u255, 1 << 254); + try testArgs(u32, u255, 0); + try testArgs(u32, u255, 1 << 0); + try testArgs(u32, u255, 1 << 254); + try testArgs(u64, u255, 0); + try testArgs(u64, u255, 1 << 0); + try testArgs(u64, u255, 1 << 254); + try testArgs(u128, u255, 0); + try testArgs(u128, u255, 1 << 0); + try testArgs(u128, u255, 1 << 254); + try testArgs(u256, u255, 0); + try testArgs(u256, u255, 1 << 0); + try testArgs(u256, u255, 1 << 254); + try testArgs(u512, u255, 0); + try testArgs(u512, u255, 1 << 0); + try testArgs(u512, u255, 1 << 254); + try testArgs(u1024, u255, 0); + try testArgs(u1024, u255, 1 << 0); + try testArgs(u1024, u255, 1 << 254); + + try testArgs(i8, i256, -1 << 255); + try testArgs(i8, i256, -1); + try testArgs(i8, i256, 0); + try testArgs(i16, i256, -1 << 255); + try testArgs(i16, i256, -1); + try testArgs(i16, i256, 0); + try testArgs(i32, i256, -1 << 255); + try testArgs(i32, i256, -1); + try testArgs(i32, i256, 0); + try testArgs(i64, i256, -1 << 255); + try testArgs(i64, i256, -1); + try testArgs(i64, i256, 0); + try testArgs(i128, i256, -1 << 255); + try testArgs(i128, i256, -1); + try testArgs(i128, i256, 0); + try testArgs(i256, i256, -1 << 255); + try testArgs(i256, i256, -1); + try testArgs(i256, i256, 0); + try testArgs(i512, i256, -1 << 255); + try testArgs(i512, i256, -1); + try testArgs(i512, i256, 0); + try testArgs(i1024, i256, -1 << 255); + try testArgs(i1024, i256, -1); + try testArgs(i1024, i256, 0); + try testArgs(u8, u256, 0); + try testArgs(u8, u256, 1 << 0); + try testArgs(u8, u256, 1 << 255); + try testArgs(u16, u256, 0); + try testArgs(u16, u256, 1 << 0); + try testArgs(u16, u256, 1 << 255); + try testArgs(u32, u256, 0); + try testArgs(u32, u256, 1 << 0); + try testArgs(u32, u256, 1 << 255); + try testArgs(u64, u256, 0); + try testArgs(u64, u256, 1 << 0); + try testArgs(u64, u256, 1 << 255); + try testArgs(u128, u256, 0); + try testArgs(u128, u256, 1 << 0); + try testArgs(u128, u256, 1 << 255); + try testArgs(u256, u256, 0); + try testArgs(u256, u256, 1 << 0); + try testArgs(u256, u256, 1 << 255); + try testArgs(u512, u256, 0); + try testArgs(u512, u256, 1 << 0); + try testArgs(u512, u256, 1 << 255); + try testArgs(u1024, u256, 0); + try testArgs(u1024, u256, 1 << 0); + try testArgs(u1024, u256, 1 << 255); + + try testArgs(i8, i257, -1 << 256); + try testArgs(i8, i257, -1); + try testArgs(i8, i257, 0); + try testArgs(i16, i257, -1 << 256); + try testArgs(i16, i257, -1); + try testArgs(i16, i257, 0); + try testArgs(i32, i257, -1 << 256); + try testArgs(i32, i257, -1); + try testArgs(i32, i257, 0); + try testArgs(i64, i257, -1 << 256); + try testArgs(i64, i257, -1); + try testArgs(i64, i257, 0); + try testArgs(i128, i257, -1 << 256); + try testArgs(i128, i257, -1); + try testArgs(i128, i257, 0); + try testArgs(i256, i257, -1 << 256); + try testArgs(i256, i257, -1); + try testArgs(i256, i257, 0); + try testArgs(i512, i257, -1 << 256); + try testArgs(i512, i257, -1); + try testArgs(i512, i257, 0); + try testArgs(i1024, i257, -1 << 256); + try testArgs(i1024, i257, -1); + try testArgs(i1024, i257, 0); + try testArgs(u8, u257, 0); + try testArgs(u8, u257, 1 << 0); + try testArgs(u8, u257, 1 << 256); + try testArgs(u16, u257, 0); + try testArgs(u16, u257, 1 << 0); + try testArgs(u16, u257, 1 << 256); + try testArgs(u32, u257, 0); + try testArgs(u32, u257, 1 << 0); + try testArgs(u32, u257, 1 << 256); + try testArgs(u64, u257, 0); + try testArgs(u64, u257, 1 << 0); + try testArgs(u64, u257, 1 << 256); + try testArgs(u128, u257, 0); + try testArgs(u128, u257, 1 << 0); + try testArgs(u128, u257, 1 << 256); + try testArgs(u256, u257, 0); + try testArgs(u256, u257, 1 << 0); + try testArgs(u256, u257, 1 << 256); + try testArgs(u512, u257, 0); + try testArgs(u512, u257, 1 << 0); + try testArgs(u512, u257, 1 << 256); + try testArgs(u1024, u257, 0); + try testArgs(u1024, u257, 1 << 0); + try testArgs(u1024, u257, 1 << 256); + + try testArgs(i8, i511, -1 << 510); + try testArgs(i8, i511, -1); + try testArgs(i8, i511, 0); + try testArgs(i16, i511, -1 << 510); + try testArgs(i16, i511, -1); + try testArgs(i16, i511, 0); + try testArgs(i32, i511, -1 << 510); + try testArgs(i32, i511, -1); + try testArgs(i32, i511, 0); + try testArgs(i64, i511, -1 << 510); + try testArgs(i64, i511, -1); + try testArgs(i64, i511, 0); + try testArgs(i128, i511, -1 << 510); + try testArgs(i128, i511, -1); + try testArgs(i128, i511, 0); + try testArgs(i256, i511, -1 << 510); + try testArgs(i256, i511, -1); + try testArgs(i256, i511, 0); + try testArgs(i512, i511, -1 << 510); + try testArgs(i512, i511, -1); + try testArgs(i512, i511, 0); + try testArgs(i1024, i511, -1 << 510); + try testArgs(i1024, i511, -1); + try testArgs(i1024, i511, 0); + try testArgs(u8, u511, 0); + try testArgs(u8, u511, 1 << 0); + try testArgs(u8, u511, 1 << 510); + try testArgs(u16, u511, 0); + try testArgs(u16, u511, 1 << 0); + try testArgs(u16, u511, 1 << 510); + try testArgs(u32, u511, 0); + try testArgs(u32, u511, 1 << 0); + try testArgs(u32, u511, 1 << 510); + try testArgs(u64, u511, 0); + try testArgs(u64, u511, 1 << 0); + try testArgs(u64, u511, 1 << 510); + try testArgs(u128, u511, 0); + try testArgs(u128, u511, 1 << 0); + try testArgs(u128, u511, 1 << 510); + try testArgs(u256, u511, 0); + try testArgs(u256, u511, 1 << 0); + try testArgs(u256, u511, 1 << 510); + try testArgs(u512, u511, 0); + try testArgs(u512, u511, 1 << 0); + try testArgs(u512, u511, 1 << 510); + try testArgs(u1024, u511, 0); + try testArgs(u1024, u511, 1 << 0); + try testArgs(u1024, u511, 1 << 510); + + try testArgs(i8, i512, -1 << 511); + try testArgs(i8, i512, -1); + try testArgs(i8, i512, 0); + try testArgs(i16, i512, -1 << 511); + try testArgs(i16, i512, -1); + try testArgs(i16, i512, 0); + try testArgs(i32, i512, -1 << 511); + try testArgs(i32, i512, -1); + try testArgs(i32, i512, 0); + try testArgs(i64, i512, -1 << 511); + try testArgs(i64, i512, -1); + try testArgs(i64, i512, 0); + try testArgs(i128, i512, -1 << 511); + try testArgs(i128, i512, -1); + try testArgs(i128, i512, 0); + try testArgs(i256, i512, -1 << 511); + try testArgs(i256, i512, -1); + try testArgs(i256, i512, 0); + try testArgs(i512, i512, -1 << 511); + try testArgs(i512, i512, -1); + try testArgs(i512, i512, 0); + try testArgs(i1024, i512, -1 << 511); + try testArgs(i1024, i512, -1); + try testArgs(i1024, i512, 0); + try testArgs(u8, u512, 0); + try testArgs(u8, u512, 1 << 0); + try testArgs(u8, u512, 1 << 511); + try testArgs(u16, u512, 0); + try testArgs(u16, u512, 1 << 0); + try testArgs(u16, u512, 1 << 511); + try testArgs(u32, u512, 0); + try testArgs(u32, u512, 1 << 0); + try testArgs(u32, u512, 1 << 511); + try testArgs(u64, u512, 0); + try testArgs(u64, u512, 1 << 0); + try testArgs(u64, u512, 1 << 511); + try testArgs(u128, u512, 0); + try testArgs(u128, u512, 1 << 0); + try testArgs(u128, u512, 1 << 511); + try testArgs(u256, u512, 0); + try testArgs(u256, u512, 1 << 0); + try testArgs(u256, u512, 1 << 511); + try testArgs(u512, u512, 0); + try testArgs(u512, u512, 1 << 0); + try testArgs(u512, u512, 1 << 511); + try testArgs(u1024, u512, 0); + try testArgs(u1024, u512, 1 << 0); + try testArgs(u1024, u512, 1 << 511); + + try testArgs(i8, i513, -1 << 512); + try testArgs(i8, i513, -1); + try testArgs(i8, i513, 0); + try testArgs(i16, i513, -1 << 512); + try testArgs(i16, i513, -1); + try testArgs(i16, i513, 0); + try testArgs(i32, i513, -1 << 512); + try testArgs(i32, i513, -1); + try testArgs(i32, i513, 0); + try testArgs(i64, i513, -1 << 512); + try testArgs(i64, i513, -1); + try testArgs(i64, i513, 0); + try testArgs(i128, i513, -1 << 512); + try testArgs(i128, i513, -1); + try testArgs(i128, i513, 0); + try testArgs(i256, i513, -1 << 512); + try testArgs(i256, i513, -1); + try testArgs(i256, i513, 0); + try testArgs(i512, i513, -1 << 512); + try testArgs(i512, i513, -1); + try testArgs(i512, i513, 0); + try testArgs(i1024, i513, -1 << 512); + try testArgs(i1024, i513, -1); + try testArgs(i1024, i513, 0); + try testArgs(u8, u513, 0); + try testArgs(u8, u513, 1 << 0); + try testArgs(u8, u513, 1 << 512); + try testArgs(u16, u513, 0); + try testArgs(u16, u513, 1 << 0); + try testArgs(u16, u513, 1 << 512); + try testArgs(u32, u513, 0); + try testArgs(u32, u513, 1 << 0); + try testArgs(u32, u513, 1 << 512); + try testArgs(u64, u513, 0); + try testArgs(u64, u513, 1 << 0); + try testArgs(u64, u513, 1 << 512); + try testArgs(u128, u513, 0); + try testArgs(u128, u513, 1 << 0); + try testArgs(u128, u513, 1 << 512); + try testArgs(u256, u513, 0); + try testArgs(u256, u513, 1 << 0); + try testArgs(u256, u513, 1 << 512); + try testArgs(u512, u513, 0); + try testArgs(u512, u513, 1 << 0); + try testArgs(u512, u513, 1 << 512); + try testArgs(u1024, u513, 0); + try testArgs(u1024, u513, 1 << 0); + try testArgs(u1024, u513, 1 << 512); + + try testArgs(i8, i1023, -1 << 1022); + try testArgs(i8, i1023, -1); + try testArgs(i8, i1023, 0); + try testArgs(i16, i1023, -1 << 1022); + try testArgs(i16, i1023, -1); + try testArgs(i16, i1023, 0); + try testArgs(i32, i1023, -1 << 1022); + try testArgs(i32, i1023, -1); + try testArgs(i32, i1023, 0); + try testArgs(i64, i1023, -1 << 1022); + try testArgs(i64, i1023, -1); + try testArgs(i64, i1023, 0); + try testArgs(i128, i1023, -1 << 1022); + try testArgs(i128, i1023, -1); + try testArgs(i128, i1023, 0); + try testArgs(i256, i1023, -1 << 1022); + try testArgs(i256, i1023, -1); + try testArgs(i256, i1023, 0); + try testArgs(i512, i1023, -1 << 1022); + try testArgs(i512, i1023, -1); + try testArgs(i512, i1023, 0); + try testArgs(i1024, i1023, -1 << 1022); + try testArgs(i1024, i1023, -1); + try testArgs(i1024, i1023, 0); + try testArgs(u8, u1023, 0); + try testArgs(u8, u1023, 1 << 0); + try testArgs(u8, u1023, 1 << 1022); + try testArgs(u16, u1023, 0); + try testArgs(u16, u1023, 1 << 0); + try testArgs(u16, u1023, 1 << 1022); + try testArgs(u32, u1023, 0); + try testArgs(u32, u1023, 1 << 0); + try testArgs(u32, u1023, 1 << 1022); + try testArgs(u64, u1023, 0); + try testArgs(u64, u1023, 1 << 0); + try testArgs(u64, u1023, 1 << 1022); + try testArgs(u128, u1023, 0); + try testArgs(u128, u1023, 1 << 0); + try testArgs(u128, u1023, 1 << 1022); + try testArgs(u256, u1023, 0); + try testArgs(u256, u1023, 1 << 0); + try testArgs(u256, u1023, 1 << 1022); + try testArgs(u512, u1023, 0); + try testArgs(u512, u1023, 1 << 0); + try testArgs(u512, u1023, 1 << 1022); + try testArgs(u1024, u1023, 0); + try testArgs(u1024, u1023, 1 << 0); + try testArgs(u1024, u1023, 1 << 1022); + + try testArgs(i8, i1024, -1 << 1023); + try testArgs(i8, i1024, -1); + try testArgs(i8, i1024, 0); + try testArgs(i16, i1024, -1 << 1023); + try testArgs(i16, i1024, -1); + try testArgs(i16, i1024, 0); + try testArgs(i32, i1024, -1 << 1023); + try testArgs(i32, i1024, -1); + try testArgs(i32, i1024, 0); + try testArgs(i64, i1024, -1 << 1023); + try testArgs(i64, i1024, -1); + try testArgs(i64, i1024, 0); + try testArgs(i128, i1024, -1 << 1023); + try testArgs(i128, i1024, -1); + try testArgs(i128, i1024, 0); + try testArgs(i256, i1024, -1 << 1023); + try testArgs(i256, i1024, -1); + try testArgs(i256, i1024, 0); + try testArgs(i512, i1024, -1 << 1023); + try testArgs(i512, i1024, -1); + try testArgs(i512, i1024, 0); + try testArgs(i1024, i1024, -1 << 1023); + try testArgs(i1024, i1024, -1); + try testArgs(i1024, i1024, 0); + try testArgs(u8, u1024, 0); + try testArgs(u8, u1024, 1 << 0); + try testArgs(u8, u1024, 1 << 1023); + try testArgs(u16, u1024, 0); + try testArgs(u16, u1024, 1 << 0); + try testArgs(u16, u1024, 1 << 1023); + try testArgs(u32, u1024, 0); + try testArgs(u32, u1024, 1 << 0); + try testArgs(u32, u1024, 1 << 1023); + try testArgs(u64, u1024, 0); + try testArgs(u64, u1024, 1 << 0); + try testArgs(u64, u1024, 1 << 1023); + try testArgs(u128, u1024, 0); + try testArgs(u128, u1024, 1 << 0); + try testArgs(u128, u1024, 1 << 1023); + try testArgs(u256, u1024, 0); + try testArgs(u256, u1024, 1 << 0); + try testArgs(u256, u1024, 1 << 1023); + try testArgs(u512, u1024, 0); + try testArgs(u512, u1024, 1 << 0); + try testArgs(u512, u1024, 1 << 1023); + try testArgs(u1024, u1024, 0); + try testArgs(u1024, u1024, 1 << 0); + try testArgs(u1024, u1024, 1 << 1023); + + try testArgs(i8, i1025, -1 << 1024); + try testArgs(i8, i1025, -1); + try testArgs(i8, i1025, 0); + try testArgs(i16, i1025, -1 << 1024); + try testArgs(i16, i1025, -1); + try testArgs(i16, i1025, 0); + try testArgs(i32, i1025, -1 << 1024); + try testArgs(i32, i1025, -1); + try testArgs(i32, i1025, 0); + try testArgs(i64, i1025, -1 << 1024); + try testArgs(i64, i1025, -1); + try testArgs(i64, i1025, 0); + try testArgs(i128, i1025, -1 << 1024); + try testArgs(i128, i1025, -1); + try testArgs(i128, i1025, 0); + try testArgs(i256, i1025, -1 << 1024); + try testArgs(i256, i1025, -1); + try testArgs(i256, i1025, 0); + try testArgs(i512, i1025, -1 << 1024); + try testArgs(i512, i1025, -1); + try testArgs(i512, i1025, 0); + try testArgs(i1024, i1025, -1 << 1024); + try testArgs(i1024, i1025, -1); + try testArgs(i1024, i1025, 0); + try testArgs(u8, u1025, 0); + try testArgs(u8, u1025, 1 << 0); + try testArgs(u8, u1025, 1 << 1024); + try testArgs(u16, u1025, 0); + try testArgs(u16, u1025, 1 << 0); + try testArgs(u16, u1025, 1 << 1024); + try testArgs(u32, u1025, 0); + try testArgs(u32, u1025, 1 << 0); + try testArgs(u32, u1025, 1 << 1024); + try testArgs(u64, u1025, 0); + try testArgs(u64, u1025, 1 << 0); + try testArgs(u64, u1025, 1 << 1024); + try testArgs(u128, u1025, 0); + try testArgs(u128, u1025, 1 << 0); + try testArgs(u128, u1025, 1 << 1024); + try testArgs(u256, u1025, 0); + try testArgs(u256, u1025, 1 << 0); + try testArgs(u256, u1025, 1 << 1024); + try testArgs(u512, u1025, 0); + try testArgs(u512, u1025, 1 << 0); + try testArgs(u512, u1025, 1 << 1024); + try testArgs(u1024, u1025, 0); + try testArgs(u1024, u1025, 1 << 0); + try testArgs(u1024, u1025, 1 << 1024); + } + fn testInts() !void { + try testSameSignednessInts(); + + try testArgs(u8, i1, -1); + try testArgs(u8, i1, 0); + try testArgs(u16, i1, -1); + try testArgs(u16, i1, 0); + try testArgs(u32, i1, -1); + try testArgs(u32, i1, 0); + try testArgs(u64, i1, -1); + try testArgs(u64, i1, 0); + try testArgs(u128, i1, -1); + try testArgs(u128, i1, 0); + try testArgs(u256, i1, -1); + try testArgs(u256, i1, 0); + try testArgs(u512, i1, -1); + try testArgs(u512, i1, 0); + try testArgs(u1024, i1, -1); + try testArgs(u1024, i1, 0); + try testArgs(i8, u1, 0); + try testArgs(i8, u1, 1 << 0); + try testArgs(i16, u1, 0); + try testArgs(i16, u1, 1 << 0); + try testArgs(i32, u1, 0); + try testArgs(i32, u1, 1 << 0); + try testArgs(i64, u1, 0); + try testArgs(i64, u1, 1 << 0); + try testArgs(i128, u1, 0); + try testArgs(i128, u1, 1 << 0); + try testArgs(i256, u1, 0); + try testArgs(i256, u1, 1 << 0); + try testArgs(i512, u1, 0); + try testArgs(i512, u1, 1 << 0); + try testArgs(i1024, u1, 0); + try testArgs(i1024, u1, 1 << 0); + + try testArgs(u8, i2, -1 << 1); + try testArgs(u8, i2, -1); + try testArgs(u8, i2, 0); + try testArgs(u16, i2, -1 << 1); + try testArgs(u16, i2, -1); + try testArgs(u16, i2, 0); + try testArgs(u32, i2, -1 << 1); + try testArgs(u32, i2, -1); + try testArgs(u32, i2, 0); + try testArgs(u64, i2, -1 << 1); + try testArgs(u64, i2, -1); + try testArgs(u64, i2, 0); + try testArgs(u128, i2, -1 << 1); + try testArgs(u128, i2, -1); + try testArgs(u128, i2, 0); + try testArgs(u256, i2, -1 << 1); + try testArgs(u256, i2, -1); + try testArgs(u256, i2, 0); + try testArgs(u512, i2, -1 << 1); + try testArgs(u512, i2, -1); + try testArgs(u512, i2, 0); + try testArgs(u1024, i2, -1 << 1); + try testArgs(u1024, i2, -1); + try testArgs(u1024, i2, 0); + try testArgs(i8, u2, 0); + try testArgs(i8, u2, 1 << 0); + try testArgs(i8, u2, 1 << 1); + try testArgs(i16, u2, 0); + try testArgs(i16, u2, 1 << 0); + try testArgs(i16, u2, 1 << 1); + try testArgs(i32, u2, 0); + try testArgs(i32, u2, 1 << 0); + try testArgs(i32, u2, 1 << 1); + try testArgs(i64, u2, 0); + try testArgs(i64, u2, 1 << 0); + try testArgs(i64, u2, 1 << 1); + try testArgs(i128, u2, 0); + try testArgs(i128, u2, 1 << 0); + try testArgs(i128, u2, 1 << 1); + try testArgs(i256, u2, 0); + try testArgs(i256, u2, 1 << 0); + try testArgs(i256, u2, 1 << 1); + try testArgs(i512, u2, 0); + try testArgs(i512, u2, 1 << 0); + try testArgs(i512, u2, 1 << 1); + try testArgs(i1024, u2, 0); + try testArgs(i1024, u2, 1 << 0); + try testArgs(i1024, u2, 1 << 1); + + try testArgs(u8, i3, -1 << 2); + try testArgs(u8, i3, -1); + try testArgs(u8, i3, 0); + try testArgs(u16, i3, -1 << 2); + try testArgs(u16, i3, -1); + try testArgs(u16, i3, 0); + try testArgs(u32, i3, -1 << 2); + try testArgs(u32, i3, -1); + try testArgs(u32, i3, 0); + try testArgs(u64, i3, -1 << 2); + try testArgs(u64, i3, -1); + try testArgs(u64, i3, 0); + try testArgs(u128, i3, -1 << 2); + try testArgs(u128, i3, -1); + try testArgs(u128, i3, 0); + try testArgs(u256, i3, -1 << 2); + try testArgs(u256, i3, -1); + try testArgs(u256, i3, 0); + try testArgs(u512, i3, -1 << 2); + try testArgs(u512, i3, -1); + try testArgs(u512, i3, 0); + try testArgs(u1024, i3, -1 << 2); + try testArgs(u1024, i3, -1); + try testArgs(u1024, i3, 0); + try testArgs(i8, u3, 0); + try testArgs(i8, u3, 1 << 0); + try testArgs(i8, u3, 1 << 2); + try testArgs(i16, u3, 0); + try testArgs(i16, u3, 1 << 0); + try testArgs(i16, u3, 1 << 2); + try testArgs(i32, u3, 0); + try testArgs(i32, u3, 1 << 0); + try testArgs(i32, u3, 1 << 2); + try testArgs(i64, u3, 0); + try testArgs(i64, u3, 1 << 0); + try testArgs(i64, u3, 1 << 2); + try testArgs(i128, u3, 0); + try testArgs(i128, u3, 1 << 0); + try testArgs(i128, u3, 1 << 2); + try testArgs(i256, u3, 0); + try testArgs(i256, u3, 1 << 0); + try testArgs(i256, u3, 1 << 2); + try testArgs(i512, u3, 0); + try testArgs(i512, u3, 1 << 0); + try testArgs(i512, u3, 1 << 2); + try testArgs(i1024, u3, 0); + try testArgs(i1024, u3, 1 << 0); + try testArgs(i1024, u3, 1 << 2); + + try testArgs(u8, i4, -1 << 3); + try testArgs(u8, i4, -1); + try testArgs(u8, i4, 0); + try testArgs(u16, i4, -1 << 3); + try testArgs(u16, i4, -1); + try testArgs(u16, i4, 0); + try testArgs(u32, i4, -1 << 3); + try testArgs(u32, i4, -1); + try testArgs(u32, i4, 0); + try testArgs(u64, i4, -1 << 3); + try testArgs(u64, i4, -1); + try testArgs(u64, i4, 0); + try testArgs(u128, i4, -1 << 3); + try testArgs(u128, i4, -1); + try testArgs(u128, i4, 0); + try testArgs(u256, i4, -1 << 3); + try testArgs(u256, i4, -1); + try testArgs(u256, i4, 0); + try testArgs(u512, i4, -1 << 3); + try testArgs(u512, i4, -1); + try testArgs(u512, i4, 0); + try testArgs(u1024, i4, -1 << 3); + try testArgs(u1024, i4, -1); + try testArgs(u1024, i4, 0); + try testArgs(i8, u4, 0); + try testArgs(i8, u4, 1 << 0); + try testArgs(i8, u4, 1 << 3); + try testArgs(i16, u4, 0); + try testArgs(i16, u4, 1 << 0); + try testArgs(i16, u4, 1 << 3); + try testArgs(i32, u4, 0); + try testArgs(i32, u4, 1 << 0); + try testArgs(i32, u4, 1 << 3); + try testArgs(i64, u4, 0); + try testArgs(i64, u4, 1 << 0); + try testArgs(i64, u4, 1 << 3); + try testArgs(i128, u4, 0); + try testArgs(i128, u4, 1 << 0); + try testArgs(i128, u4, 1 << 3); + try testArgs(i256, u4, 0); + try testArgs(i256, u4, 1 << 0); + try testArgs(i256, u4, 1 << 3); + try testArgs(i512, u4, 0); + try testArgs(i512, u4, 1 << 0); + try testArgs(i512, u4, 1 << 3); + try testArgs(i1024, u4, 0); + try testArgs(i1024, u4, 1 << 0); + try testArgs(i1024, u4, 1 << 3); + + try testArgs(u8, i5, -1 << 4); + try testArgs(u8, i5, -1); + try testArgs(u8, i5, 0); + try testArgs(u16, i5, -1 << 4); + try testArgs(u16, i5, -1); + try testArgs(u16, i5, 0); + try testArgs(u32, i5, -1 << 4); + try testArgs(u32, i5, -1); + try testArgs(u32, i5, 0); + try testArgs(u64, i5, -1 << 4); + try testArgs(u64, i5, -1); + try testArgs(u64, i5, 0); + try testArgs(u128, i5, -1 << 4); + try testArgs(u128, i5, -1); + try testArgs(u128, i5, 0); + try testArgs(u256, i5, -1 << 4); + try testArgs(u256, i5, -1); + try testArgs(u256, i5, 0); + try testArgs(u512, i5, -1 << 4); + try testArgs(u512, i5, -1); + try testArgs(u512, i5, 0); + try testArgs(u1024, i5, -1 << 4); + try testArgs(u1024, i5, -1); + try testArgs(u1024, i5, 0); + try testArgs(i8, u5, 0); + try testArgs(i8, u5, 1 << 0); + try testArgs(i8, u5, 1 << 4); + try testArgs(i16, u5, 0); + try testArgs(i16, u5, 1 << 0); + try testArgs(i16, u5, 1 << 4); + try testArgs(i32, u5, 0); + try testArgs(i32, u5, 1 << 0); + try testArgs(i32, u5, 1 << 4); + try testArgs(i64, u5, 0); + try testArgs(i64, u5, 1 << 0); + try testArgs(i64, u5, 1 << 4); + try testArgs(i128, u5, 0); + try testArgs(i128, u5, 1 << 0); + try testArgs(i128, u5, 1 << 4); + try testArgs(i256, u5, 0); + try testArgs(i256, u5, 1 << 0); + try testArgs(i256, u5, 1 << 4); + try testArgs(i512, u5, 0); + try testArgs(i512, u5, 1 << 0); + try testArgs(i512, u5, 1 << 4); + try testArgs(i1024, u5, 0); + try testArgs(i1024, u5, 1 << 0); + try testArgs(i1024, u5, 1 << 4); + + try testArgs(u8, i7, -1 << 6); + try testArgs(u8, i7, -1); + try testArgs(u8, i7, 0); + try testArgs(u16, i7, -1 << 6); + try testArgs(u16, i7, -1); + try testArgs(u16, i7, 0); + try testArgs(u32, i7, -1 << 6); + try testArgs(u32, i7, -1); + try testArgs(u32, i7, 0); + try testArgs(u64, i7, -1 << 6); + try testArgs(u64, i7, -1); + try testArgs(u64, i7, 0); + try testArgs(u128, i7, -1 << 6); + try testArgs(u128, i7, -1); + try testArgs(u128, i7, 0); + try testArgs(u256, i7, -1 << 6); + try testArgs(u256, i7, -1); + try testArgs(u256, i7, 0); + try testArgs(u512, i7, -1 << 6); + try testArgs(u512, i7, -1); + try testArgs(u512, i7, 0); + try testArgs(u1024, i7, -1 << 6); + try testArgs(u1024, i7, -1); + try testArgs(u1024, i7, 0); + try testArgs(i8, u7, 0); + try testArgs(i8, u7, 1 << 0); + try testArgs(i8, u7, 1 << 6); + try testArgs(i16, u7, 0); + try testArgs(i16, u7, 1 << 0); + try testArgs(i16, u7, 1 << 6); + try testArgs(i32, u7, 0); + try testArgs(i32, u7, 1 << 0); + try testArgs(i32, u7, 1 << 6); + try testArgs(i64, u7, 0); + try testArgs(i64, u7, 1 << 0); + try testArgs(i64, u7, 1 << 6); + try testArgs(i128, u7, 0); + try testArgs(i128, u7, 1 << 0); + try testArgs(i128, u7, 1 << 6); + try testArgs(i256, u7, 0); + try testArgs(i256, u7, 1 << 0); + try testArgs(i256, u7, 1 << 6); + try testArgs(i512, u7, 0); + try testArgs(i512, u7, 1 << 0); + try testArgs(i512, u7, 1 << 6); + try testArgs(i1024, u7, 0); + try testArgs(i1024, u7, 1 << 0); + try testArgs(i1024, u7, 1 << 6); + + try testArgs(u8, i8, -1 << 7); + try testArgs(u8, i8, -1); + try testArgs(u8, i8, 0); + try testArgs(u16, i8, -1 << 7); + try testArgs(u16, i8, -1); + try testArgs(u16, i8, 0); + try testArgs(u32, i8, -1 << 7); + try testArgs(u32, i8, -1); + try testArgs(u32, i8, 0); + try testArgs(u64, i8, -1 << 7); + try testArgs(u64, i8, -1); + try testArgs(u64, i8, 0); + try testArgs(u128, i8, -1 << 7); + try testArgs(u128, i8, -1); + try testArgs(u128, i8, 0); + try testArgs(u256, i8, -1 << 7); + try testArgs(u256, i8, -1); + try testArgs(u256, i8, 0); + try testArgs(u512, i8, -1 << 7); + try testArgs(u512, i8, -1); + try testArgs(u512, i8, 0); + try testArgs(u1024, i8, -1 << 7); + try testArgs(u1024, i8, -1); + try testArgs(u1024, i8, 0); + try testArgs(i8, u8, 0); + try testArgs(i8, u8, 1 << 0); + try testArgs(i8, u8, 1 << 7); + try testArgs(i16, u8, 0); + try testArgs(i16, u8, 1 << 0); + try testArgs(i16, u8, 1 << 7); + try testArgs(i32, u8, 0); + try testArgs(i32, u8, 1 << 0); + try testArgs(i32, u8, 1 << 7); + try testArgs(i64, u8, 0); + try testArgs(i64, u8, 1 << 0); + try testArgs(i64, u8, 1 << 7); + try testArgs(i128, u8, 0); + try testArgs(i128, u8, 1 << 0); + try testArgs(i128, u8, 1 << 7); + try testArgs(i256, u8, 0); + try testArgs(i256, u8, 1 << 0); + try testArgs(i256, u8, 1 << 7); + try testArgs(i512, u8, 0); + try testArgs(i512, u8, 1 << 0); + try testArgs(i512, u8, 1 << 7); + try testArgs(i1024, u8, 0); + try testArgs(i1024, u8, 1 << 0); + try testArgs(i1024, u8, 1 << 7); + + try testArgs(u8, i9, -1 << 8); + try testArgs(u8, i9, -1); + try testArgs(u8, i9, 0); + try testArgs(u16, i9, -1 << 8); + try testArgs(u16, i9, -1); + try testArgs(u16, i9, 0); + try testArgs(u32, i9, -1 << 8); + try testArgs(u32, i9, -1); + try testArgs(u32, i9, 0); + try testArgs(u64, i9, -1 << 8); + try testArgs(u64, i9, -1); + try testArgs(u64, i9, 0); + try testArgs(u128, i9, -1 << 8); + try testArgs(u128, i9, -1); + try testArgs(u128, i9, 0); + try testArgs(u256, i9, -1 << 8); + try testArgs(u256, i9, -1); + try testArgs(u256, i9, 0); + try testArgs(u512, i9, -1 << 8); + try testArgs(u512, i9, -1); + try testArgs(u512, i9, 0); + try testArgs(u1024, i9, -1 << 8); + try testArgs(u1024, i9, -1); + try testArgs(u1024, i9, 0); + try testArgs(i8, u9, 0); + try testArgs(i8, u9, 1 << 0); + try testArgs(i8, u9, 1 << 8); + try testArgs(i16, u9, 0); + try testArgs(i16, u9, 1 << 0); + try testArgs(i16, u9, 1 << 8); + try testArgs(i32, u9, 0); + try testArgs(i32, u9, 1 << 0); + try testArgs(i32, u9, 1 << 8); + try testArgs(i64, u9, 0); + try testArgs(i64, u9, 1 << 0); + try testArgs(i64, u9, 1 << 8); + try testArgs(i128, u9, 0); + try testArgs(i128, u9, 1 << 0); + try testArgs(i128, u9, 1 << 8); + try testArgs(i256, u9, 0); + try testArgs(i256, u9, 1 << 0); + try testArgs(i256, u9, 1 << 8); + try testArgs(i512, u9, 0); + try testArgs(i512, u9, 1 << 0); + try testArgs(i512, u9, 1 << 8); + try testArgs(i1024, u9, 0); + try testArgs(i1024, u9, 1 << 0); + try testArgs(i1024, u9, 1 << 8); + + try testArgs(u8, i15, -1 << 14); + try testArgs(u8, i15, -1); + try testArgs(u8, i15, 0); + try testArgs(u16, i15, -1 << 14); + try testArgs(u16, i15, -1); + try testArgs(u16, i15, 0); + try testArgs(u32, i15, -1 << 14); + try testArgs(u32, i15, -1); + try testArgs(u32, i15, 0); + try testArgs(u64, i15, -1 << 14); + try testArgs(u64, i15, -1); + try testArgs(u64, i15, 0); + try testArgs(u128, i15, -1 << 14); + try testArgs(u128, i15, -1); + try testArgs(u128, i15, 0); + try testArgs(u256, i15, -1 << 14); + try testArgs(u256, i15, -1); + try testArgs(u256, i15, 0); + try testArgs(u512, i15, -1 << 14); + try testArgs(u512, i15, -1); + try testArgs(u512, i15, 0); + try testArgs(u1024, i15, -1 << 14); + try testArgs(u1024, i15, -1); + try testArgs(u1024, i15, 0); + try testArgs(i8, u15, 0); + try testArgs(i8, u15, 1 << 0); + try testArgs(i8, u15, 1 << 14); + try testArgs(i16, u15, 0); + try testArgs(i16, u15, 1 << 0); + try testArgs(i16, u15, 1 << 14); + try testArgs(i32, u15, 0); + try testArgs(i32, u15, 1 << 0); + try testArgs(i32, u15, 1 << 14); + try testArgs(i64, u15, 0); + try testArgs(i64, u15, 1 << 0); + try testArgs(i64, u15, 1 << 14); + try testArgs(i128, u15, 0); + try testArgs(i128, u15, 1 << 0); + try testArgs(i128, u15, 1 << 14); + try testArgs(i256, u15, 0); + try testArgs(i256, u15, 1 << 0); + try testArgs(i256, u15, 1 << 14); + try testArgs(i512, u15, 0); + try testArgs(i512, u15, 1 << 0); + try testArgs(i512, u15, 1 << 14); + try testArgs(i1024, u15, 0); + try testArgs(i1024, u15, 1 << 0); + try testArgs(i1024, u15, 1 << 14); + + try testArgs(u8, i16, -1 << 15); + try testArgs(u8, i16, -1); + try testArgs(u8, i16, 0); + try testArgs(u16, i16, -1 << 15); + try testArgs(u16, i16, -1); + try testArgs(u16, i16, 0); + try testArgs(u32, i16, -1 << 15); + try testArgs(u32, i16, -1); + try testArgs(u32, i16, 0); + try testArgs(u64, i16, -1 << 15); + try testArgs(u64, i16, -1); + try testArgs(u64, i16, 0); + try testArgs(u128, i16, -1 << 15); + try testArgs(u128, i16, -1); + try testArgs(u128, i16, 0); + try testArgs(u256, i16, -1 << 15); + try testArgs(u256, i16, -1); + try testArgs(u256, i16, 0); + try testArgs(u512, i16, -1 << 15); + try testArgs(u512, i16, -1); + try testArgs(u512, i16, 0); + try testArgs(u1024, i16, -1 << 15); + try testArgs(u1024, i16, -1); + try testArgs(u1024, i16, 0); + try testArgs(i8, u16, 0); + try testArgs(i8, u16, 1 << 0); + try testArgs(i8, u16, 1 << 15); + try testArgs(i16, u16, 0); + try testArgs(i16, u16, 1 << 0); + try testArgs(i16, u16, 1 << 15); + try testArgs(i32, u16, 0); + try testArgs(i32, u16, 1 << 0); + try testArgs(i32, u16, 1 << 15); + try testArgs(i64, u16, 0); + try testArgs(i64, u16, 1 << 0); + try testArgs(i64, u16, 1 << 15); + try testArgs(i128, u16, 0); + try testArgs(i128, u16, 1 << 0); + try testArgs(i128, u16, 1 << 15); + try testArgs(i256, u16, 0); + try testArgs(i256, u16, 1 << 0); + try testArgs(i256, u16, 1 << 15); + try testArgs(i512, u16, 0); + try testArgs(i512, u16, 1 << 0); + try testArgs(i512, u16, 1 << 15); + try testArgs(i1024, u16, 0); + try testArgs(i1024, u16, 1 << 0); + try testArgs(i1024, u16, 1 << 15); + + try testArgs(u8, i17, -1 << 16); + try testArgs(u8, i17, -1); + try testArgs(u8, i17, 0); + try testArgs(u16, i17, -1 << 16); + try testArgs(u16, i17, -1); + try testArgs(u16, i17, 0); + try testArgs(u32, i17, -1 << 16); + try testArgs(u32, i17, -1); + try testArgs(u32, i17, 0); + try testArgs(u64, i17, -1 << 16); + try testArgs(u64, i17, -1); + try testArgs(u64, i17, 0); + try testArgs(u128, i17, -1 << 16); + try testArgs(u128, i17, -1); + try testArgs(u128, i17, 0); + try testArgs(u256, i17, -1 << 16); + try testArgs(u256, i17, -1); + try testArgs(u256, i17, 0); + try testArgs(u512, i17, -1 << 16); + try testArgs(u512, i17, -1); + try testArgs(u512, i17, 0); + try testArgs(u1024, i17, -1 << 16); + try testArgs(u1024, i17, -1); + try testArgs(u1024, i17, 0); + try testArgs(i8, u17, 0); + try testArgs(i8, u17, 1 << 0); + try testArgs(i8, u17, 1 << 16); + try testArgs(i16, u17, 0); + try testArgs(i16, u17, 1 << 0); + try testArgs(i16, u17, 1 << 16); + try testArgs(i32, u17, 0); + try testArgs(i32, u17, 1 << 0); + try testArgs(i32, u17, 1 << 16); + try testArgs(i64, u17, 0); + try testArgs(i64, u17, 1 << 0); + try testArgs(i64, u17, 1 << 16); + try testArgs(i128, u17, 0); + try testArgs(i128, u17, 1 << 0); + try testArgs(i128, u17, 1 << 16); + try testArgs(i256, u17, 0); + try testArgs(i256, u17, 1 << 0); + try testArgs(i256, u17, 1 << 16); + try testArgs(i512, u17, 0); + try testArgs(i512, u17, 1 << 0); + try testArgs(i512, u17, 1 << 16); + try testArgs(i1024, u17, 0); + try testArgs(i1024, u17, 1 << 0); + try testArgs(i1024, u17, 1 << 16); + + try testArgs(u8, i31, -1 << 30); + try testArgs(u8, i31, -1); + try testArgs(u8, i31, 0); + try testArgs(u16, i31, -1 << 30); + try testArgs(u16, i31, -1); + try testArgs(u16, i31, 0); + try testArgs(u32, i31, -1 << 30); + try testArgs(u32, i31, -1); + try testArgs(u32, i31, 0); + try testArgs(u64, i31, -1 << 30); + try testArgs(u64, i31, -1); + try testArgs(u64, i31, 0); + try testArgs(u128, i31, -1 << 30); + try testArgs(u128, i31, -1); + try testArgs(u128, i31, 0); + try testArgs(u256, i31, -1 << 30); + try testArgs(u256, i31, -1); + try testArgs(u256, i31, 0); + try testArgs(u512, i31, -1 << 30); + try testArgs(u512, i31, -1); + try testArgs(u512, i31, 0); + try testArgs(u1024, i31, -1 << 30); + try testArgs(u1024, i31, -1); + try testArgs(u1024, i31, 0); + try testArgs(i8, u31, 0); + try testArgs(i8, u31, 1 << 0); + try testArgs(i8, u31, 1 << 30); + try testArgs(i16, u31, 0); + try testArgs(i16, u31, 1 << 0); + try testArgs(i16, u31, 1 << 30); + try testArgs(i32, u31, 0); + try testArgs(i32, u31, 1 << 0); + try testArgs(i32, u31, 1 << 30); + try testArgs(i64, u31, 0); + try testArgs(i64, u31, 1 << 0); + try testArgs(i64, u31, 1 << 30); + try testArgs(i128, u31, 0); + try testArgs(i128, u31, 1 << 0); + try testArgs(i128, u31, 1 << 30); + try testArgs(i256, u31, 0); + try testArgs(i256, u31, 1 << 0); + try testArgs(i256, u31, 1 << 30); + try testArgs(i512, u31, 0); + try testArgs(i512, u31, 1 << 0); + try testArgs(i512, u31, 1 << 30); + try testArgs(i1024, u31, 0); + try testArgs(i1024, u31, 1 << 0); + try testArgs(i1024, u31, 1 << 30); + + try testArgs(u8, i32, -1 << 31); + try testArgs(u8, i32, -1); + try testArgs(u8, i32, 0); + try testArgs(u16, i32, -1 << 31); + try testArgs(u16, i32, -1); + try testArgs(u16, i32, 0); + try testArgs(u32, i32, -1 << 31); + try testArgs(u32, i32, -1); + try testArgs(u32, i32, 0); + try testArgs(u64, i32, -1 << 31); + try testArgs(u64, i32, -1); + try testArgs(u64, i32, 0); + try testArgs(u128, i32, -1 << 31); + try testArgs(u128, i32, -1); + try testArgs(u128, i32, 0); + try testArgs(u256, i32, -1 << 31); + try testArgs(u256, i32, -1); + try testArgs(u256, i32, 0); + try testArgs(u512, i32, -1 << 31); + try testArgs(u512, i32, -1); + try testArgs(u512, i32, 0); + try testArgs(u1024, i32, -1 << 31); + try testArgs(u1024, i32, -1); + try testArgs(u1024, i32, 0); + try testArgs(i8, u32, 0); + try testArgs(i8, u32, 1 << 0); + try testArgs(i8, u32, 1 << 31); + try testArgs(i16, u32, 0); + try testArgs(i16, u32, 1 << 0); + try testArgs(i16, u32, 1 << 31); + try testArgs(i32, u32, 0); + try testArgs(i32, u32, 1 << 0); + try testArgs(i32, u32, 1 << 31); + try testArgs(i64, u32, 0); + try testArgs(i64, u32, 1 << 0); + try testArgs(i64, u32, 1 << 31); + try testArgs(i128, u32, 0); + try testArgs(i128, u32, 1 << 0); + try testArgs(i128, u32, 1 << 31); + try testArgs(i256, u32, 0); + try testArgs(i256, u32, 1 << 0); + try testArgs(i256, u32, 1 << 31); + try testArgs(i512, u32, 0); + try testArgs(i512, u32, 1 << 0); + try testArgs(i512, u32, 1 << 31); + try testArgs(i1024, u32, 0); + try testArgs(i1024, u32, 1 << 0); + try testArgs(i1024, u32, 1 << 31); + + try testArgs(u8, i33, -1 << 32); + try testArgs(u8, i33, -1); + try testArgs(u8, i33, 0); + try testArgs(u16, i33, -1 << 32); + try testArgs(u16, i33, -1); + try testArgs(u16, i33, 0); + try testArgs(u32, i33, -1 << 32); + try testArgs(u32, i33, -1); + try testArgs(u32, i33, 0); + try testArgs(u64, i33, -1 << 32); + try testArgs(u64, i33, -1); + try testArgs(u64, i33, 0); + try testArgs(u128, i33, -1 << 32); + try testArgs(u128, i33, -1); + try testArgs(u128, i33, 0); + try testArgs(u256, i33, -1 << 32); + try testArgs(u256, i33, -1); + try testArgs(u256, i33, 0); + try testArgs(u512, i33, -1 << 32); + try testArgs(u512, i33, -1); + try testArgs(u512, i33, 0); + try testArgs(u1024, i33, -1 << 32); + try testArgs(u1024, i33, -1); + try testArgs(u1024, i33, 0); + try testArgs(i8, u33, 0); + try testArgs(i8, u33, 1 << 0); + try testArgs(i8, u33, 1 << 32); + try testArgs(i16, u33, 0); + try testArgs(i16, u33, 1 << 0); + try testArgs(i16, u33, 1 << 32); + try testArgs(i32, u33, 0); + try testArgs(i32, u33, 1 << 0); + try testArgs(i32, u33, 1 << 32); + try testArgs(i64, u33, 0); + try testArgs(i64, u33, 1 << 0); + try testArgs(i64, u33, 1 << 32); + try testArgs(i128, u33, 0); + try testArgs(i128, u33, 1 << 0); + try testArgs(i128, u33, 1 << 32); + try testArgs(i256, u33, 0); + try testArgs(i256, u33, 1 << 0); + try testArgs(i256, u33, 1 << 32); + try testArgs(i512, u33, 0); + try testArgs(i512, u33, 1 << 0); + try testArgs(i512, u33, 1 << 32); + try testArgs(i1024, u33, 0); + try testArgs(i1024, u33, 1 << 0); + try testArgs(i1024, u33, 1 << 32); + + try testArgs(u8, i63, -1 << 62); + try testArgs(u8, i63, -1); + try testArgs(u8, i63, 0); + try testArgs(u16, i63, -1 << 62); + try testArgs(u16, i63, -1); + try testArgs(u16, i63, 0); + try testArgs(u32, i63, -1 << 62); + try testArgs(u32, i63, -1); + try testArgs(u32, i63, 0); + try testArgs(u64, i63, -1 << 62); + try testArgs(u64, i63, -1); + try testArgs(u64, i63, 0); + try testArgs(u128, i63, -1 << 62); + try testArgs(u128, i63, -1); + try testArgs(u128, i63, 0); + try testArgs(u256, i63, -1 << 62); + try testArgs(u256, i63, -1); + try testArgs(u256, i63, 0); + try testArgs(u512, i63, -1 << 62); + try testArgs(u512, i63, -1); + try testArgs(u512, i63, 0); + try testArgs(u1024, i63, -1 << 62); + try testArgs(u1024, i63, -1); + try testArgs(u1024, i63, 0); + try testArgs(i8, u63, 0); + try testArgs(i8, u63, 1 << 0); + try testArgs(i8, u63, 1 << 62); + try testArgs(i16, u63, 0); + try testArgs(i16, u63, 1 << 0); + try testArgs(i16, u63, 1 << 62); + try testArgs(i32, u63, 0); + try testArgs(i32, u63, 1 << 0); + try testArgs(i32, u63, 1 << 62); + try testArgs(i64, u63, 0); + try testArgs(i64, u63, 1 << 0); + try testArgs(i64, u63, 1 << 62); + try testArgs(i128, u63, 0); + try testArgs(i128, u63, 1 << 0); + try testArgs(i128, u63, 1 << 62); + try testArgs(i256, u63, 0); + try testArgs(i256, u63, 1 << 0); + try testArgs(i256, u63, 1 << 62); + try testArgs(i512, u63, 0); + try testArgs(i512, u63, 1 << 0); + try testArgs(i512, u63, 1 << 62); + try testArgs(i1024, u63, 0); + try testArgs(i1024, u63, 1 << 0); + try testArgs(i1024, u63, 1 << 62); + + try testArgs(u8, i64, -1 << 63); + try testArgs(u8, i64, -1); + try testArgs(u8, i64, 0); + try testArgs(u16, i64, -1 << 63); + try testArgs(u16, i64, -1); + try testArgs(u16, i64, 0); + try testArgs(u32, i64, -1 << 63); + try testArgs(u32, i64, -1); + try testArgs(u32, i64, 0); + try testArgs(u64, i64, -1 << 63); + try testArgs(u64, i64, -1); + try testArgs(u64, i64, 0); + try testArgs(u128, i64, -1 << 63); + try testArgs(u128, i64, -1); + try testArgs(u128, i64, 0); + try testArgs(u256, i64, -1 << 63); + try testArgs(u256, i64, -1); + try testArgs(u256, i64, 0); + try testArgs(u512, i64, -1 << 63); + try testArgs(u512, i64, -1); + try testArgs(u512, i64, 0); + try testArgs(u1024, i64, -1 << 63); + try testArgs(u1024, i64, -1); + try testArgs(u1024, i64, 0); + try testArgs(i8, u64, 0); + try testArgs(i8, u64, 1 << 0); + try testArgs(i8, u64, 1 << 63); + try testArgs(i16, u64, 0); + try testArgs(i16, u64, 1 << 0); + try testArgs(i16, u64, 1 << 63); + try testArgs(i32, u64, 0); + try testArgs(i32, u64, 1 << 0); + try testArgs(i32, u64, 1 << 63); + try testArgs(i64, u64, 0); + try testArgs(i64, u64, 1 << 0); + try testArgs(i64, u64, 1 << 63); + try testArgs(i128, u64, 0); + try testArgs(i128, u64, 1 << 0); + try testArgs(i128, u64, 1 << 63); + try testArgs(i256, u64, 0); + try testArgs(i256, u64, 1 << 0); + try testArgs(i256, u64, 1 << 63); + try testArgs(i512, u64, 0); + try testArgs(i512, u64, 1 << 0); + try testArgs(i512, u64, 1 << 63); + try testArgs(i1024, u64, 0); + try testArgs(i1024, u64, 1 << 0); + try testArgs(i1024, u64, 1 << 63); + + try testArgs(u8, i65, -1 << 64); + try testArgs(u8, i65, -1); + try testArgs(u8, i65, 0); + try testArgs(u16, i65, -1 << 64); + try testArgs(u16, i65, -1); + try testArgs(u16, i65, 0); + try testArgs(u32, i65, -1 << 64); + try testArgs(u32, i65, -1); + try testArgs(u32, i65, 0); + try testArgs(u64, i65, -1 << 64); + try testArgs(u64, i65, -1); + try testArgs(u64, i65, 0); + try testArgs(u128, i65, -1 << 64); + try testArgs(u128, i65, -1); + try testArgs(u128, i65, 0); + try testArgs(u256, i65, -1 << 64); + try testArgs(u256, i65, -1); + try testArgs(u256, i65, 0); + try testArgs(u512, i65, -1 << 64); + try testArgs(u512, i65, -1); + try testArgs(u512, i65, 0); + try testArgs(u1024, i65, -1 << 64); + try testArgs(u1024, i65, -1); + try testArgs(u1024, i65, 0); + try testArgs(i8, u65, 0); + try testArgs(i8, u65, 1 << 0); + try testArgs(i8, u65, 1 << 64); + try testArgs(i16, u65, 0); + try testArgs(i16, u65, 1 << 0); + try testArgs(i16, u65, 1 << 64); + try testArgs(i32, u65, 0); + try testArgs(i32, u65, 1 << 0); + try testArgs(i32, u65, 1 << 64); + try testArgs(i64, u65, 0); + try testArgs(i64, u65, 1 << 0); + try testArgs(i64, u65, 1 << 64); + try testArgs(i128, u65, 0); + try testArgs(i128, u65, 1 << 0); + try testArgs(i128, u65, 1 << 64); + try testArgs(i256, u65, 0); + try testArgs(i256, u65, 1 << 0); + try testArgs(i256, u65, 1 << 64); + try testArgs(i512, u65, 0); + try testArgs(i512, u65, 1 << 0); + try testArgs(i512, u65, 1 << 64); + try testArgs(i1024, u65, 0); + try testArgs(i1024, u65, 1 << 0); + try testArgs(i1024, u65, 1 << 64); + + try testArgs(u8, i95, -1 << 94); + try testArgs(u8, i95, -1); + try testArgs(u8, i95, 0); + try testArgs(u16, i95, -1 << 94); + try testArgs(u16, i95, -1); + try testArgs(u16, i95, 0); + try testArgs(u32, i95, -1 << 94); + try testArgs(u32, i95, -1); + try testArgs(u32, i95, 0); + try testArgs(u64, i95, -1 << 94); + try testArgs(u64, i95, -1); + try testArgs(u64, i95, 0); + try testArgs(u128, i95, -1 << 94); + try testArgs(u128, i95, -1); + try testArgs(u128, i95, 0); + try testArgs(u256, i95, -1 << 94); + try testArgs(u256, i95, -1); + try testArgs(u256, i95, 0); + try testArgs(u512, i95, -1 << 94); + try testArgs(u512, i95, -1); + try testArgs(u512, i95, 0); + try testArgs(u1024, i95, -1 << 94); + try testArgs(u1024, i95, -1); + try testArgs(u1024, i95, 0); + try testArgs(i8, u95, 0); + try testArgs(i8, u95, 1 << 0); + try testArgs(i8, u95, 1 << 94); + try testArgs(i16, u95, 0); + try testArgs(i16, u95, 1 << 0); + try testArgs(i16, u95, 1 << 94); + try testArgs(i32, u95, 0); + try testArgs(i32, u95, 1 << 0); + try testArgs(i32, u95, 1 << 94); + try testArgs(i64, u95, 0); + try testArgs(i64, u95, 1 << 0); + try testArgs(i64, u95, 1 << 94); + try testArgs(i128, u95, 0); + try testArgs(i128, u95, 1 << 0); + try testArgs(i128, u95, 1 << 94); + try testArgs(i256, u95, 0); + try testArgs(i256, u95, 1 << 0); + try testArgs(i256, u95, 1 << 94); + try testArgs(i512, u95, 0); + try testArgs(i512, u95, 1 << 0); + try testArgs(i512, u95, 1 << 94); + try testArgs(i1024, u95, 0); + try testArgs(i1024, u95, 1 << 0); + try testArgs(i1024, u95, 1 << 94); + + try testArgs(u8, i96, -1 << 95); + try testArgs(u8, i96, -1); + try testArgs(u8, i96, 0); + try testArgs(u16, i96, -1 << 95); + try testArgs(u16, i96, -1); + try testArgs(u16, i96, 0); + try testArgs(u32, i96, -1 << 95); + try testArgs(u32, i96, -1); + try testArgs(u32, i96, 0); + try testArgs(u64, i96, -1 << 95); + try testArgs(u64, i96, -1); + try testArgs(u64, i96, 0); + try testArgs(u128, i96, -1 << 95); + try testArgs(u128, i96, -1); + try testArgs(u128, i96, 0); + try testArgs(u256, i96, -1 << 95); + try testArgs(u256, i96, -1); + try testArgs(u256, i96, 0); + try testArgs(u512, i96, -1 << 95); + try testArgs(u512, i96, -1); + try testArgs(u512, i96, 0); + try testArgs(u1024, i96, -1 << 95); + try testArgs(u1024, i96, -1); + try testArgs(u1024, i96, 0); + try testArgs(i8, u96, 0); + try testArgs(i8, u96, 1 << 0); + try testArgs(i8, u96, 1 << 95); + try testArgs(i16, u96, 0); + try testArgs(i16, u96, 1 << 0); + try testArgs(i16, u96, 1 << 95); + try testArgs(i32, u96, 0); + try testArgs(i32, u96, 1 << 0); + try testArgs(i32, u96, 1 << 95); + try testArgs(i64, u96, 0); + try testArgs(i64, u96, 1 << 0); + try testArgs(i64, u96, 1 << 95); + try testArgs(i128, u96, 0); + try testArgs(i128, u96, 1 << 0); + try testArgs(i128, u96, 1 << 95); + try testArgs(i256, u96, 0); + try testArgs(i256, u96, 1 << 0); + try testArgs(i256, u96, 1 << 95); + try testArgs(i512, u96, 0); + try testArgs(i512, u96, 1 << 0); + try testArgs(i512, u96, 1 << 95); + try testArgs(i1024, u96, 0); + try testArgs(i1024, u96, 1 << 0); + try testArgs(i1024, u96, 1 << 95); + + try testArgs(u8, i97, -1 << 96); + try testArgs(u8, i97, -1); + try testArgs(u8, i97, 0); + try testArgs(u16, i97, -1 << 96); + try testArgs(u16, i97, -1); + try testArgs(u16, i97, 0); + try testArgs(u32, i97, -1 << 96); + try testArgs(u32, i97, -1); + try testArgs(u32, i97, 0); + try testArgs(u64, i97, -1 << 96); + try testArgs(u64, i97, -1); + try testArgs(u64, i97, 0); + try testArgs(u128, i97, -1 << 96); + try testArgs(u128, i97, -1); + try testArgs(u128, i97, 0); + try testArgs(u256, i97, -1 << 96); + try testArgs(u256, i97, -1); + try testArgs(u256, i97, 0); + try testArgs(u512, i97, -1 << 96); + try testArgs(u512, i97, -1); + try testArgs(u512, i97, 0); + try testArgs(u1024, i97, -1 << 96); + try testArgs(u1024, i97, -1); + try testArgs(u1024, i97, 0); + try testArgs(i8, u97, 0); + try testArgs(i8, u97, 1 << 0); + try testArgs(i8, u97, 1 << 96); + try testArgs(i16, u97, 0); + try testArgs(i16, u97, 1 << 0); + try testArgs(i16, u97, 1 << 96); + try testArgs(i32, u97, 0); + try testArgs(i32, u97, 1 << 0); + try testArgs(i32, u97, 1 << 96); + try testArgs(i64, u97, 0); + try testArgs(i64, u97, 1 << 0); + try testArgs(i64, u97, 1 << 96); + try testArgs(i128, u97, 0); + try testArgs(i128, u97, 1 << 0); + try testArgs(i128, u97, 1 << 96); + try testArgs(i256, u97, 0); + try testArgs(i256, u97, 1 << 0); + try testArgs(i256, u97, 1 << 96); + try testArgs(i512, u97, 0); + try testArgs(i512, u97, 1 << 0); + try testArgs(i512, u97, 1 << 96); + try testArgs(i1024, u97, 0); + try testArgs(i1024, u97, 1 << 0); + try testArgs(i1024, u97, 1 << 96); + + try testArgs(u8, i127, -1 << 126); + try testArgs(u8, i127, -1); + try testArgs(u8, i127, 0); + try testArgs(u16, i127, -1 << 126); + try testArgs(u16, i127, -1); + try testArgs(u16, i127, 0); + try testArgs(u32, i127, -1 << 126); + try testArgs(u32, i127, -1); + try testArgs(u32, i127, 0); + try testArgs(u64, i127, -1 << 126); + try testArgs(u64, i127, -1); + try testArgs(u64, i127, 0); + try testArgs(u128, i127, -1 << 126); + try testArgs(u128, i127, -1); + try testArgs(u128, i127, 0); + try testArgs(u256, i127, -1 << 126); + try testArgs(u256, i127, -1); + try testArgs(u256, i127, 0); + try testArgs(u512, i127, -1 << 126); + try testArgs(u512, i127, -1); + try testArgs(u512, i127, 0); + try testArgs(u1024, i127, -1 << 126); + try testArgs(u1024, i127, -1); + try testArgs(u1024, i127, 0); + try testArgs(i8, u127, 0); + try testArgs(i8, u127, 1 << 0); + try testArgs(i8, u127, 1 << 126); + try testArgs(i16, u127, 0); + try testArgs(i16, u127, 1 << 0); + try testArgs(i16, u127, 1 << 126); + try testArgs(i32, u127, 0); + try testArgs(i32, u127, 1 << 0); + try testArgs(i32, u127, 1 << 126); + try testArgs(i64, u127, 0); + try testArgs(i64, u127, 1 << 0); + try testArgs(i64, u127, 1 << 126); + try testArgs(i128, u127, 0); + try testArgs(i128, u127, 1 << 0); + try testArgs(i128, u127, 1 << 126); + try testArgs(i256, u127, 0); + try testArgs(i256, u127, 1 << 0); + try testArgs(i256, u127, 1 << 126); + try testArgs(i512, u127, 0); + try testArgs(i512, u127, 1 << 0); + try testArgs(i512, u127, 1 << 126); + try testArgs(i1024, u127, 0); + try testArgs(i1024, u127, 1 << 0); + try testArgs(i1024, u127, 1 << 126); + + try testArgs(u8, i128, -1 << 127); + try testArgs(u8, i128, -1); + try testArgs(u8, i128, 0); + try testArgs(u16, i128, -1 << 127); + try testArgs(u16, i128, -1); + try testArgs(u16, i128, 0); + try testArgs(u32, i128, -1 << 127); + try testArgs(u32, i128, -1); + try testArgs(u32, i128, 0); + try testArgs(u64, i128, -1 << 127); + try testArgs(u64, i128, -1); + try testArgs(u64, i128, 0); + try testArgs(u128, i128, -1 << 127); + try testArgs(u128, i128, -1); + try testArgs(u128, i128, 0); + try testArgs(u256, i128, -1 << 127); + try testArgs(u256, i128, -1); + try testArgs(u256, i128, 0); + try testArgs(u512, i128, -1 << 127); + try testArgs(u512, i128, -1); + try testArgs(u512, i128, 0); + try testArgs(u1024, i128, -1 << 127); + try testArgs(u1024, i128, -1); + try testArgs(u1024, i128, 0); + try testArgs(i8, u128, 0); + try testArgs(i8, u128, 1 << 0); + try testArgs(i8, u128, 1 << 127); + try testArgs(i16, u128, 0); + try testArgs(i16, u128, 1 << 0); + try testArgs(i16, u128, 1 << 127); + try testArgs(i32, u128, 0); + try testArgs(i32, u128, 1 << 0); + try testArgs(i32, u128, 1 << 127); + try testArgs(i64, u128, 0); + try testArgs(i64, u128, 1 << 0); + try testArgs(i64, u128, 1 << 127); + try testArgs(i128, u128, 0); + try testArgs(i128, u128, 1 << 0); + try testArgs(i128, u128, 1 << 127); + try testArgs(i256, u128, 0); + try testArgs(i256, u128, 1 << 0); + try testArgs(i256, u128, 1 << 127); + try testArgs(i512, u128, 0); + try testArgs(i512, u128, 1 << 0); + try testArgs(i512, u128, 1 << 127); + try testArgs(i1024, u128, 0); + try testArgs(i1024, u128, 1 << 0); + try testArgs(i1024, u128, 1 << 127); + + try testArgs(u8, i129, -1 << 128); + try testArgs(u8, i129, -1); + try testArgs(u8, i129, 0); + try testArgs(u16, i129, -1 << 128); + try testArgs(u16, i129, -1); + try testArgs(u16, i129, 0); + try testArgs(u32, i129, -1 << 128); + try testArgs(u32, i129, -1); + try testArgs(u32, i129, 0); + try testArgs(u64, i129, -1 << 128); + try testArgs(u64, i129, -1); + try testArgs(u64, i129, 0); + try testArgs(u128, i129, -1 << 128); + try testArgs(u128, i129, -1); + try testArgs(u128, i129, 0); + try testArgs(u256, i129, -1 << 128); + try testArgs(u256, i129, -1); + try testArgs(u256, i129, 0); + try testArgs(u512, i129, -1 << 128); + try testArgs(u512, i129, -1); + try testArgs(u512, i129, 0); + try testArgs(u1024, i129, -1 << 128); + try testArgs(u1024, i129, -1); + try testArgs(u1024, i129, 0); + try testArgs(i8, u129, 0); + try testArgs(i8, u129, 1 << 0); + try testArgs(i8, u129, 1 << 128); + try testArgs(i16, u129, 0); + try testArgs(i16, u129, 1 << 0); + try testArgs(i16, u129, 1 << 128); + try testArgs(i32, u129, 0); + try testArgs(i32, u129, 1 << 0); + try testArgs(i32, u129, 1 << 128); + try testArgs(i64, u129, 0); + try testArgs(i64, u129, 1 << 0); + try testArgs(i64, u129, 1 << 128); + try testArgs(i128, u129, 0); + try testArgs(i128, u129, 1 << 0); + try testArgs(i128, u129, 1 << 128); + try testArgs(i256, u129, 0); + try testArgs(i256, u129, 1 << 0); + try testArgs(i256, u129, 1 << 128); + try testArgs(i512, u129, 0); + try testArgs(i512, u129, 1 << 0); + try testArgs(i512, u129, 1 << 128); + try testArgs(i1024, u129, 0); + try testArgs(i1024, u129, 1 << 0); + try testArgs(i1024, u129, 1 << 128); + + try testArgs(u8, i255, -1 << 254); + try testArgs(u8, i255, -1); + try testArgs(u8, i255, 0); + try testArgs(u16, i255, -1 << 254); + try testArgs(u16, i255, -1); + try testArgs(u16, i255, 0); + try testArgs(u32, i255, -1 << 254); + try testArgs(u32, i255, -1); + try testArgs(u32, i255, 0); + try testArgs(u64, i255, -1 << 254); + try testArgs(u64, i255, -1); + try testArgs(u64, i255, 0); + try testArgs(u128, i255, -1 << 254); + try testArgs(u128, i255, -1); + try testArgs(u128, i255, 0); + try testArgs(u256, i255, -1 << 254); + try testArgs(u256, i255, -1); + try testArgs(u256, i255, 0); + try testArgs(u512, i255, -1 << 254); + try testArgs(u512, i255, -1); + try testArgs(u512, i255, 0); + try testArgs(u1024, i255, -1 << 254); + try testArgs(u1024, i255, -1); + try testArgs(u1024, i255, 0); + try testArgs(i8, u255, 0); + try testArgs(i8, u255, 1 << 0); + try testArgs(i8, u255, 1 << 254); + try testArgs(i16, u255, 0); + try testArgs(i16, u255, 1 << 0); + try testArgs(i16, u255, 1 << 254); + try testArgs(i32, u255, 0); + try testArgs(i32, u255, 1 << 0); + try testArgs(i32, u255, 1 << 254); + try testArgs(i64, u255, 0); + try testArgs(i64, u255, 1 << 0); + try testArgs(i64, u255, 1 << 254); + try testArgs(i128, u255, 0); + try testArgs(i128, u255, 1 << 0); + try testArgs(i128, u255, 1 << 254); + try testArgs(i256, u255, 0); + try testArgs(i256, u255, 1 << 0); + try testArgs(i256, u255, 1 << 254); + try testArgs(i512, u255, 0); + try testArgs(i512, u255, 1 << 0); + try testArgs(i512, u255, 1 << 254); + try testArgs(i1024, u255, 0); + try testArgs(i1024, u255, 1 << 0); + try testArgs(i1024, u255, 1 << 254); + + try testArgs(u8, i256, -1 << 255); + try testArgs(u8, i256, -1); + try testArgs(u8, i256, 0); + try testArgs(u16, i256, -1 << 255); + try testArgs(u16, i256, -1); + try testArgs(u16, i256, 0); + try testArgs(u32, i256, -1 << 255); + try testArgs(u32, i256, -1); + try testArgs(u32, i256, 0); + try testArgs(u64, i256, -1 << 255); + try testArgs(u64, i256, -1); + try testArgs(u64, i256, 0); + try testArgs(u128, i256, -1 << 255); + try testArgs(u128, i256, -1); + try testArgs(u128, i256, 0); + try testArgs(u256, i256, -1 << 255); + try testArgs(u256, i256, -1); + try testArgs(u256, i256, 0); + try testArgs(u512, i256, -1 << 255); + try testArgs(u512, i256, -1); + try testArgs(u512, i256, 0); + try testArgs(u1024, i256, -1 << 255); + try testArgs(u1024, i256, -1); + try testArgs(u1024, i256, 0); + try testArgs(i8, u256, 0); + try testArgs(i8, u256, 1 << 0); + try testArgs(i8, u256, 1 << 255); + try testArgs(i16, u256, 0); + try testArgs(i16, u256, 1 << 0); + try testArgs(i16, u256, 1 << 255); + try testArgs(i32, u256, 0); + try testArgs(i32, u256, 1 << 0); + try testArgs(i32, u256, 1 << 255); + try testArgs(i64, u256, 0); + try testArgs(i64, u256, 1 << 0); + try testArgs(i64, u256, 1 << 255); + try testArgs(i128, u256, 0); + try testArgs(i128, u256, 1 << 0); + try testArgs(i128, u256, 1 << 255); + try testArgs(i256, u256, 0); + try testArgs(i256, u256, 1 << 0); + try testArgs(i256, u256, 1 << 255); + try testArgs(i512, u256, 0); + try testArgs(i512, u256, 1 << 0); + try testArgs(i512, u256, 1 << 255); + try testArgs(i1024, u256, 0); + try testArgs(i1024, u256, 1 << 0); + try testArgs(i1024, u256, 1 << 255); + + try testArgs(u8, i257, -1 << 256); + try testArgs(u8, i257, -1); + try testArgs(u8, i257, 0); + try testArgs(u16, i257, -1 << 256); + try testArgs(u16, i257, -1); + try testArgs(u16, i257, 0); + try testArgs(u32, i257, -1 << 256); + try testArgs(u32, i257, -1); + try testArgs(u32, i257, 0); + try testArgs(u64, i257, -1 << 256); + try testArgs(u64, i257, -1); + try testArgs(u64, i257, 0); + try testArgs(u128, i257, -1 << 256); + try testArgs(u128, i257, -1); + try testArgs(u128, i257, 0); + try testArgs(u256, i257, -1 << 256); + try testArgs(u256, i257, -1); + try testArgs(u256, i257, 0); + try testArgs(u512, i257, -1 << 256); + try testArgs(u512, i257, -1); + try testArgs(u512, i257, 0); + try testArgs(u1024, i257, -1 << 256); + try testArgs(u1024, i257, -1); + try testArgs(u1024, i257, 0); + try testArgs(i8, u257, 0); + try testArgs(i8, u257, 1 << 0); + try testArgs(i8, u257, 1 << 256); + try testArgs(i16, u257, 0); + try testArgs(i16, u257, 1 << 0); + try testArgs(i16, u257, 1 << 256); + try testArgs(i32, u257, 0); + try testArgs(i32, u257, 1 << 0); + try testArgs(i32, u257, 1 << 256); + try testArgs(i64, u257, 0); + try testArgs(i64, u257, 1 << 0); + try testArgs(i64, u257, 1 << 256); + try testArgs(i128, u257, 0); + try testArgs(i128, u257, 1 << 0); + try testArgs(i128, u257, 1 << 256); + try testArgs(i256, u257, 0); + try testArgs(i256, u257, 1 << 0); + try testArgs(i256, u257, 1 << 256); + try testArgs(i512, u257, 0); + try testArgs(i512, u257, 1 << 0); + try testArgs(i512, u257, 1 << 256); + try testArgs(i1024, u257, 0); + try testArgs(i1024, u257, 1 << 0); + try testArgs(i1024, u257, 1 << 256); + + try testArgs(u8, i511, -1 << 510); + try testArgs(u8, i511, -1); + try testArgs(u8, i511, 0); + try testArgs(u16, i511, -1 << 510); + try testArgs(u16, i511, -1); + try testArgs(u16, i511, 0); + try testArgs(u32, i511, -1 << 510); + try testArgs(u32, i511, -1); + try testArgs(u32, i511, 0); + try testArgs(u64, i511, -1 << 510); + try testArgs(u64, i511, -1); + try testArgs(u64, i511, 0); + try testArgs(u128, i511, -1 << 510); + try testArgs(u128, i511, -1); + try testArgs(u128, i511, 0); + try testArgs(u256, i511, -1 << 510); + try testArgs(u256, i511, -1); + try testArgs(u256, i511, 0); + try testArgs(u512, i511, -1 << 510); + try testArgs(u512, i511, -1); + try testArgs(u512, i511, 0); + try testArgs(u1024, i511, -1 << 510); + try testArgs(u1024, i511, -1); + try testArgs(u1024, i511, 0); + try testArgs(i8, u511, 0); + try testArgs(i8, u511, 1 << 0); + try testArgs(i8, u511, 1 << 510); + try testArgs(i16, u511, 0); + try testArgs(i16, u511, 1 << 0); + try testArgs(i16, u511, 1 << 510); + try testArgs(i32, u511, 0); + try testArgs(i32, u511, 1 << 0); + try testArgs(i32, u511, 1 << 510); + try testArgs(i64, u511, 0); + try testArgs(i64, u511, 1 << 0); + try testArgs(i64, u511, 1 << 510); + try testArgs(i128, u511, 0); + try testArgs(i128, u511, 1 << 0); + try testArgs(i128, u511, 1 << 510); + try testArgs(i256, u511, 0); + try testArgs(i256, u511, 1 << 0); + try testArgs(i256, u511, 1 << 510); + try testArgs(i512, u511, 0); + try testArgs(i512, u511, 1 << 0); + try testArgs(i512, u511, 1 << 510); + try testArgs(i1024, u511, 0); + try testArgs(i1024, u511, 1 << 0); + try testArgs(i1024, u511, 1 << 510); + + try testArgs(u8, i512, -1 << 511); + try testArgs(u8, i512, -1); + try testArgs(u8, i512, 0); + try testArgs(u16, i512, -1 << 511); + try testArgs(u16, i512, -1); + try testArgs(u16, i512, 0); + try testArgs(u32, i512, -1 << 511); + try testArgs(u32, i512, -1); + try testArgs(u32, i512, 0); + try testArgs(u64, i512, -1 << 511); + try testArgs(u64, i512, -1); + try testArgs(u64, i512, 0); + try testArgs(u128, i512, -1 << 511); + try testArgs(u128, i512, -1); + try testArgs(u128, i512, 0); + try testArgs(u256, i512, -1 << 511); + try testArgs(u256, i512, -1); + try testArgs(u256, i512, 0); + try testArgs(u512, i512, -1 << 511); + try testArgs(u512, i512, -1); + try testArgs(u512, i512, 0); + try testArgs(u1024, i512, -1 << 511); + try testArgs(u1024, i512, -1); + try testArgs(u1024, i512, 0); + try testArgs(i8, u512, 0); + try testArgs(i8, u512, 1 << 0); + try testArgs(i8, u512, 1 << 511); + try testArgs(i16, u512, 0); + try testArgs(i16, u512, 1 << 0); + try testArgs(i16, u512, 1 << 511); + try testArgs(i32, u512, 0); + try testArgs(i32, u512, 1 << 0); + try testArgs(i32, u512, 1 << 511); + try testArgs(i64, u512, 0); + try testArgs(i64, u512, 1 << 0); + try testArgs(i64, u512, 1 << 511); + try testArgs(i128, u512, 0); + try testArgs(i128, u512, 1 << 0); + try testArgs(i128, u512, 1 << 511); + try testArgs(i256, u512, 0); + try testArgs(i256, u512, 1 << 0); + try testArgs(i256, u512, 1 << 511); + try testArgs(i512, u512, 0); + try testArgs(i512, u512, 1 << 0); + try testArgs(i512, u512, 1 << 511); + try testArgs(i1024, u512, 0); + try testArgs(i1024, u512, 1 << 0); + try testArgs(i1024, u512, 1 << 511); + + try testArgs(u8, i513, -1 << 512); + try testArgs(u8, i513, -1); + try testArgs(u8, i513, 0); + try testArgs(u16, i513, -1 << 512); + try testArgs(u16, i513, -1); + try testArgs(u16, i513, 0); + try testArgs(u32, i513, -1 << 512); + try testArgs(u32, i513, -1); + try testArgs(u32, i513, 0); + try testArgs(u64, i513, -1 << 512); + try testArgs(u64, i513, -1); + try testArgs(u64, i513, 0); + try testArgs(u128, i513, -1 << 512); + try testArgs(u128, i513, -1); + try testArgs(u128, i513, 0); + try testArgs(u256, i513, -1 << 512); + try testArgs(u256, i513, -1); + try testArgs(u256, i513, 0); + try testArgs(u512, i513, -1 << 512); + try testArgs(u512, i513, -1); + try testArgs(u512, i513, 0); + try testArgs(u1024, i513, -1 << 512); + try testArgs(u1024, i513, -1); + try testArgs(u1024, i513, 0); + try testArgs(i8, u513, 0); + try testArgs(i8, u513, 1 << 0); + try testArgs(i8, u513, 1 << 512); + try testArgs(i16, u513, 0); + try testArgs(i16, u513, 1 << 0); + try testArgs(i16, u513, 1 << 512); + try testArgs(i32, u513, 0); + try testArgs(i32, u513, 1 << 0); + try testArgs(i32, u513, 1 << 512); + try testArgs(i64, u513, 0); + try testArgs(i64, u513, 1 << 0); + try testArgs(i64, u513, 1 << 512); + try testArgs(i128, u513, 0); + try testArgs(i128, u513, 1 << 0); + try testArgs(i128, u513, 1 << 512); + try testArgs(i256, u513, 0); + try testArgs(i256, u513, 1 << 0); + try testArgs(i256, u513, 1 << 512); + try testArgs(i512, u513, 0); + try testArgs(i512, u513, 1 << 0); + try testArgs(i512, u513, 1 << 512); + try testArgs(i1024, u513, 0); + try testArgs(i1024, u513, 1 << 0); + try testArgs(i1024, u513, 1 << 512); + + try testArgs(u8, i1023, -1 << 1022); + try testArgs(u8, i1023, -1); + try testArgs(u8, i1023, 0); + try testArgs(u16, i1023, -1 << 1022); + try testArgs(u16, i1023, -1); + try testArgs(u16, i1023, 0); + try testArgs(u32, i1023, -1 << 1022); + try testArgs(u32, i1023, -1); + try testArgs(u32, i1023, 0); + try testArgs(u64, i1023, -1 << 1022); + try testArgs(u64, i1023, -1); + try testArgs(u64, i1023, 0); + try testArgs(u128, i1023, -1 << 1022); + try testArgs(u128, i1023, -1); + try testArgs(u128, i1023, 0); + try testArgs(u256, i1023, -1 << 1022); + try testArgs(u256, i1023, -1); + try testArgs(u256, i1023, 0); + try testArgs(u512, i1023, -1 << 1022); + try testArgs(u512, i1023, -1); + try testArgs(u512, i1023, 0); + try testArgs(u1024, i1023, -1 << 1022); + try testArgs(u1024, i1023, -1); + try testArgs(u1024, i1023, 0); + try testArgs(i8, u1023, 0); + try testArgs(i8, u1023, 1 << 0); + try testArgs(i8, u1023, 1 << 1022); + try testArgs(i16, u1023, 0); + try testArgs(i16, u1023, 1 << 0); + try testArgs(i16, u1023, 1 << 1022); + try testArgs(i32, u1023, 0); + try testArgs(i32, u1023, 1 << 0); + try testArgs(i32, u1023, 1 << 1022); + try testArgs(i64, u1023, 0); + try testArgs(i64, u1023, 1 << 0); + try testArgs(i64, u1023, 1 << 1022); + try testArgs(i128, u1023, 0); + try testArgs(i128, u1023, 1 << 0); + try testArgs(i128, u1023, 1 << 1022); + try testArgs(i256, u1023, 0); + try testArgs(i256, u1023, 1 << 0); + try testArgs(i256, u1023, 1 << 1022); + try testArgs(i512, u1023, 0); + try testArgs(i512, u1023, 1 << 0); + try testArgs(i512, u1023, 1 << 1022); + try testArgs(i1024, u1023, 0); + try testArgs(i1024, u1023, 1 << 0); + try testArgs(i1024, u1023, 1 << 1022); + + try testArgs(u8, i1024, -1 << 1023); + try testArgs(u8, i1024, -1); + try testArgs(u8, i1024, 0); + try testArgs(u16, i1024, -1 << 1023); + try testArgs(u16, i1024, -1); + try testArgs(u16, i1024, 0); + try testArgs(u32, i1024, -1 << 1023); + try testArgs(u32, i1024, -1); + try testArgs(u32, i1024, 0); + try testArgs(u64, i1024, -1 << 1023); + try testArgs(u64, i1024, -1); + try testArgs(u64, i1024, 0); + try testArgs(u128, i1024, -1 << 1023); + try testArgs(u128, i1024, -1); + try testArgs(u128, i1024, 0); + try testArgs(u256, i1024, -1 << 1023); + try testArgs(u256, i1024, -1); + try testArgs(u256, i1024, 0); + try testArgs(u512, i1024, -1 << 1023); + try testArgs(u512, i1024, -1); + try testArgs(u512, i1024, 0); + try testArgs(u1024, i1024, -1 << 1023); + try testArgs(u1024, i1024, -1); + try testArgs(u1024, i1024, 0); + try testArgs(i8, u1024, 0); + try testArgs(i8, u1024, 1 << 0); + try testArgs(i8, u1024, 1 << 1023); + try testArgs(i16, u1024, 0); + try testArgs(i16, u1024, 1 << 0); + try testArgs(i16, u1024, 1 << 1023); + try testArgs(i32, u1024, 0); + try testArgs(i32, u1024, 1 << 0); + try testArgs(i32, u1024, 1 << 1023); + try testArgs(i64, u1024, 0); + try testArgs(i64, u1024, 1 << 0); + try testArgs(i64, u1024, 1 << 1023); + try testArgs(i128, u1024, 0); + try testArgs(i128, u1024, 1 << 0); + try testArgs(i128, u1024, 1 << 1023); + try testArgs(i256, u1024, 0); + try testArgs(i256, u1024, 1 << 0); + try testArgs(i256, u1024, 1 << 1023); + try testArgs(i512, u1024, 0); + try testArgs(i512, u1024, 1 << 0); + try testArgs(i512, u1024, 1 << 1023); + try testArgs(i1024, u1024, 0); + try testArgs(i1024, u1024, 1 << 0); + try testArgs(i1024, u1024, 1 << 1023); + + try testArgs(u8, i1025, -1 << 1024); + try testArgs(u8, i1025, -1); + try testArgs(u8, i1025, 0); + try testArgs(u16, i1025, -1 << 1024); + try testArgs(u16, i1025, -1); + try testArgs(u16, i1025, 0); + try testArgs(u32, i1025, -1 << 1024); + try testArgs(u32, i1025, -1); + try testArgs(u32, i1025, 0); + try testArgs(u64, i1025, -1 << 1024); + try testArgs(u64, i1025, -1); + try testArgs(u64, i1025, 0); + try testArgs(u128, i1025, -1 << 1024); + try testArgs(u128, i1025, -1); + try testArgs(u128, i1025, 0); + try testArgs(u256, i1025, -1 << 1024); + try testArgs(u256, i1025, -1); + try testArgs(u256, i1025, 0); + try testArgs(u512, i1025, -1 << 1024); + try testArgs(u512, i1025, -1); + try testArgs(u512, i1025, 0); + try testArgs(u1024, i1025, -1 << 1024); + try testArgs(u1024, i1025, -1); + try testArgs(u1024, i1025, 0); + try testArgs(i8, u1025, 0); + try testArgs(i8, u1025, 1 << 0); + try testArgs(i8, u1025, 1 << 1024); + try testArgs(i16, u1025, 0); + try testArgs(i16, u1025, 1 << 0); + try testArgs(i16, u1025, 1 << 1024); + try testArgs(i32, u1025, 0); + try testArgs(i32, u1025, 1 << 0); + try testArgs(i32, u1025, 1 << 1024); + try testArgs(i64, u1025, 0); + try testArgs(i64, u1025, 1 << 0); + try testArgs(i64, u1025, 1 << 1024); + try testArgs(i128, u1025, 0); + try testArgs(i128, u1025, 1 << 0); + try testArgs(i128, u1025, 1 << 1024); + try testArgs(i256, u1025, 0); + try testArgs(i256, u1025, 1 << 0); + try testArgs(i256, u1025, 1 << 1024); + try testArgs(i512, u1025, 0); + try testArgs(i512, u1025, 1 << 0); + try testArgs(i512, u1025, 1 << 1024); + try testArgs(i1024, u1025, 0); + try testArgs(i1024, u1025, 1 << 0); + try testArgs(i1024, u1025, 1 << 1024); + } + fn testFloats() !void { + @setEvalBranchQuota(3_100); + + try testArgs(f16, f16, -nan(f16)); + try testArgs(f16, f16, -inf(f16)); + try testArgs(f16, f16, -fmax(f16)); + try testArgs(f16, f16, -1e1); + try testArgs(f16, f16, -1e0); + try testArgs(f16, f16, -1e-1); + try testArgs(f16, f16, -fmin(f16)); + try testArgs(f16, f16, -tmin(f16)); + try testArgs(f16, f16, -0.0); + try testArgs(f16, f16, 0.0); + try testArgs(f16, f16, tmin(f16)); + try testArgs(f16, f16, fmin(f16)); + try testArgs(f16, f16, 1e-1); + try testArgs(f16, f16, 1e0); + try testArgs(f16, f16, 1e1); + try testArgs(f16, f16, fmax(f16)); + try testArgs(f16, f16, inf(f16)); + try testArgs(f16, f16, nan(f16)); + + try testArgs(f32, f16, -nan(f16)); + try testArgs(f32, f16, -inf(f16)); + try testArgs(f32, f16, -fmax(f16)); + try testArgs(f32, f16, -1e1); + try testArgs(f32, f16, -1e0); + try testArgs(f32, f16, -1e-1); + try testArgs(f32, f16, -fmin(f16)); + try testArgs(f32, f16, -tmin(f16)); + try testArgs(f32, f16, -0.0); + try testArgs(f32, f16, 0.0); + try testArgs(f32, f16, tmin(f16)); + try testArgs(f32, f16, fmin(f16)); + try testArgs(f32, f16, 1e-1); + try testArgs(f32, f16, 1e0); + try testArgs(f32, f16, 1e1); + try testArgs(f32, f16, fmax(f16)); + try testArgs(f32, f16, inf(f16)); + try testArgs(f32, f16, nan(f16)); + + try testArgs(f64, f16, -nan(f16)); + try testArgs(f64, f16, -inf(f16)); + try testArgs(f64, f16, -fmax(f16)); + try testArgs(f64, f16, -1e1); + try testArgs(f64, f16, -1e0); + try testArgs(f64, f16, -1e-1); + try testArgs(f64, f16, -fmin(f16)); + try testArgs(f64, f16, -tmin(f16)); + try testArgs(f64, f16, -0.0); + try testArgs(f64, f16, 0.0); + try testArgs(f64, f16, tmin(f16)); + try testArgs(f64, f16, fmin(f16)); + try testArgs(f64, f16, 1e-1); + try testArgs(f64, f16, 1e0); + try testArgs(f64, f16, 1e1); + try testArgs(f64, f16, fmax(f16)); + try testArgs(f64, f16, inf(f16)); + try testArgs(f64, f16, nan(f16)); + + try testArgs(f80, f16, -nan(f16)); + try testArgs(f80, f16, -inf(f16)); + try testArgs(f80, f16, -fmax(f16)); + try testArgs(f80, f16, -1e1); + try testArgs(f80, f16, -1e0); + try testArgs(f80, f16, -1e-1); + try testArgs(f80, f16, -fmin(f16)); + try testArgs(f80, f16, -tmin(f16)); + try testArgs(f80, f16, -0.0); + try testArgs(f80, f16, 0.0); + try testArgs(f80, f16, tmin(f16)); + try testArgs(f80, f16, fmin(f16)); + try testArgs(f80, f16, 1e-1); + try testArgs(f80, f16, 1e0); + try testArgs(f80, f16, 1e1); + try testArgs(f80, f16, fmax(f16)); + try testArgs(f80, f16, inf(f16)); + try testArgs(f80, f16, nan(f16)); + + try testArgs(f128, f16, -nan(f16)); + try testArgs(f128, f16, -inf(f16)); + try testArgs(f128, f16, -fmax(f16)); + try testArgs(f128, f16, -1e1); + try testArgs(f128, f16, -1e0); + try testArgs(f128, f16, -1e-1); + try testArgs(f128, f16, -fmin(f16)); + try testArgs(f128, f16, -tmin(f16)); + try testArgs(f128, f16, -0.0); + try testArgs(f128, f16, 0.0); + try testArgs(f128, f16, tmin(f16)); + try testArgs(f128, f16, fmin(f16)); + try testArgs(f128, f16, 1e-1); + try testArgs(f128, f16, 1e0); + try testArgs(f128, f16, 1e1); + try testArgs(f128, f16, fmax(f16)); + try testArgs(f128, f16, inf(f16)); + try testArgs(f128, f16, nan(f16)); + + try testArgs(f16, f32, -nan(f32)); + try testArgs(f16, f32, -inf(f32)); + try testArgs(f16, f32, -fmax(f32)); + try testArgs(f16, f32, -1e1); + try testArgs(f16, f32, -1e0); + try testArgs(f16, f32, -1e-1); + try testArgs(f16, f32, -fmin(f32)); + try testArgs(f16, f32, -tmin(f32)); + try testArgs(f16, f32, -0.0); + try testArgs(f16, f32, 0.0); + try testArgs(f16, f32, tmin(f32)); + try testArgs(f16, f32, fmin(f32)); + try testArgs(f16, f32, 1e-1); + try testArgs(f16, f32, 1e0); + try testArgs(f16, f32, 1e1); + try testArgs(f16, f32, fmax(f32)); + try testArgs(f16, f32, inf(f32)); + try testArgs(f16, f32, nan(f32)); + + try testArgs(f32, f32, -nan(f32)); + try testArgs(f32, f32, -inf(f32)); + try testArgs(f32, f32, -fmax(f32)); + try testArgs(f32, f32, -1e1); + try testArgs(f32, f32, -1e0); + try testArgs(f32, f32, -1e-1); + try testArgs(f32, f32, -fmin(f32)); + try testArgs(f32, f32, -tmin(f32)); + try testArgs(f32, f32, -0.0); + try testArgs(f32, f32, 0.0); + try testArgs(f32, f32, tmin(f32)); + try testArgs(f32, f32, fmin(f32)); + try testArgs(f32, f32, 1e-1); + try testArgs(f32, f32, 1e0); + try testArgs(f32, f32, 1e1); + try testArgs(f32, f32, fmax(f32)); + try testArgs(f32, f32, inf(f32)); + try testArgs(f32, f32, nan(f32)); + + try testArgs(f64, f32, -nan(f32)); + try testArgs(f64, f32, -inf(f32)); + try testArgs(f64, f32, -fmax(f32)); + try testArgs(f64, f32, -1e1); + try testArgs(f64, f32, -1e0); + try testArgs(f64, f32, -1e-1); + try testArgs(f64, f32, -fmin(f32)); + try testArgs(f64, f32, -tmin(f32)); + try testArgs(f64, f32, -0.0); + try testArgs(f64, f32, 0.0); + try testArgs(f64, f32, tmin(f32)); + try testArgs(f64, f32, fmin(f32)); + try testArgs(f64, f32, 1e-1); + try testArgs(f64, f32, 1e0); + try testArgs(f64, f32, 1e1); + try testArgs(f64, f32, fmax(f32)); + try testArgs(f64, f32, inf(f32)); + try testArgs(f64, f32, nan(f32)); + + try testArgs(f80, f32, -nan(f32)); + try testArgs(f80, f32, -inf(f32)); + try testArgs(f80, f32, -fmax(f32)); + try testArgs(f80, f32, -1e1); + try testArgs(f80, f32, -1e0); + try testArgs(f80, f32, -1e-1); + try testArgs(f80, f32, -fmin(f32)); + try testArgs(f80, f32, -tmin(f32)); + try testArgs(f80, f32, -0.0); + try testArgs(f80, f32, 0.0); + try testArgs(f80, f32, tmin(f32)); + try testArgs(f80, f32, fmin(f32)); + try testArgs(f80, f32, 1e-1); + try testArgs(f80, f32, 1e0); + try testArgs(f80, f32, 1e1); + try testArgs(f80, f32, fmax(f32)); + try testArgs(f80, f32, inf(f32)); + try testArgs(f80, f32, nan(f32)); + + try testArgs(f128, f32, -nan(f32)); + try testArgs(f128, f32, -inf(f32)); + try testArgs(f128, f32, -fmax(f32)); + try testArgs(f128, f32, -1e1); + try testArgs(f128, f32, -1e0); + try testArgs(f128, f32, -1e-1); + try testArgs(f128, f32, -fmin(f32)); + try testArgs(f128, f32, -tmin(f32)); + try testArgs(f128, f32, -0.0); + try testArgs(f128, f32, 0.0); + try testArgs(f128, f32, tmin(f32)); + try testArgs(f128, f32, fmin(f32)); + try testArgs(f128, f32, 1e-1); + try testArgs(f128, f32, 1e0); + try testArgs(f128, f32, 1e1); + try testArgs(f128, f32, fmax(f32)); + try testArgs(f128, f32, inf(f32)); + try testArgs(f128, f32, nan(f32)); + + try testArgs(f16, f64, -nan(f64)); + try testArgs(f16, f64, -inf(f64)); + try testArgs(f16, f64, -fmax(f64)); + try testArgs(f16, f64, -1e1); + try testArgs(f16, f64, -1e0); + try testArgs(f16, f64, -1e-1); + try testArgs(f16, f64, -fmin(f64)); + try testArgs(f16, f64, -tmin(f64)); + try testArgs(f16, f64, -0.0); + try testArgs(f16, f64, 0.0); + try testArgs(f16, f64, tmin(f64)); + try testArgs(f16, f64, fmin(f64)); + try testArgs(f16, f64, 1e-1); + try testArgs(f16, f64, 1e0); + try testArgs(f16, f64, 1e1); + try testArgs(f16, f64, fmax(f64)); + try testArgs(f16, f64, inf(f64)); + try testArgs(f16, f64, nan(f64)); + + try testArgs(f32, f64, -nan(f64)); + try testArgs(f32, f64, -inf(f64)); + try testArgs(f32, f64, -fmax(f64)); + try testArgs(f32, f64, -1e1); + try testArgs(f32, f64, -1e0); + try testArgs(f32, f64, -1e-1); + try testArgs(f32, f64, -fmin(f64)); + try testArgs(f32, f64, -tmin(f64)); + try testArgs(f32, f64, -0.0); + try testArgs(f32, f64, 0.0); + try testArgs(f32, f64, tmin(f64)); + try testArgs(f32, f64, fmin(f64)); + try testArgs(f32, f64, 1e-1); + try testArgs(f32, f64, 1e0); + try testArgs(f32, f64, 1e1); + try testArgs(f32, f64, fmax(f64)); + try testArgs(f32, f64, inf(f64)); + try testArgs(f32, f64, nan(f64)); + + try testArgs(f64, f64, -nan(f64)); + try testArgs(f64, f64, -inf(f64)); + try testArgs(f64, f64, -fmax(f64)); + try testArgs(f64, f64, -1e1); + try testArgs(f64, f64, -1e0); + try testArgs(f64, f64, -1e-1); + try testArgs(f64, f64, -fmin(f64)); + try testArgs(f64, f64, -tmin(f64)); + try testArgs(f64, f64, -0.0); + try testArgs(f64, f64, 0.0); + try testArgs(f64, f64, tmin(f64)); + try testArgs(f64, f64, fmin(f64)); + try testArgs(f64, f64, 1e-1); + try testArgs(f64, f64, 1e0); + try testArgs(f64, f64, 1e1); + try testArgs(f64, f64, fmax(f64)); + try testArgs(f64, f64, inf(f64)); + try testArgs(f64, f64, nan(f64)); + + try testArgs(f80, f64, -nan(f64)); + try testArgs(f80, f64, -inf(f64)); + try testArgs(f80, f64, -fmax(f64)); + try testArgs(f80, f64, -1e1); + try testArgs(f80, f64, -1e0); + try testArgs(f80, f64, -1e-1); + try testArgs(f80, f64, -fmin(f64)); + try testArgs(f80, f64, -tmin(f64)); + try testArgs(f80, f64, -0.0); + try testArgs(f80, f64, 0.0); + try testArgs(f80, f64, tmin(f64)); + try testArgs(f80, f64, fmin(f64)); + try testArgs(f80, f64, 1e-1); + try testArgs(f80, f64, 1e0); + try testArgs(f80, f64, 1e1); + try testArgs(f80, f64, fmax(f64)); + try testArgs(f80, f64, inf(f64)); + try testArgs(f80, f64, nan(f64)); + + try testArgs(f128, f64, -nan(f64)); + try testArgs(f128, f64, -inf(f64)); + try testArgs(f128, f64, -fmax(f64)); + try testArgs(f128, f64, -1e1); + try testArgs(f128, f64, -1e0); + try testArgs(f128, f64, -1e-1); + try testArgs(f128, f64, -fmin(f64)); + try testArgs(f128, f64, -tmin(f64)); + try testArgs(f128, f64, -0.0); + try testArgs(f128, f64, 0.0); + try testArgs(f128, f64, tmin(f64)); + try testArgs(f128, f64, fmin(f64)); + try testArgs(f128, f64, 1e-1); + try testArgs(f128, f64, 1e0); + try testArgs(f128, f64, 1e1); + try testArgs(f128, f64, fmax(f64)); + try testArgs(f128, f64, inf(f64)); + try testArgs(f128, f64, nan(f64)); + + try testArgs(f16, f80, -nan(f80)); + try testArgs(f16, f80, -inf(f80)); + try testArgs(f16, f80, -fmax(f80)); + try testArgs(f16, f80, -1e1); + try testArgs(f16, f80, -1e0); + try testArgs(f16, f80, -1e-1); + try testArgs(f16, f80, -fmin(f80)); + try testArgs(f16, f80, -tmin(f80)); + try testArgs(f16, f80, -0.0); + try testArgs(f16, f80, 0.0); + try testArgs(f16, f80, tmin(f80)); + try testArgs(f16, f80, fmin(f80)); + try testArgs(f16, f80, 1e-1); + try testArgs(f16, f80, 1e0); + try testArgs(f16, f80, 1e1); + try testArgs(f16, f80, fmax(f80)); + try testArgs(f16, f80, inf(f80)); + try testArgs(f16, f80, nan(f80)); + + try testArgs(f32, f80, -nan(f80)); + try testArgs(f32, f80, -inf(f80)); + try testArgs(f32, f80, -fmax(f80)); + try testArgs(f32, f80, -1e1); + try testArgs(f32, f80, -1e0); + try testArgs(f32, f80, -1e-1); + try testArgs(f32, f80, -fmin(f80)); + try testArgs(f32, f80, -tmin(f80)); + try testArgs(f32, f80, -0.0); + try testArgs(f32, f80, 0.0); + try testArgs(f32, f80, tmin(f80)); + try testArgs(f32, f80, fmin(f80)); + try testArgs(f32, f80, 1e-1); + try testArgs(f32, f80, 1e0); + try testArgs(f32, f80, 1e1); + try testArgs(f32, f80, fmax(f80)); + try testArgs(f32, f80, inf(f80)); + try testArgs(f32, f80, nan(f80)); + + try testArgs(f64, f80, -nan(f80)); + try testArgs(f64, f80, -inf(f80)); + try testArgs(f64, f80, -fmax(f80)); + try testArgs(f64, f80, -1e1); + try testArgs(f64, f80, -1e0); + try testArgs(f64, f80, -1e-1); + try testArgs(f64, f80, -fmin(f80)); + try testArgs(f64, f80, -tmin(f80)); + try testArgs(f64, f80, -0.0); + try testArgs(f64, f80, 0.0); + try testArgs(f64, f80, tmin(f80)); + try testArgs(f64, f80, fmin(f80)); + try testArgs(f64, f80, 1e-1); + try testArgs(f64, f80, 1e0); + try testArgs(f64, f80, 1e1); + try testArgs(f64, f80, fmax(f80)); + try testArgs(f64, f80, inf(f80)); + try testArgs(f64, f80, nan(f80)); + + try testArgs(f80, f80, -nan(f80)); + try testArgs(f80, f80, -inf(f80)); + try testArgs(f80, f80, -fmax(f80)); + try testArgs(f80, f80, -1e1); + try testArgs(f80, f80, -1e0); + try testArgs(f80, f80, -1e-1); + try testArgs(f80, f80, -fmin(f80)); + try testArgs(f80, f80, -tmin(f80)); + try testArgs(f80, f80, -0.0); + try testArgs(f80, f80, 0.0); + try testArgs(f80, f80, tmin(f80)); + try testArgs(f80, f80, fmin(f80)); + try testArgs(f80, f80, 1e-1); + try testArgs(f80, f80, 1e0); + try testArgs(f80, f80, 1e1); + try testArgs(f80, f80, fmax(f80)); + try testArgs(f80, f80, inf(f80)); + try testArgs(f80, f80, nan(f80)); + + try testArgs(f128, f80, -nan(f80)); + try testArgs(f128, f80, -inf(f80)); + try testArgs(f128, f80, -fmax(f80)); + try testArgs(f128, f80, -1e1); + try testArgs(f128, f80, -1e0); + try testArgs(f128, f80, -1e-1); + try testArgs(f128, f80, -fmin(f80)); + try testArgs(f128, f80, -tmin(f80)); + try testArgs(f128, f80, -0.0); + try testArgs(f128, f80, 0.0); + try testArgs(f128, f80, tmin(f80)); + try testArgs(f128, f80, fmin(f80)); + try testArgs(f128, f80, 1e-1); + try testArgs(f128, f80, 1e0); + try testArgs(f128, f80, 1e1); + try testArgs(f128, f80, fmax(f80)); + try testArgs(f128, f80, inf(f80)); + try testArgs(f128, f80, nan(f80)); + + try testArgs(f16, f128, -nan(f128)); + try testArgs(f16, f128, -inf(f128)); + try testArgs(f16, f128, -fmax(f128)); + try testArgs(f16, f128, -1e1); + try testArgs(f16, f128, -1e0); + try testArgs(f16, f128, -1e-1); + try testArgs(f16, f128, -fmin(f128)); + try testArgs(f16, f128, -tmin(f128)); + try testArgs(f16, f128, -0.0); + try testArgs(f16, f128, 0.0); + try testArgs(f16, f128, tmin(f128)); + try testArgs(f16, f128, fmin(f128)); + try testArgs(f16, f128, 1e-1); + try testArgs(f16, f128, 1e0); + try testArgs(f16, f128, 1e1); + try testArgs(f16, f128, fmax(f128)); + try testArgs(f16, f128, inf(f128)); + try testArgs(f16, f128, nan(f128)); + + try testArgs(f32, f128, -nan(f128)); + try testArgs(f32, f128, -inf(f128)); + try testArgs(f32, f128, -fmax(f128)); + try testArgs(f32, f128, -1e1); + try testArgs(f32, f128, -1e0); + try testArgs(f32, f128, -1e-1); + try testArgs(f32, f128, -fmin(f128)); + try testArgs(f32, f128, -tmin(f128)); + try testArgs(f32, f128, -0.0); + try testArgs(f32, f128, 0.0); + try testArgs(f32, f128, tmin(f128)); + try testArgs(f32, f128, fmin(f128)); + try testArgs(f32, f128, 1e-1); + try testArgs(f32, f128, 1e0); + try testArgs(f32, f128, 1e1); + try testArgs(f32, f128, fmax(f128)); + try testArgs(f32, f128, inf(f128)); + try testArgs(f32, f128, nan(f128)); + + try testArgs(f64, f128, -nan(f128)); + try testArgs(f64, f128, -inf(f128)); + try testArgs(f64, f128, -fmax(f128)); + try testArgs(f64, f128, -1e1); + try testArgs(f64, f128, -1e0); + try testArgs(f64, f128, -1e-1); + try testArgs(f64, f128, -fmin(f128)); + try testArgs(f64, f128, -tmin(f128)); + try testArgs(f64, f128, -0.0); + try testArgs(f64, f128, 0.0); + try testArgs(f64, f128, tmin(f128)); + try testArgs(f64, f128, fmin(f128)); + try testArgs(f64, f128, 1e-1); + try testArgs(f64, f128, 1e0); + try testArgs(f64, f128, 1e1); + try testArgs(f64, f128, fmax(f128)); + try testArgs(f64, f128, inf(f128)); + try testArgs(f64, f128, nan(f128)); + + try testArgs(f80, f128, -nan(f128)); + try testArgs(f80, f128, -inf(f128)); + try testArgs(f80, f128, -fmax(f128)); + try testArgs(f80, f128, -1e1); + try testArgs(f80, f128, -1e0); + try testArgs(f80, f128, -1e-1); + try testArgs(f80, f128, -fmin(f128)); + try testArgs(f80, f128, -tmin(f128)); + try testArgs(f80, f128, -0.0); + try testArgs(f80, f128, 0.0); + try testArgs(f80, f128, tmin(f128)); + try testArgs(f80, f128, fmin(f128)); + try testArgs(f80, f128, 1e-1); + try testArgs(f80, f128, 1e0); + try testArgs(f80, f128, 1e1); + try testArgs(f80, f128, fmax(f128)); + try testArgs(f80, f128, inf(f128)); + try testArgs(f80, f128, nan(f128)); + + try testArgs(f128, f128, -nan(f128)); + try testArgs(f128, f128, -inf(f128)); + try testArgs(f128, f128, -fmax(f128)); + try testArgs(f128, f128, -1e1); + try testArgs(f128, f128, -1e0); + try testArgs(f128, f128, -1e-1); + try testArgs(f128, f128, -fmin(f128)); + try testArgs(f128, f128, -tmin(f128)); + try testArgs(f128, f128, -0.0); + try testArgs(f128, f128, 0.0); + try testArgs(f128, f128, tmin(f128)); + try testArgs(f128, f128, fmin(f128)); + try testArgs(f128, f128, 1e-1); + try testArgs(f128, f128, 1e0); + try testArgs(f128, f128, 1e1); + try testArgs(f128, f128, fmax(f128)); + try testArgs(f128, f128, inf(f128)); + try testArgs(f128, f128, nan(f128)); + } + fn testIntVectors() !void { + try testArgs(@Vector(1, i8), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, u8), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, i16), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, u16), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, i32), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, u32), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, i64), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, u64), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, i128), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, u128), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, i256), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, u256), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, i512), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, u512), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, i1024), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, u1024), @Vector(1, i1), .{-1}); + try testArgs(@Vector(1, i8), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, u8), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, i16), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, u16), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, i32), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, u32), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, i64), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, u64), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, i128), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, u128), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, i256), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, u256), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, i512), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, u512), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, i1024), @Vector(1, u1), .{1}); + try testArgs(@Vector(1, u1024), @Vector(1, u1), .{1}); + + try testArgs(@Vector(2, i8), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, u8), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, i16), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, u16), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, i32), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, u32), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, i64), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, u64), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, i128), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, u128), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, i256), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, u256), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, i512), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, u512), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, i1024), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, u1024), @Vector(2, i1), .{ -1, 0 }); + try testArgs(@Vector(2, i8), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, u8), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, i16), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, u16), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, i32), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, u32), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, i64), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, u64), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, i128), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, u128), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, i256), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, u256), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, i512), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, u512), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, i1024), @Vector(2, u1), .{ 0, 1 }); + try testArgs(@Vector(2, u1024), @Vector(2, u1), .{ 0, 1 }); + + try testArgs(@Vector(3, i8), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i2), .{ -1 << 1, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, u8), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, i16), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, u16), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, i32), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, u32), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, i64), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, u64), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, i128), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, u128), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, i256), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, u256), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, i512), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, u512), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, i1024), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + try testArgs(@Vector(3, u1024), @Vector(3, u2), .{ 0, 1, 1 << 1 }); + + try testArgs(@Vector(3, i8), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i3), .{ -1 << 2, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, u8), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, i16), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, u16), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, i32), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, u32), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, i64), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, u64), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, i128), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, u128), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, i256), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, u256), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, i512), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, u512), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, i1024), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + try testArgs(@Vector(3, u1024), @Vector(3, u3), .{ 0, 1, 1 << 2 }); + + try testArgs(@Vector(3, i8), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i4), .{ -1 << 3, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, u8), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, i16), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, u16), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, i32), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, u32), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, i64), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, u64), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, i128), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, u128), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, i256), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, u256), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, i512), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, u512), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, i1024), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + try testArgs(@Vector(3, u1024), @Vector(3, u4), .{ 0, 1, 1 << 3 }); + + try testArgs(@Vector(3, i8), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i5), .{ -1 << 4, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, u8), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, i16), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, u16), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, i32), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, u32), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, i64), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, u64), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, i128), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, u128), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, i256), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, u256), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, i512), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, u512), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, i1024), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + try testArgs(@Vector(3, u1024), @Vector(3, u5), .{ 0, 1, 1 << 4 }); + + try testArgs(@Vector(3, i8), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i7), .{ -1 << 6, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, u8), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, i16), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, u16), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, i32), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, u32), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, i64), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, u64), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, i128), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, u128), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, i256), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, u256), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, i512), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, u512), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, i1024), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + try testArgs(@Vector(3, u1024), @Vector(3, u7), .{ 0, 1, 1 << 6 }); + + try testArgs(@Vector(3, i8), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i8), .{ -1 << 7, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, u8), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, i16), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, u16), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, i32), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, u32), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, i64), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, u64), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, i128), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, u128), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, i256), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, u256), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, i512), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, u512), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, i1024), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + try testArgs(@Vector(3, u1024), @Vector(3, u8), .{ 0, 1, 1 << 7 }); + + try testArgs(@Vector(3, i8), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i9), .{ -1 << 8, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, u8), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, i16), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, u16), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, i32), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, u32), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, i64), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, u64), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, i128), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, u128), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, i256), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, u256), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, i512), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, u512), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, i1024), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + try testArgs(@Vector(3, u1024), @Vector(3, u9), .{ 0, 1, 1 << 8 }); + + try testArgs(@Vector(3, i8), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i15), .{ -1 << 14, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, u8), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, i16), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, u16), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, i32), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, u32), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, i64), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, u64), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, i128), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, u128), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, i256), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, u256), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, i512), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, u512), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, i1024), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + try testArgs(@Vector(3, u1024), @Vector(3, u15), .{ 0, 1, 1 << 14 }); + + try testArgs(@Vector(3, i8), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i16), .{ -1 << 15, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, u8), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, i16), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, u16), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, i32), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, u32), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, i64), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, u64), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, i128), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, u128), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, i256), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, u256), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, i512), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, u512), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, i1024), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + try testArgs(@Vector(3, u1024), @Vector(3, u16), .{ 0, 1, 1 << 15 }); + + try testArgs(@Vector(3, i8), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i17), .{ -1 << 16, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, u8), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, i16), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, u16), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, i32), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, u32), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, i64), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, u64), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, i128), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, u128), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, i256), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, u256), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, i512), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, u512), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, i1024), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + try testArgs(@Vector(3, u1024), @Vector(3, u17), .{ 0, 1, 1 << 16 }); + + try testArgs(@Vector(3, i8), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i31), .{ -1 << 30, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, u8), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, i16), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, u16), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, i32), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, u32), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, i64), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, u64), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, i128), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, u128), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, i256), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, u256), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, i512), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, u512), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, i1024), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + try testArgs(@Vector(3, u1024), @Vector(3, u31), .{ 0, 1, 1 << 30 }); + + try testArgs(@Vector(3, i8), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i32), .{ -1 << 31, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, u8), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, i16), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, u16), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, i32), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, u32), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, i64), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, u64), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, i128), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, u128), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, i256), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, u256), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, i512), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, u512), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, i1024), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + try testArgs(@Vector(3, u1024), @Vector(3, u32), .{ 0, 1, 1 << 31 }); + + try testArgs(@Vector(3, i8), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i33), .{ -1 << 32, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, u8), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, i16), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, u16), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, i32), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, u32), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, i64), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, u64), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, i128), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, u128), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, i256), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, u256), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, i512), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, u512), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, i1024), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + try testArgs(@Vector(3, u1024), @Vector(3, u33), .{ 0, 1, 1 << 32 }); + + try testArgs(@Vector(3, i8), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i63), .{ -1 << 62, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, u8), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, i16), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, u16), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, i32), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, u32), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, i64), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, u64), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, i128), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, u128), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, i256), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, u256), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, i512), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, u512), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, i1024), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + try testArgs(@Vector(3, u1024), @Vector(3, u63), .{ 0, 1, 1 << 62 }); + + try testArgs(@Vector(3, i8), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i64), .{ -1 << 63, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, u8), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, i16), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, u16), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, i32), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, u32), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, i64), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, u64), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, i128), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, u128), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, i256), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, u256), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, i512), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, u512), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, i1024), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + try testArgs(@Vector(3, u1024), @Vector(3, u64), .{ 0, 1, 1 << 63 }); + + try testArgs(@Vector(3, i8), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i65), .{ -1 << 64, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, u8), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, i16), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, u16), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, i32), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, u32), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, i64), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, u64), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, i128), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, u128), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, i256), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, u256), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, i512), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, u512), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, i1024), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + try testArgs(@Vector(3, u1024), @Vector(3, u65), .{ 0, 1, 1 << 64 }); + + try testArgs(@Vector(3, i8), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i95), .{ -1 << 94, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, u8), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, i16), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, u16), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, i32), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, u32), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, i64), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, u64), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, i128), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, u128), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, i256), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, u256), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, i512), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, u512), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, i1024), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + try testArgs(@Vector(3, u1024), @Vector(3, u95), .{ 0, 1, 1 << 94 }); + + try testArgs(@Vector(3, i8), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i96), .{ -1 << 95, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, u8), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, i16), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, u16), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, i32), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, u32), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, i64), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, u64), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, i128), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, u128), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, i256), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, u256), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, i512), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, u512), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, i1024), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + try testArgs(@Vector(3, u1024), @Vector(3, u96), .{ 0, 1, 1 << 95 }); + + try testArgs(@Vector(3, i8), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i97), .{ -1 << 96, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, u8), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, i16), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, u16), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, i32), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, u32), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, i64), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, u64), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, i128), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, u128), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, i256), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, u256), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, i512), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, u512), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, i1024), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + try testArgs(@Vector(3, u1024), @Vector(3, u97), .{ 0, 1, 1 << 96 }); + + try testArgs(@Vector(3, i8), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i127), .{ -1 << 126, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, u8), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, i16), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, u16), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, i32), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, u32), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, i64), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, u64), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, i128), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, u128), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, i256), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, u256), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, i512), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, u512), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, i1024), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + try testArgs(@Vector(3, u1024), @Vector(3, u127), .{ 0, 1, 1 << 126 }); + + try testArgs(@Vector(3, i8), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i128), .{ -1 << 127, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, u8), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, i16), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, u16), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, i32), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, u32), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, i64), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, u64), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, i128), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, u128), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, i256), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, u256), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, i512), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, u512), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, i1024), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + try testArgs(@Vector(3, u1024), @Vector(3, u128), .{ 0, 1, 1 << 127 }); + + try testArgs(@Vector(3, i8), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i129), .{ -1 << 128, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, u8), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, i16), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, u16), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, i32), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, u32), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, i64), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, u64), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, i128), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, u128), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, i256), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, u256), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, i512), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, u512), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, i1024), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + try testArgs(@Vector(3, u1024), @Vector(3, u129), .{ 0, 1, 1 << 128 }); + + try testArgs(@Vector(3, i8), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i159), .{ -1 << 158, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, u8), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, i16), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, u16), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, i32), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, u32), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, i64), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, u64), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, i128), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, u128), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, i256), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, u256), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, i512), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, u512), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, i1024), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + try testArgs(@Vector(3, u1024), @Vector(3, u159), .{ 0, 1, 1 << 158 }); + + try testArgs(@Vector(3, i8), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i160), .{ -1 << 159, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, u8), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, i16), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, u16), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, i32), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, u32), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, i64), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, u64), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, i128), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, u128), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, i256), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, u256), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, i512), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, u512), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, i1024), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + try testArgs(@Vector(3, u1024), @Vector(3, u160), .{ 0, 1, 1 << 159 }); + + try testArgs(@Vector(3, i8), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i161), .{ -1 << 160, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, u8), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, i16), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, u16), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, i32), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, u32), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, i64), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, u64), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, i128), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, u128), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, i256), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, u256), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, i512), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, u512), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, i1024), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + try testArgs(@Vector(3, u1024), @Vector(3, u161), .{ 0, 1, 1 << 160 }); + + try testArgs(@Vector(3, i8), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i191), .{ -1 << 190, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, u8), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, i16), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, u16), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, i32), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, u32), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, i64), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, u64), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, i128), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, u128), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, i256), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, u256), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, i512), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, u512), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, i1024), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + try testArgs(@Vector(3, u1024), @Vector(3, u191), .{ 0, 1, 1 << 190 }); + + try testArgs(@Vector(3, i8), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i192), .{ -1 << 191, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, u8), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, i16), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, u16), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, i32), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, u32), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, i64), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, u64), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, i128), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, u128), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, i256), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, u256), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, i512), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, u512), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, i1024), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + try testArgs(@Vector(3, u1024), @Vector(3, u192), .{ 0, 1, 1 << 191 }); + + try testArgs(@Vector(3, i8), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i193), .{ -1 << 192, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, u8), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, i16), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, u16), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, i32), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, u32), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, i64), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, u64), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, i128), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, u128), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, i256), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, u256), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, i512), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, u512), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, i1024), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + try testArgs(@Vector(3, u1024), @Vector(3, u193), .{ 0, 1, 1 << 192 }); + + try testArgs(@Vector(3, i8), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i223), .{ -1 << 222, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, u8), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, i16), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, u16), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, i32), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, u32), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, i64), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, u64), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, i128), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, u128), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, i256), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, u256), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, i512), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, u512), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, i1024), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + try testArgs(@Vector(3, u1024), @Vector(3, u223), .{ 0, 1, 1 << 222 }); + + try testArgs(@Vector(3, i8), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i224), .{ -1 << 223, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, u8), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, i16), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, u16), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, i32), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, u32), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, i64), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, u64), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, i128), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, u128), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, i256), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, u256), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, i512), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, u512), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, i1024), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + try testArgs(@Vector(3, u1024), @Vector(3, u224), .{ 0, 1, 1 << 223 }); + + try testArgs(@Vector(3, i8), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i225), .{ -1 << 224, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, u8), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, i16), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, u16), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, i32), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, u32), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, i64), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, u64), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, i128), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, u128), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, i256), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, u256), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, i512), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, u512), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, i1024), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + try testArgs(@Vector(3, u1024), @Vector(3, u225), .{ 0, 1, 1 << 224 }); + + try testArgs(@Vector(3, i8), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i255), .{ -1 << 254, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, u8), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, i16), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, u16), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, i32), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, u32), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, i64), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, u64), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, i128), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, u128), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, i256), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, u256), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, i512), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, u512), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, i1024), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + try testArgs(@Vector(3, u1024), @Vector(3, u255), .{ 0, 1, 1 << 254 }); + + try testArgs(@Vector(3, i8), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i256), .{ -1 << 255, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, u8), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, i16), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, u16), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, i32), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, u32), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, i64), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, u64), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, i128), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, u128), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, i256), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, u256), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, i512), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, u512), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, i1024), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + try testArgs(@Vector(3, u1024), @Vector(3, u256), .{ 0, 1, 1 << 255 }); + + try testArgs(@Vector(3, i8), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i257), .{ -1 << 256, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, u8), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, i16), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, u16), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, i32), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, u32), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, i64), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, u64), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, i128), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, u128), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, i256), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, u256), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, i512), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, u512), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, i1024), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + try testArgs(@Vector(3, u1024), @Vector(3, u257), .{ 0, 1, 1 << 256 }); + + try testArgs(@Vector(3, i8), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i511), .{ -1 << 510, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, u8), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, i16), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, u16), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, i32), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, u32), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, i64), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, u64), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, i128), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, u128), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, i256), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, u256), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, i512), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, u512), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, i1024), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + try testArgs(@Vector(3, u1024), @Vector(3, u511), .{ 0, 1, 1 << 510 }); + + try testArgs(@Vector(3, i8), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i512), .{ -1 << 511, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, u8), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, i16), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, u16), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, i32), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, u32), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, i64), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, u64), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, i128), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, u128), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, i256), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, u256), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, i512), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, u512), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, i1024), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + try testArgs(@Vector(3, u1024), @Vector(3, u512), .{ 0, 1, 1 << 511 }); + + try testArgs(@Vector(3, i8), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i513), .{ -1 << 512, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, u8), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, i16), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, u16), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, i32), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, u32), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, i64), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, u64), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, i128), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, u128), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, i256), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, u256), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, i512), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, u512), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, i1024), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + try testArgs(@Vector(3, u1024), @Vector(3, u513), .{ 0, 1, 1 << 512 }); + + try testArgs(@Vector(3, i8), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i1023), .{ -1 << 1022, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, u8), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, i16), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, u16), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, i32), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, u32), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, i64), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, u64), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, i128), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, u128), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, i256), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, u256), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, i512), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, u512), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, i1024), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + try testArgs(@Vector(3, u1024), @Vector(3, u1023), .{ 0, 1, 1 << 1022 }); + + try testArgs(@Vector(3, i8), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i1024), .{ -1 << 1023, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, u8), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, i16), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, u16), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, i32), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, u32), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, i64), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, u64), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, i128), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, u128), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, i256), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, u256), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, i512), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, u512), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, i1024), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + try testArgs(@Vector(3, u1024), @Vector(3, u1024), .{ 0, 1, 1 << 1023 }); + + try testArgs(@Vector(3, i8), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, u8), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, i16), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, u16), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, i32), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, u32), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, i64), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, u64), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, i128), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, u128), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, i256), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, u256), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, i512), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, u512), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, i1024), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, u1024), @Vector(3, i1025), .{ -1 << 1024, -1, 0 }); + try testArgs(@Vector(3, i8), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, u8), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, i16), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, u16), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, i32), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, u32), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, i64), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, u64), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, i128), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, u128), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, i256), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, u256), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, i512), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, u512), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, i1024), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + try testArgs(@Vector(3, u1024), @Vector(3, u1025), .{ 0, 1, 1 << 1024 }); + } + fn testFloatVectors() !void { + @setEvalBranchQuota(6_700); + + try testArgs(@Vector(1, f16), @Vector(1, f16), .{ + 1e0, + }); + try testArgs(@Vector(2, f16), @Vector(2, f16), .{ + -inf(f16), -1e-2, + }); + try testArgs(@Vector(4, f16), @Vector(4, f16), .{ + -1e2, 1e-1, fmax(f16), 1e-2, + }); + try testArgs(@Vector(8, f16), @Vector(8, f16), .{ + -1e-1, tmin(f16), -1e3, fmin(f16), nan(f16), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f16), @Vector(16, f16), .{ + -fmax(f16), -1e0, 1e-4, 1e2, -fmin(f16), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f16), -tmin(f16), -1e-4, inf(f16), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f16), @Vector(32, f16), .{ + -1e3, -tmin(f16), inf(f16), -1e4, -0.0, fmax(f16), 1e2, 1e4, -nan(f16), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f16), -1e0, + 1e3, -1e-3, -fmin(f16), -inf(f16), 1e-3, tmin(f16), fmin(f16), 1e1, 1e-4, -fmax(f16), -1e2, 1e-2, -1e-2, 1e3, inf(f16), -fmin(f16), + }); + + try testArgs(@Vector(1, f32), @Vector(1, f16), .{ + 1e0, + }); + try testArgs(@Vector(2, f32), @Vector(2, f16), .{ + -inf(f16), -1e-2, + }); + try testArgs(@Vector(4, f32), @Vector(4, f16), .{ + -1e2, 1e-1, fmax(f16), 1e-2, + }); + try testArgs(@Vector(8, f32), @Vector(8, f16), .{ + -1e-1, tmin(f16), -1e3, fmin(f16), nan(f16), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f32), @Vector(16, f16), .{ + -fmax(f16), -1e0, 1e-4, 1e2, -fmin(f16), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f16), -tmin(f16), -1e-4, inf(f16), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f32), @Vector(32, f16), .{ + -1e3, -tmin(f16), inf(f16), -1e4, -0.0, fmax(f16), 1e2, 1e4, -nan(f16), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f16), -1e0, + 1e3, -1e-3, -fmin(f16), -inf(f16), 1e-3, tmin(f16), fmin(f16), 1e1, 1e-4, -fmax(f16), -1e2, 1e-2, -1e-2, 1e3, inf(f16), -fmin(f16), + }); + + try testArgs(@Vector(1, f64), @Vector(1, f16), .{ + 1e0, + }); + try testArgs(@Vector(2, f64), @Vector(2, f16), .{ + -inf(f16), -1e-2, + }); + try testArgs(@Vector(4, f64), @Vector(4, f16), .{ + -1e2, 1e-1, fmax(f16), 1e-2, + }); + try testArgs(@Vector(8, f64), @Vector(8, f16), .{ + -1e-1, tmin(f16), -1e3, fmin(f16), nan(f16), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f64), @Vector(16, f16), .{ + -fmax(f16), -1e0, 1e-4, 1e2, -fmin(f16), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f16), -tmin(f16), -1e-4, inf(f16), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f64), @Vector(32, f16), .{ + -1e3, -tmin(f16), inf(f16), -1e4, -0.0, fmax(f16), 1e2, 1e4, -nan(f16), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f16), -1e0, + 1e3, -1e-3, -fmin(f16), -inf(f16), 1e-3, tmin(f16), fmin(f16), 1e1, 1e-4, -fmax(f16), -1e2, 1e-2, -1e-2, 1e3, inf(f16), -fmin(f16), + }); + + try testArgs(@Vector(1, f80), @Vector(1, f16), .{ + 1e0, + }); + try testArgs(@Vector(2, f80), @Vector(2, f16), .{ + -inf(f16), -1e-2, + }); + try testArgs(@Vector(4, f80), @Vector(4, f16), .{ + -1e2, 1e-1, fmax(f16), 1e-2, + }); + try testArgs(@Vector(8, f80), @Vector(8, f16), .{ + -1e-1, tmin(f16), -1e3, fmin(f16), nan(f16), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f80), @Vector(16, f16), .{ + -fmax(f16), -1e0, 1e-4, 1e2, -fmin(f16), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f16), -tmin(f16), -1e-4, inf(f16), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f80), @Vector(32, f16), .{ + -1e3, -tmin(f16), inf(f16), -1e4, -0.0, fmax(f16), 1e2, 1e4, -nan(f16), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f16), -1e0, + 1e3, -1e-3, -fmin(f16), -inf(f16), 1e-3, tmin(f16), fmin(f16), 1e1, 1e-4, -fmax(f16), -1e2, 1e-2, -1e-2, 1e3, inf(f16), -fmin(f16), + }); + + try testArgs(@Vector(1, f128), @Vector(1, f16), .{ + 1e0, + }); + try testArgs(@Vector(2, f128), @Vector(2, f16), .{ + -inf(f16), -1e-2, + }); + try testArgs(@Vector(4, f128), @Vector(4, f16), .{ + -1e2, 1e-1, fmax(f16), 1e-2, + }); + try testArgs(@Vector(8, f128), @Vector(8, f16), .{ + -1e-1, tmin(f16), -1e3, fmin(f16), nan(f16), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f128), @Vector(16, f16), .{ + -fmax(f16), -1e0, 1e-4, 1e2, -fmin(f16), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f16), -tmin(f16), -1e-4, inf(f16), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f128), @Vector(32, f16), .{ + -1e3, -tmin(f16), inf(f16), -1e4, -0.0, fmax(f16), 1e2, 1e4, -nan(f16), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f16), -1e0, + 1e3, -1e-3, -fmin(f16), -inf(f16), 1e-3, tmin(f16), fmin(f16), 1e1, 1e-4, -fmax(f16), -1e2, 1e-2, -1e-2, 1e3, inf(f16), -fmin(f16), + }); + + try testArgs(@Vector(1, f16), @Vector(1, f32), .{ + 1e0, + }); + try testArgs(@Vector(2, f16), @Vector(2, f32), .{ + -inf(f32), -1e-2, + }); + try testArgs(@Vector(4, f16), @Vector(4, f32), .{ + -1e2, 1e-1, fmax(f32), 1e-2, + }); + try testArgs(@Vector(8, f16), @Vector(8, f32), .{ + -1e-1, tmin(f32), -1e3, fmin(f32), nan(f32), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f16), @Vector(16, f32), .{ + -fmax(f32), -1e0, 1e-4, 1e2, -fmin(f32), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f32), -tmin(f32), -1e-4, inf(f32), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f16), @Vector(32, f32), .{ + -1e3, -tmin(f32), inf(f32), -1e4, -0.0, fmax(f32), 1e2, 1e4, -nan(f32), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f32), -1e0, + 1e3, -1e-3, -fmin(f32), -inf(f32), 1e-3, tmin(f32), fmin(f32), 1e1, 1e-4, -fmax(f32), -1e2, 1e-2, -1e-2, 1e3, inf(f32), -fmin(f32), + }); + + try testArgs(@Vector(1, f32), @Vector(1, f32), .{ + 1e0, + }); + try testArgs(@Vector(2, f32), @Vector(2, f32), .{ + -inf(f32), -1e-2, + }); + try testArgs(@Vector(4, f32), @Vector(4, f32), .{ + -1e2, 1e-1, fmax(f32), 1e-2, + }); + try testArgs(@Vector(8, f32), @Vector(8, f32), .{ + -1e-1, tmin(f32), -1e3, fmin(f32), nan(f32), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f32), @Vector(16, f32), .{ + -fmax(f32), -1e0, 1e-4, 1e2, -fmin(f32), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f32), -tmin(f32), -1e-4, inf(f32), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f32), @Vector(32, f32), .{ + -1e3, -tmin(f32), inf(f32), -1e4, -0.0, fmax(f32), 1e2, 1e4, -nan(f32), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f32), -1e0, + 1e3, -1e-3, -fmin(f32), -inf(f32), 1e-3, tmin(f32), fmin(f32), 1e1, 1e-4, -fmax(f32), -1e2, 1e-2, -1e-2, 1e3, inf(f32), -fmin(f32), + }); + + try testArgs(@Vector(1, f64), @Vector(1, f32), .{ + 1e0, + }); + try testArgs(@Vector(2, f64), @Vector(2, f32), .{ + -inf(f32), -1e-2, + }); + try testArgs(@Vector(4, f64), @Vector(4, f32), .{ + -1e2, 1e-1, fmax(f32), 1e-2, + }); + try testArgs(@Vector(8, f64), @Vector(8, f32), .{ + -1e-1, tmin(f32), -1e3, fmin(f32), nan(f32), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f64), @Vector(16, f32), .{ + -fmax(f32), -1e0, 1e-4, 1e2, -fmin(f32), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f32), -tmin(f32), -1e-4, inf(f32), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f64), @Vector(32, f32), .{ + -1e3, -tmin(f32), inf(f32), -1e4, -0.0, fmax(f32), 1e2, 1e4, -nan(f32), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f32), -1e0, + 1e3, -1e-3, -fmin(f32), -inf(f32), 1e-3, tmin(f32), fmin(f32), 1e1, 1e-4, -fmax(f32), -1e2, 1e-2, -1e-2, 1e3, inf(f32), -fmin(f32), + }); + + try testArgs(@Vector(1, f80), @Vector(1, f32), .{ + 1e0, + }); + try testArgs(@Vector(2, f80), @Vector(2, f32), .{ + -inf(f32), -1e-2, + }); + try testArgs(@Vector(4, f80), @Vector(4, f32), .{ + -1e2, 1e-1, fmax(f32), 1e-2, + }); + try testArgs(@Vector(8, f80), @Vector(8, f32), .{ + -1e-1, tmin(f32), -1e3, fmin(f32), nan(f32), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f80), @Vector(16, f32), .{ + -fmax(f32), -1e0, 1e-4, 1e2, -fmin(f32), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f32), -tmin(f32), -1e-4, inf(f32), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f80), @Vector(32, f32), .{ + -1e3, -tmin(f32), inf(f32), -1e4, -0.0, fmax(f32), 1e2, 1e4, -nan(f32), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f32), -1e0, + 1e3, -1e-3, -fmin(f32), -inf(f32), 1e-3, tmin(f32), fmin(f32), 1e1, 1e-4, -fmax(f32), -1e2, 1e-2, -1e-2, 1e3, inf(f32), -fmin(f32), + }); + + try testArgs(@Vector(1, f128), @Vector(1, f32), .{ + 1e0, + }); + try testArgs(@Vector(2, f128), @Vector(2, f32), .{ + -inf(f32), -1e-2, + }); + try testArgs(@Vector(4, f128), @Vector(4, f32), .{ + -1e2, 1e-1, fmax(f32), 1e-2, + }); + try testArgs(@Vector(8, f128), @Vector(8, f32), .{ + -1e-1, tmin(f32), -1e3, fmin(f32), nan(f32), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f128), @Vector(16, f32), .{ + -fmax(f32), -1e0, 1e-4, 1e2, -fmin(f32), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f32), -tmin(f32), -1e-4, inf(f32), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f128), @Vector(32, f32), .{ + -1e3, -tmin(f32), inf(f32), -1e4, -0.0, fmax(f32), 1e2, 1e4, -nan(f32), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f32), -1e0, + 1e3, -1e-3, -fmin(f32), -inf(f32), 1e-3, tmin(f32), fmin(f32), 1e1, 1e-4, -fmax(f32), -1e2, 1e-2, -1e-2, 1e3, inf(f32), -fmin(f32), + }); + + try testArgs(@Vector(1, f16), @Vector(1, f64), .{ + 1e0, + }); + try testArgs(@Vector(2, f16), @Vector(2, f64), .{ + -inf(f64), -1e-2, + }); + try testArgs(@Vector(4, f16), @Vector(4, f64), .{ + -1e2, 1e-1, fmax(f64), 1e-2, + }); + try testArgs(@Vector(8, f16), @Vector(8, f64), .{ + -1e-1, tmin(f64), -1e3, fmin(f64), nan(f64), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f16), @Vector(16, f64), .{ + -fmax(f64), -1e0, 1e-4, 1e2, -fmin(f64), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f64), -tmin(f64), -1e-4, inf(f64), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f16), @Vector(32, f64), .{ + -1e3, -tmin(f64), inf(f64), -1e4, -0.0, fmax(f64), 1e2, 1e4, -nan(f64), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f64), -1e0, + 1e3, -1e-3, -fmin(f64), -inf(f64), 1e-3, tmin(f64), fmin(f64), 1e1, 1e-4, -fmax(f64), -1e2, 1e-2, -1e-2, 1e3, inf(f64), -fmin(f64), + }); + + try testArgs(@Vector(1, f32), @Vector(1, f64), .{ + 1e0, + }); + try testArgs(@Vector(2, f32), @Vector(2, f64), .{ + -inf(f64), -1e-2, + }); + try testArgs(@Vector(4, f32), @Vector(4, f64), .{ + -1e2, 1e-1, fmax(f64), 1e-2, + }); + try testArgs(@Vector(8, f32), @Vector(8, f64), .{ + -1e-1, tmin(f64), -1e3, fmin(f64), nan(f64), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f32), @Vector(16, f64), .{ + -fmax(f64), -1e0, 1e-4, 1e2, -fmin(f64), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f64), -tmin(f64), -1e-4, inf(f64), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f32), @Vector(32, f64), .{ + -1e3, -tmin(f64), inf(f64), -1e4, -0.0, fmax(f64), 1e2, 1e4, -nan(f64), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f64), -1e0, + 1e3, -1e-3, -fmin(f64), -inf(f64), 1e-3, tmin(f64), fmin(f64), 1e1, 1e-4, -fmax(f64), -1e2, 1e-2, -1e-2, 1e3, inf(f64), -fmin(f64), + }); + + try testArgs(@Vector(1, f64), @Vector(1, f64), .{ + 1e0, + }); + try testArgs(@Vector(2, f64), @Vector(2, f64), .{ + -inf(f64), -1e-2, + }); + try testArgs(@Vector(4, f64), @Vector(4, f64), .{ + -1e2, 1e-1, fmax(f64), 1e-2, + }); + try testArgs(@Vector(8, f64), @Vector(8, f64), .{ + -1e-1, tmin(f64), -1e3, fmin(f64), nan(f64), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f64), @Vector(16, f64), .{ + -fmax(f64), -1e0, 1e-4, 1e2, -fmin(f64), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f64), -tmin(f64), -1e-4, inf(f64), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f64), @Vector(32, f64), .{ + -1e3, -tmin(f64), inf(f64), -1e4, -0.0, fmax(f64), 1e2, 1e4, -nan(f64), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f64), -1e0, + 1e3, -1e-3, -fmin(f64), -inf(f64), 1e-3, tmin(f64), fmin(f64), 1e1, 1e-4, -fmax(f64), -1e2, 1e-2, -1e-2, 1e3, inf(f64), -fmin(f64), + }); + + try testArgs(@Vector(1, f80), @Vector(1, f64), .{ + 1e0, + }); + try testArgs(@Vector(2, f80), @Vector(2, f64), .{ + -inf(f64), -1e-2, + }); + try testArgs(@Vector(4, f80), @Vector(4, f64), .{ + -1e2, 1e-1, fmax(f64), 1e-2, + }); + try testArgs(@Vector(8, f80), @Vector(8, f64), .{ + -1e-1, tmin(f64), -1e3, fmin(f64), nan(f64), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f80), @Vector(16, f64), .{ + -fmax(f64), -1e0, 1e-4, 1e2, -fmin(f64), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f64), -tmin(f64), -1e-4, inf(f64), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f80), @Vector(32, f64), .{ + -1e3, -tmin(f64), inf(f64), -1e4, -0.0, fmax(f64), 1e2, 1e4, -nan(f64), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f64), -1e0, + 1e3, -1e-3, -fmin(f64), -inf(f64), 1e-3, tmin(f64), fmin(f64), 1e1, 1e-4, -fmax(f64), -1e2, 1e-2, -1e-2, 1e3, inf(f64), -fmin(f64), + }); + + try testArgs(@Vector(1, f128), @Vector(1, f64), .{ + 1e0, + }); + try testArgs(@Vector(2, f128), @Vector(2, f64), .{ + -inf(f64), -1e-2, + }); + try testArgs(@Vector(4, f128), @Vector(4, f64), .{ + -1e2, 1e-1, fmax(f64), 1e-2, + }); + try testArgs(@Vector(8, f128), @Vector(8, f64), .{ + -1e-1, tmin(f64), -1e3, fmin(f64), nan(f64), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f128), @Vector(16, f64), .{ + -fmax(f64), -1e0, 1e-4, 1e2, -fmin(f64), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f64), -tmin(f64), -1e-4, inf(f64), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f128), @Vector(32, f64), .{ + -1e3, -tmin(f64), inf(f64), -1e4, -0.0, fmax(f64), 1e2, 1e4, -nan(f64), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f64), -1e0, + 1e3, -1e-3, -fmin(f64), -inf(f64), 1e-3, tmin(f64), fmin(f64), 1e1, 1e-4, -fmax(f64), -1e2, 1e-2, -1e-2, 1e3, inf(f64), -fmin(f64), + }); + + try testArgs(@Vector(1, f16), @Vector(1, f80), .{ + 1e0, + }); + try testArgs(@Vector(2, f16), @Vector(2, f80), .{ + -inf(f80), -1e-2, + }); + try testArgs(@Vector(4, f16), @Vector(4, f80), .{ + -1e2, 1e-1, fmax(f80), 1e-2, + }); + try testArgs(@Vector(8, f16), @Vector(8, f80), .{ + -1e-1, tmin(f80), -1e3, fmin(f80), nan(f80), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f16), @Vector(16, f80), .{ + -fmax(f80), -1e0, 1e-4, 1e2, -fmin(f80), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f80), -tmin(f80), -1e-4, inf(f80), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f16), @Vector(32, f80), .{ + -1e3, -tmin(f80), inf(f80), -1e4, -0.0, fmax(f80), 1e2, 1e4, -nan(f80), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f80), -1e0, + 1e3, -1e-3, -fmin(f80), -inf(f80), 1e-3, tmin(f80), fmin(f80), 1e1, 1e-4, -fmax(f80), -1e2, 1e-2, -1e-2, 1e3, inf(f80), -fmin(f80), + }); + + try testArgs(@Vector(1, f32), @Vector(1, f80), .{ + 1e0, + }); + try testArgs(@Vector(2, f32), @Vector(2, f80), .{ + -inf(f80), -1e-2, + }); + try testArgs(@Vector(4, f32), @Vector(4, f80), .{ + -1e2, 1e-1, fmax(f80), 1e-2, + }); + try testArgs(@Vector(8, f32), @Vector(8, f80), .{ + -1e-1, tmin(f80), -1e3, fmin(f80), nan(f80), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f32), @Vector(16, f80), .{ + -fmax(f80), -1e0, 1e-4, 1e2, -fmin(f80), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f80), -tmin(f80), -1e-4, inf(f80), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f32), @Vector(32, f80), .{ + -1e3, -tmin(f80), inf(f80), -1e4, -0.0, fmax(f80), 1e2, 1e4, -nan(f80), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f80), -1e0, + 1e3, -1e-3, -fmin(f80), -inf(f80), 1e-3, tmin(f80), fmin(f80), 1e1, 1e-4, -fmax(f80), -1e2, 1e-2, -1e-2, 1e3, inf(f80), -fmin(f80), + }); + + try testArgs(@Vector(1, f64), @Vector(1, f80), .{ + 1e0, + }); + try testArgs(@Vector(2, f64), @Vector(2, f80), .{ + -inf(f80), -1e-2, + }); + try testArgs(@Vector(4, f64), @Vector(4, f80), .{ + -1e2, 1e-1, fmax(f80), 1e-2, + }); + try testArgs(@Vector(8, f64), @Vector(8, f80), .{ + -1e-1, tmin(f80), -1e3, fmin(f80), nan(f80), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f64), @Vector(16, f80), .{ + -fmax(f80), -1e0, 1e-4, 1e2, -fmin(f80), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f80), -tmin(f80), -1e-4, inf(f80), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f64), @Vector(32, f80), .{ + -1e3, -tmin(f80), inf(f80), -1e4, -0.0, fmax(f80), 1e2, 1e4, -nan(f80), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f80), -1e0, + 1e3, -1e-3, -fmin(f80), -inf(f80), 1e-3, tmin(f80), fmin(f80), 1e1, 1e-4, -fmax(f80), -1e2, 1e-2, -1e-2, 1e3, inf(f80), -fmin(f80), + }); + + try testArgs(@Vector(1, f80), @Vector(1, f80), .{ + 1e0, + }); + try testArgs(@Vector(2, f80), @Vector(2, f80), .{ + -inf(f80), -1e-2, + }); + try testArgs(@Vector(4, f80), @Vector(4, f80), .{ + -1e2, 1e-1, fmax(f80), 1e-2, + }); + try testArgs(@Vector(8, f80), @Vector(8, f80), .{ + -1e-1, tmin(f80), -1e3, fmin(f80), nan(f80), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f80), @Vector(16, f80), .{ + -fmax(f80), -1e0, 1e-4, 1e2, -fmin(f80), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f80), -tmin(f80), -1e-4, inf(f80), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f80), @Vector(32, f80), .{ + -1e3, -tmin(f80), inf(f80), -1e4, -0.0, fmax(f80), 1e2, 1e4, -nan(f80), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f80), -1e0, + 1e3, -1e-3, -fmin(f80), -inf(f80), 1e-3, tmin(f80), fmin(f80), 1e1, 1e-4, -fmax(f80), -1e2, 1e-2, -1e-2, 1e3, inf(f80), -fmin(f80), + }); + + try testArgs(@Vector(1, f128), @Vector(1, f80), .{ + 1e0, + }); + try testArgs(@Vector(2, f128), @Vector(2, f80), .{ + -inf(f80), -1e-2, + }); + try testArgs(@Vector(4, f128), @Vector(4, f80), .{ + -1e2, 1e-1, fmax(f80), 1e-2, + }); + try testArgs(@Vector(8, f128), @Vector(8, f80), .{ + -1e-1, tmin(f80), -1e3, fmin(f80), nan(f80), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f128), @Vector(16, f80), .{ + -fmax(f80), -1e0, 1e-4, 1e2, -fmin(f80), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f80), -tmin(f80), -1e-4, inf(f80), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f128), @Vector(32, f80), .{ + -1e3, -tmin(f80), inf(f80), -1e4, -0.0, fmax(f80), 1e2, 1e4, -nan(f80), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f80), -1e0, + 1e3, -1e-3, -fmin(f80), -inf(f80), 1e-3, tmin(f80), fmin(f80), 1e1, 1e-4, -fmax(f80), -1e2, 1e-2, -1e-2, 1e3, inf(f80), -fmin(f80), + }); + + try testArgs(@Vector(1, f16), @Vector(1, f128), .{ + 1e0, + }); + try testArgs(@Vector(2, f16), @Vector(2, f128), .{ + -inf(f128), -1e-2, + }); + try testArgs(@Vector(4, f16), @Vector(4, f128), .{ + -1e2, 1e-1, fmax(f128), 1e-2, + }); + try testArgs(@Vector(8, f16), @Vector(8, f128), .{ + -1e-1, tmin(f128), -1e3, fmin(f128), nan(f128), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f16), @Vector(16, f128), .{ + -fmax(f128), -1e0, 1e-4, 1e2, -fmin(f128), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f128), -tmin(f128), -1e-4, inf(f128), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f16), @Vector(32, f128), .{ + -1e3, -tmin(f128), inf(f128), -1e4, -0.0, fmax(f128), 1e2, 1e4, -nan(f128), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f128), -1e0, + 1e3, -1e-3, -fmin(f128), -inf(f128), 1e-3, tmin(f128), fmin(f128), 1e1, 1e-4, -fmax(f128), -1e2, 1e-2, -1e-2, 1e3, inf(f128), -fmin(f128), + }); + + try testArgs(@Vector(1, f32), @Vector(1, f128), .{ + 1e0, + }); + try testArgs(@Vector(2, f32), @Vector(2, f128), .{ + -inf(f128), -1e-2, + }); + try testArgs(@Vector(4, f32), @Vector(4, f128), .{ + -1e2, 1e-1, fmax(f128), 1e-2, + }); + try testArgs(@Vector(8, f32), @Vector(8, f128), .{ + -1e-1, tmin(f128), -1e3, fmin(f128), nan(f128), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f32), @Vector(16, f128), .{ + -fmax(f128), -1e0, 1e-4, 1e2, -fmin(f128), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f128), -tmin(f128), -1e-4, inf(f128), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f32), @Vector(32, f128), .{ + -1e3, -tmin(f128), inf(f128), -1e4, -0.0, fmax(f128), 1e2, 1e4, -nan(f128), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f128), -1e0, + 1e3, -1e-3, -fmin(f128), -inf(f128), 1e-3, tmin(f128), fmin(f128), 1e1, 1e-4, -fmax(f128), -1e2, 1e-2, -1e-2, 1e3, inf(f128), -fmin(f128), + }); + + try testArgs(@Vector(1, f64), @Vector(1, f128), .{ + 1e0, + }); + try testArgs(@Vector(2, f64), @Vector(2, f128), .{ + -inf(f128), -1e-2, + }); + try testArgs(@Vector(4, f64), @Vector(4, f128), .{ + -1e2, 1e-1, fmax(f128), 1e-2, + }); + try testArgs(@Vector(8, f64), @Vector(8, f128), .{ + -1e-1, tmin(f128), -1e3, fmin(f128), nan(f128), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f64), @Vector(16, f128), .{ + -fmax(f128), -1e0, 1e-4, 1e2, -fmin(f128), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f128), -tmin(f128), -1e-4, inf(f128), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f64), @Vector(32, f128), .{ + -1e3, -tmin(f128), inf(f128), -1e4, -0.0, fmax(f128), 1e2, 1e4, -nan(f128), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f128), -1e0, + 1e3, -1e-3, -fmin(f128), -inf(f128), 1e-3, tmin(f128), fmin(f128), 1e1, 1e-4, -fmax(f128), -1e2, 1e-2, -1e-2, 1e3, inf(f128), -fmin(f128), + }); + + try testArgs(@Vector(1, f80), @Vector(1, f128), .{ + 1e0, + }); + try testArgs(@Vector(2, f80), @Vector(2, f128), .{ + -inf(f128), -1e-2, + }); + try testArgs(@Vector(4, f80), @Vector(4, f128), .{ + -1e2, 1e-1, fmax(f128), 1e-2, + }); + try testArgs(@Vector(8, f80), @Vector(8, f128), .{ + -1e-1, tmin(f128), -1e3, fmin(f128), nan(f128), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f80), @Vector(16, f128), .{ + -fmax(f128), -1e0, 1e-4, 1e2, -fmin(f128), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f128), -tmin(f128), -1e-4, inf(f128), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f80), @Vector(32, f128), .{ + -1e3, -tmin(f128), inf(f128), -1e4, -0.0, fmax(f128), 1e2, 1e4, -nan(f128), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f128), -1e0, + 1e3, -1e-3, -fmin(f128), -inf(f128), 1e-3, tmin(f128), fmin(f128), 1e1, 1e-4, -fmax(f128), -1e2, 1e-2, -1e-2, 1e3, inf(f128), -fmin(f128), + }); + + try testArgs(@Vector(1, f128), @Vector(1, f128), .{ + 1e0, + }); + try testArgs(@Vector(2, f128), @Vector(2, f128), .{ + -inf(f128), -1e-2, + }); + try testArgs(@Vector(4, f128), @Vector(4, f128), .{ + -1e2, 1e-1, fmax(f128), 1e-2, + }); + try testArgs(@Vector(8, f128), @Vector(8, f128), .{ + -1e-1, tmin(f128), -1e3, fmin(f128), nan(f128), -1e-3, 1e1, 1e4, + }); + try testArgs(@Vector(16, f128), @Vector(16, f128), .{ + -fmax(f128), -1e0, 1e-4, 1e2, -fmin(f128), -1e1, 0.0, -1e4, -0.0, 1e3, -nan(f128), -tmin(f128), -1e-4, inf(f128), 1e-3, -1e-1, + }); + try testArgs(@Vector(32, f128), @Vector(32, f128), .{ + -1e3, -tmin(f128), inf(f128), -1e4, -0.0, fmax(f128), 1e2, 1e4, -nan(f128), 0.0, -1e-4, -1e1, 1e0, 1e-1, nan(f128), -1e0, + 1e3, -1e-3, -fmin(f128), -inf(f128), 1e-3, tmin(f128), fmin(f128), 1e1, 1e-4, -fmax(f128), -1e2, 1e-2, -1e-2, 1e3, inf(f128), -fmin(f128), + }); + } + }; +} + fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) type { return struct { // noinline so that `mem_lhs` and `mem_rhs` are on the stack @@ -1714,18 +7206,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, -nan(f16), -nan(f16)); try testArgs(f16, -nan(f16), -inf(f16)); try testArgs(f16, -nan(f16), -fmax(f16)); - try testArgs(f16, -nan(f16), -10.0); - try testArgs(f16, -nan(f16), -1.0); - try testArgs(f16, -nan(f16), -0.1); + try testArgs(f16, -nan(f16), -1e1); + try testArgs(f16, -nan(f16), -1e0); + try testArgs(f16, -nan(f16), -1e-1); try testArgs(f16, -nan(f16), -fmin(f16)); try testArgs(f16, -nan(f16), -tmin(f16)); try testArgs(f16, -nan(f16), -0.0); try testArgs(f16, -nan(f16), 0.0); try testArgs(f16, -nan(f16), tmin(f16)); try testArgs(f16, -nan(f16), fmin(f16)); - try testArgs(f16, -nan(f16), 0.1); - try testArgs(f16, -nan(f16), 1.0); - try testArgs(f16, -nan(f16), 10.0); + try testArgs(f16, -nan(f16), 1e-1); + try testArgs(f16, -nan(f16), 1e0); + try testArgs(f16, -nan(f16), 1e1); try testArgs(f16, -nan(f16), fmax(f16)); try testArgs(f16, -nan(f16), inf(f16)); try testArgs(f16, -nan(f16), nan(f16)); @@ -1733,18 +7225,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, -inf(f16), -nan(f16)); try testArgs(f16, -inf(f16), -inf(f16)); try testArgs(f16, -inf(f16), -fmax(f16)); - try testArgs(f16, -inf(f16), -10.0); - try testArgs(f16, -inf(f16), -1.0); - try testArgs(f16, -inf(f16), -0.1); + try testArgs(f16, -inf(f16), -1e1); + try testArgs(f16, -inf(f16), -1e0); + try testArgs(f16, -inf(f16), -1e-1); try testArgs(f16, -inf(f16), -fmin(f16)); try testArgs(f16, -inf(f16), -tmin(f16)); try testArgs(f16, -inf(f16), -0.0); try testArgs(f16, -inf(f16), 0.0); try testArgs(f16, -inf(f16), tmin(f16)); try testArgs(f16, -inf(f16), fmin(f16)); - try testArgs(f16, -inf(f16), 0.1); - try testArgs(f16, -inf(f16), 1.0); - try testArgs(f16, -inf(f16), 10.0); + try testArgs(f16, -inf(f16), 1e-1); + try testArgs(f16, -inf(f16), 1e0); + try testArgs(f16, -inf(f16), 1e1); try testArgs(f16, -inf(f16), fmax(f16)); try testArgs(f16, -inf(f16), inf(f16)); try testArgs(f16, -inf(f16), nan(f16)); @@ -1752,94 +7244,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, -fmax(f16), -nan(f16)); try testArgs(f16, -fmax(f16), -inf(f16)); try testArgs(f16, -fmax(f16), -fmax(f16)); - try testArgs(f16, -fmax(f16), -10.0); - try testArgs(f16, -fmax(f16), -1.0); - try testArgs(f16, -fmax(f16), -0.1); + try testArgs(f16, -fmax(f16), -1e1); + try testArgs(f16, -fmax(f16), -1e0); + try testArgs(f16, -fmax(f16), -1e-1); try testArgs(f16, -fmax(f16), -fmin(f16)); try testArgs(f16, -fmax(f16), -tmin(f16)); try testArgs(f16, -fmax(f16), -0.0); try testArgs(f16, -fmax(f16), 0.0); try testArgs(f16, -fmax(f16), tmin(f16)); try testArgs(f16, -fmax(f16), fmin(f16)); - try testArgs(f16, -fmax(f16), 0.1); - try testArgs(f16, -fmax(f16), 1.0); - try testArgs(f16, -fmax(f16), 10.0); + try testArgs(f16, -fmax(f16), 1e-1); + try testArgs(f16, -fmax(f16), 1e0); + try testArgs(f16, -fmax(f16), 1e1); try testArgs(f16, -fmax(f16), fmax(f16)); try testArgs(f16, -fmax(f16), inf(f16)); try testArgs(f16, -fmax(f16), nan(f16)); - try testArgs(f16, -10.0, -nan(f16)); - try testArgs(f16, -10.0, -inf(f16)); - try testArgs(f16, -10.0, -fmax(f16)); - try testArgs(f16, -10.0, -10.0); - try testArgs(f16, -10.0, -1.0); - try testArgs(f16, -10.0, -0.1); - try testArgs(f16, -10.0, -fmin(f16)); - try testArgs(f16, -10.0, -tmin(f16)); - try testArgs(f16, -10.0, -0.0); - try testArgs(f16, -10.0, 0.0); - try testArgs(f16, -10.0, tmin(f16)); - try testArgs(f16, -10.0, fmin(f16)); - try testArgs(f16, -10.0, 0.1); - try testArgs(f16, -10.0, 1.0); - try testArgs(f16, -10.0, 10.0); - try testArgs(f16, -10.0, fmax(f16)); - try testArgs(f16, -10.0, inf(f16)); - try testArgs(f16, -10.0, nan(f16)); + try testArgs(f16, -1e1, -nan(f16)); + try testArgs(f16, -1e1, -inf(f16)); + try testArgs(f16, -1e1, -fmax(f16)); + try testArgs(f16, -1e1, -1e1); + try testArgs(f16, -1e1, -1e0); + try testArgs(f16, -1e1, -1e-1); + try testArgs(f16, -1e1, -fmin(f16)); + try testArgs(f16, -1e1, -tmin(f16)); + try testArgs(f16, -1e1, -0.0); + try testArgs(f16, -1e1, 0.0); + try testArgs(f16, -1e1, tmin(f16)); + try testArgs(f16, -1e1, fmin(f16)); + try testArgs(f16, -1e1, 1e-1); + try testArgs(f16, -1e1, 1e0); + try testArgs(f16, -1e1, 1e1); + try testArgs(f16, -1e1, fmax(f16)); + try testArgs(f16, -1e1, inf(f16)); + try testArgs(f16, -1e1, nan(f16)); - try testArgs(f16, -1.0, -nan(f16)); - try testArgs(f16, -1.0, -inf(f16)); - try testArgs(f16, -1.0, -fmax(f16)); - try testArgs(f16, -1.0, -10.0); - try testArgs(f16, -1.0, -1.0); - try testArgs(f16, -1.0, -0.1); - try testArgs(f16, -1.0, -fmin(f16)); - try testArgs(f16, -1.0, -tmin(f16)); - try testArgs(f16, -1.0, -0.0); - try testArgs(f16, -1.0, 0.0); - try testArgs(f16, -1.0, tmin(f16)); - try testArgs(f16, -1.0, fmin(f16)); - try testArgs(f16, -1.0, 0.1); - try testArgs(f16, -1.0, 1.0); - try testArgs(f16, -1.0, 10.0); - try testArgs(f16, -1.0, fmax(f16)); - try testArgs(f16, -1.0, inf(f16)); - try testArgs(f16, -1.0, nan(f16)); + try testArgs(f16, -1e0, -nan(f16)); + try testArgs(f16, -1e0, -inf(f16)); + try testArgs(f16, -1e0, -fmax(f16)); + try testArgs(f16, -1e0, -1e1); + try testArgs(f16, -1e0, -1e0); + try testArgs(f16, -1e0, -1e-1); + try testArgs(f16, -1e0, -fmin(f16)); + try testArgs(f16, -1e0, -tmin(f16)); + try testArgs(f16, -1e0, -0.0); + try testArgs(f16, -1e0, 0.0); + try testArgs(f16, -1e0, tmin(f16)); + try testArgs(f16, -1e0, fmin(f16)); + try testArgs(f16, -1e0, 1e-1); + try testArgs(f16, -1e0, 1e0); + try testArgs(f16, -1e0, 1e1); + try testArgs(f16, -1e0, fmax(f16)); + try testArgs(f16, -1e0, inf(f16)); + try testArgs(f16, -1e0, nan(f16)); - try testArgs(f16, -0.1, -nan(f16)); - try testArgs(f16, -0.1, -inf(f16)); - try testArgs(f16, -0.1, -fmax(f16)); - try testArgs(f16, -0.1, -10.0); - try testArgs(f16, -0.1, -1.0); - try testArgs(f16, -0.1, -0.1); - try testArgs(f16, -0.1, -fmin(f16)); - try testArgs(f16, -0.1, -tmin(f16)); - try testArgs(f16, -0.1, -0.0); - try testArgs(f16, -0.1, 0.0); - try testArgs(f16, -0.1, tmin(f16)); - try testArgs(f16, -0.1, fmin(f16)); - try testArgs(f16, -0.1, 0.1); - try testArgs(f16, -0.1, 1.0); - try testArgs(f16, -0.1, 10.0); - try testArgs(f16, -0.1, fmax(f16)); - try testArgs(f16, -0.1, inf(f16)); - try testArgs(f16, -0.1, nan(f16)); + try testArgs(f16, -1e-1, -nan(f16)); + try testArgs(f16, -1e-1, -inf(f16)); + try testArgs(f16, -1e-1, -fmax(f16)); + try testArgs(f16, -1e-1, -1e1); + try testArgs(f16, -1e-1, -1e0); + try testArgs(f16, -1e-1, -1e-1); + try testArgs(f16, -1e-1, -fmin(f16)); + try testArgs(f16, -1e-1, -tmin(f16)); + try testArgs(f16, -1e-1, -0.0); + try testArgs(f16, -1e-1, 0.0); + try testArgs(f16, -1e-1, tmin(f16)); + try testArgs(f16, -1e-1, fmin(f16)); + try testArgs(f16, -1e-1, 1e-1); + try testArgs(f16, -1e-1, 1e0); + try testArgs(f16, -1e-1, 1e1); + try testArgs(f16, -1e-1, fmax(f16)); + try testArgs(f16, -1e-1, inf(f16)); + try testArgs(f16, -1e-1, nan(f16)); try testArgs(f16, -fmin(f16), -nan(f16)); try testArgs(f16, -fmin(f16), -inf(f16)); try testArgs(f16, -fmin(f16), -fmax(f16)); - try testArgs(f16, -fmin(f16), -10.0); - try testArgs(f16, -fmin(f16), -1.0); - try testArgs(f16, -fmin(f16), -0.1); + try testArgs(f16, -fmin(f16), -1e1); + try testArgs(f16, -fmin(f16), -1e0); + try testArgs(f16, -fmin(f16), -1e-1); try testArgs(f16, -fmin(f16), -fmin(f16)); try testArgs(f16, -fmin(f16), -tmin(f16)); try testArgs(f16, -fmin(f16), -0.0); try testArgs(f16, -fmin(f16), 0.0); try testArgs(f16, -fmin(f16), tmin(f16)); try testArgs(f16, -fmin(f16), fmin(f16)); - try testArgs(f16, -fmin(f16), 0.1); - try testArgs(f16, -fmin(f16), 1.0); - try testArgs(f16, -fmin(f16), 10.0); + try testArgs(f16, -fmin(f16), 1e-1); + try testArgs(f16, -fmin(f16), 1e0); + try testArgs(f16, -fmin(f16), 1e1); try testArgs(f16, -fmin(f16), fmax(f16)); try testArgs(f16, -fmin(f16), inf(f16)); try testArgs(f16, -fmin(f16), nan(f16)); @@ -1847,18 +7339,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, -tmin(f16), -nan(f16)); try testArgs(f16, -tmin(f16), -inf(f16)); try testArgs(f16, -tmin(f16), -fmax(f16)); - try testArgs(f16, -tmin(f16), -10.0); - try testArgs(f16, -tmin(f16), -1.0); - try testArgs(f16, -tmin(f16), -0.1); + try testArgs(f16, -tmin(f16), -1e1); + try testArgs(f16, -tmin(f16), -1e0); + try testArgs(f16, -tmin(f16), -1e-1); try testArgs(f16, -tmin(f16), -fmin(f16)); try testArgs(f16, -tmin(f16), -tmin(f16)); try testArgs(f16, -tmin(f16), -0.0); try testArgs(f16, -tmin(f16), 0.0); try testArgs(f16, -tmin(f16), tmin(f16)); try testArgs(f16, -tmin(f16), fmin(f16)); - try testArgs(f16, -tmin(f16), 0.1); - try testArgs(f16, -tmin(f16), 1.0); - try testArgs(f16, -tmin(f16), 10.0); + try testArgs(f16, -tmin(f16), 1e-1); + try testArgs(f16, -tmin(f16), 1e0); + try testArgs(f16, -tmin(f16), 1e1); try testArgs(f16, -tmin(f16), fmax(f16)); try testArgs(f16, -tmin(f16), inf(f16)); try testArgs(f16, -tmin(f16), nan(f16)); @@ -1866,18 +7358,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, -0.0, -nan(f16)); try testArgs(f16, -0.0, -inf(f16)); try testArgs(f16, -0.0, -fmax(f16)); - try testArgs(f16, -0.0, -10.0); - try testArgs(f16, -0.0, -1.0); - try testArgs(f16, -0.0, -0.1); + try testArgs(f16, -0.0, -1e1); + try testArgs(f16, -0.0, -1e0); + try testArgs(f16, -0.0, -1e-1); try testArgs(f16, -0.0, -fmin(f16)); try testArgs(f16, -0.0, -tmin(f16)); try testArgs(f16, -0.0, -0.0); try testArgs(f16, -0.0, 0.0); try testArgs(f16, -0.0, tmin(f16)); try testArgs(f16, -0.0, fmin(f16)); - try testArgs(f16, -0.0, 0.1); - try testArgs(f16, -0.0, 1.0); - try testArgs(f16, -0.0, 10.0); + try testArgs(f16, -0.0, 1e-1); + try testArgs(f16, -0.0, 1e0); + try testArgs(f16, -0.0, 1e1); try testArgs(f16, -0.0, fmax(f16)); try testArgs(f16, -0.0, inf(f16)); try testArgs(f16, -0.0, nan(f16)); @@ -1885,18 +7377,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, 0.0, -nan(f16)); try testArgs(f16, 0.0, -inf(f16)); try testArgs(f16, 0.0, -fmax(f16)); - try testArgs(f16, 0.0, -10.0); - try testArgs(f16, 0.0, -1.0); - try testArgs(f16, 0.0, -0.1); + try testArgs(f16, 0.0, -1e1); + try testArgs(f16, 0.0, -1e0); + try testArgs(f16, 0.0, -1e-1); try testArgs(f16, 0.0, -fmin(f16)); try testArgs(f16, 0.0, -tmin(f16)); try testArgs(f16, 0.0, -0.0); try testArgs(f16, 0.0, 0.0); try testArgs(f16, 0.0, tmin(f16)); try testArgs(f16, 0.0, fmin(f16)); - try testArgs(f16, 0.0, 0.1); - try testArgs(f16, 0.0, 1.0); - try testArgs(f16, 0.0, 10.0); + try testArgs(f16, 0.0, 1e-1); + try testArgs(f16, 0.0, 1e0); + try testArgs(f16, 0.0, 1e1); try testArgs(f16, 0.0, fmax(f16)); try testArgs(f16, 0.0, inf(f16)); try testArgs(f16, 0.0, nan(f16)); @@ -1904,18 +7396,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, tmin(f16), -nan(f16)); try testArgs(f16, tmin(f16), -inf(f16)); try testArgs(f16, tmin(f16), -fmax(f16)); - try testArgs(f16, tmin(f16), -10.0); - try testArgs(f16, tmin(f16), -1.0); - try testArgs(f16, tmin(f16), -0.1); + try testArgs(f16, tmin(f16), -1e1); + try testArgs(f16, tmin(f16), -1e0); + try testArgs(f16, tmin(f16), -1e-1); try testArgs(f16, tmin(f16), -fmin(f16)); try testArgs(f16, tmin(f16), -tmin(f16)); try testArgs(f16, tmin(f16), -0.0); try testArgs(f16, tmin(f16), 0.0); try testArgs(f16, tmin(f16), tmin(f16)); try testArgs(f16, tmin(f16), fmin(f16)); - try testArgs(f16, tmin(f16), 0.1); - try testArgs(f16, tmin(f16), 1.0); - try testArgs(f16, tmin(f16), 10.0); + try testArgs(f16, tmin(f16), 1e-1); + try testArgs(f16, tmin(f16), 1e0); + try testArgs(f16, tmin(f16), 1e1); try testArgs(f16, tmin(f16), fmax(f16)); try testArgs(f16, tmin(f16), inf(f16)); try testArgs(f16, tmin(f16), nan(f16)); @@ -1923,94 +7415,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, fmin(f16), -nan(f16)); try testArgs(f16, fmin(f16), -inf(f16)); try testArgs(f16, fmin(f16), -fmax(f16)); - try testArgs(f16, fmin(f16), -10.0); - try testArgs(f16, fmin(f16), -1.0); - try testArgs(f16, fmin(f16), -0.1); + try testArgs(f16, fmin(f16), -1e1); + try testArgs(f16, fmin(f16), -1e0); + try testArgs(f16, fmin(f16), -1e-1); try testArgs(f16, fmin(f16), -fmin(f16)); try testArgs(f16, fmin(f16), -tmin(f16)); try testArgs(f16, fmin(f16), -0.0); try testArgs(f16, fmin(f16), 0.0); try testArgs(f16, fmin(f16), tmin(f16)); try testArgs(f16, fmin(f16), fmin(f16)); - try testArgs(f16, fmin(f16), 0.1); - try testArgs(f16, fmin(f16), 1.0); - try testArgs(f16, fmin(f16), 10.0); + try testArgs(f16, fmin(f16), 1e-1); + try testArgs(f16, fmin(f16), 1e0); + try testArgs(f16, fmin(f16), 1e1); try testArgs(f16, fmin(f16), fmax(f16)); try testArgs(f16, fmin(f16), inf(f16)); try testArgs(f16, fmin(f16), nan(f16)); - try testArgs(f16, 0.1, -nan(f16)); - try testArgs(f16, 0.1, -inf(f16)); - try testArgs(f16, 0.1, -fmax(f16)); - try testArgs(f16, 0.1, -10.0); - try testArgs(f16, 0.1, -1.0); - try testArgs(f16, 0.1, -0.1); - try testArgs(f16, 0.1, -fmin(f16)); - try testArgs(f16, 0.1, -tmin(f16)); - try testArgs(f16, 0.1, -0.0); - try testArgs(f16, 0.1, 0.0); - try testArgs(f16, 0.1, tmin(f16)); - try testArgs(f16, 0.1, fmin(f16)); - try testArgs(f16, 0.1, 0.1); - try testArgs(f16, 0.1, 1.0); - try testArgs(f16, 0.1, 10.0); - try testArgs(f16, 0.1, fmax(f16)); - try testArgs(f16, 0.1, inf(f16)); - try testArgs(f16, 0.1, nan(f16)); + try testArgs(f16, 1e-1, -nan(f16)); + try testArgs(f16, 1e-1, -inf(f16)); + try testArgs(f16, 1e-1, -fmax(f16)); + try testArgs(f16, 1e-1, -1e1); + try testArgs(f16, 1e-1, -1e0); + try testArgs(f16, 1e-1, -1e-1); + try testArgs(f16, 1e-1, -fmin(f16)); + try testArgs(f16, 1e-1, -tmin(f16)); + try testArgs(f16, 1e-1, -0.0); + try testArgs(f16, 1e-1, 0.0); + try testArgs(f16, 1e-1, tmin(f16)); + try testArgs(f16, 1e-1, fmin(f16)); + try testArgs(f16, 1e-1, 1e-1); + try testArgs(f16, 1e-1, 1e0); + try testArgs(f16, 1e-1, 1e1); + try testArgs(f16, 1e-1, fmax(f16)); + try testArgs(f16, 1e-1, inf(f16)); + try testArgs(f16, 1e-1, nan(f16)); - try testArgs(f16, 1.0, -nan(f16)); - try testArgs(f16, 1.0, -inf(f16)); - try testArgs(f16, 1.0, -fmax(f16)); - try testArgs(f16, 1.0, -10.0); - try testArgs(f16, 1.0, -1.0); - try testArgs(f16, 1.0, -0.1); - try testArgs(f16, 1.0, -fmin(f16)); - try testArgs(f16, 1.0, -tmin(f16)); - try testArgs(f16, 1.0, -0.0); - try testArgs(f16, 1.0, 0.0); - try testArgs(f16, 1.0, tmin(f16)); - try testArgs(f16, 1.0, fmin(f16)); - try testArgs(f16, 1.0, 0.1); - try testArgs(f16, 1.0, 1.0); - try testArgs(f16, 1.0, 10.0); - try testArgs(f16, 1.0, fmax(f16)); - try testArgs(f16, 1.0, inf(f16)); - try testArgs(f16, 1.0, nan(f16)); + try testArgs(f16, 1e0, -nan(f16)); + try testArgs(f16, 1e0, -inf(f16)); + try testArgs(f16, 1e0, -fmax(f16)); + try testArgs(f16, 1e0, -1e1); + try testArgs(f16, 1e0, -1e0); + try testArgs(f16, 1e0, -1e-1); + try testArgs(f16, 1e0, -fmin(f16)); + try testArgs(f16, 1e0, -tmin(f16)); + try testArgs(f16, 1e0, -0.0); + try testArgs(f16, 1e0, 0.0); + try testArgs(f16, 1e0, tmin(f16)); + try testArgs(f16, 1e0, fmin(f16)); + try testArgs(f16, 1e0, 1e-1); + try testArgs(f16, 1e0, 1e0); + try testArgs(f16, 1e0, 1e1); + try testArgs(f16, 1e0, fmax(f16)); + try testArgs(f16, 1e0, inf(f16)); + try testArgs(f16, 1e0, nan(f16)); - try testArgs(f16, 10.0, -nan(f16)); - try testArgs(f16, 10.0, -inf(f16)); - try testArgs(f16, 10.0, -fmax(f16)); - try testArgs(f16, 10.0, -10.0); - try testArgs(f16, 10.0, -1.0); - try testArgs(f16, 10.0, -0.1); - try testArgs(f16, 10.0, -fmin(f16)); - try testArgs(f16, 10.0, -tmin(f16)); - try testArgs(f16, 10.0, -0.0); - try testArgs(f16, 10.0, 0.0); - try testArgs(f16, 10.0, tmin(f16)); - try testArgs(f16, 10.0, fmin(f16)); - try testArgs(f16, 10.0, 0.1); - try testArgs(f16, 10.0, 1.0); - try testArgs(f16, 10.0, 10.0); - try testArgs(f16, 10.0, fmax(f16)); - try testArgs(f16, 10.0, inf(f16)); - try testArgs(f16, 10.0, nan(f16)); + try testArgs(f16, 1e1, -nan(f16)); + try testArgs(f16, 1e1, -inf(f16)); + try testArgs(f16, 1e1, -fmax(f16)); + try testArgs(f16, 1e1, -1e1); + try testArgs(f16, 1e1, -1e0); + try testArgs(f16, 1e1, -1e-1); + try testArgs(f16, 1e1, -fmin(f16)); + try testArgs(f16, 1e1, -tmin(f16)); + try testArgs(f16, 1e1, -0.0); + try testArgs(f16, 1e1, 0.0); + try testArgs(f16, 1e1, tmin(f16)); + try testArgs(f16, 1e1, fmin(f16)); + try testArgs(f16, 1e1, 1e-1); + try testArgs(f16, 1e1, 1e0); + try testArgs(f16, 1e1, 1e1); + try testArgs(f16, 1e1, fmax(f16)); + try testArgs(f16, 1e1, inf(f16)); + try testArgs(f16, 1e1, nan(f16)); try testArgs(f16, fmax(f16), -nan(f16)); try testArgs(f16, fmax(f16), -inf(f16)); try testArgs(f16, fmax(f16), -fmax(f16)); - try testArgs(f16, fmax(f16), -10.0); - try testArgs(f16, fmax(f16), -1.0); - try testArgs(f16, fmax(f16), -0.1); + try testArgs(f16, fmax(f16), -1e1); + try testArgs(f16, fmax(f16), -1e0); + try testArgs(f16, fmax(f16), -1e-1); try testArgs(f16, fmax(f16), -fmin(f16)); try testArgs(f16, fmax(f16), -tmin(f16)); try testArgs(f16, fmax(f16), -0.0); try testArgs(f16, fmax(f16), 0.0); try testArgs(f16, fmax(f16), tmin(f16)); try testArgs(f16, fmax(f16), fmin(f16)); - try testArgs(f16, fmax(f16), 0.1); - try testArgs(f16, fmax(f16), 1.0); - try testArgs(f16, fmax(f16), 10.0); + try testArgs(f16, fmax(f16), 1e-1); + try testArgs(f16, fmax(f16), 1e0); + try testArgs(f16, fmax(f16), 1e1); try testArgs(f16, fmax(f16), fmax(f16)); try testArgs(f16, fmax(f16), inf(f16)); try testArgs(f16, fmax(f16), nan(f16)); @@ -2018,18 +7510,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, inf(f16), -nan(f16)); try testArgs(f16, inf(f16), -inf(f16)); try testArgs(f16, inf(f16), -fmax(f16)); - try testArgs(f16, inf(f16), -10.0); - try testArgs(f16, inf(f16), -1.0); - try testArgs(f16, inf(f16), -0.1); + try testArgs(f16, inf(f16), -1e1); + try testArgs(f16, inf(f16), -1e0); + try testArgs(f16, inf(f16), -1e-1); try testArgs(f16, inf(f16), -fmin(f16)); try testArgs(f16, inf(f16), -tmin(f16)); try testArgs(f16, inf(f16), -0.0); try testArgs(f16, inf(f16), 0.0); try testArgs(f16, inf(f16), tmin(f16)); try testArgs(f16, inf(f16), fmin(f16)); - try testArgs(f16, inf(f16), 0.1); - try testArgs(f16, inf(f16), 1.0); - try testArgs(f16, inf(f16), 10.0); + try testArgs(f16, inf(f16), 1e-1); + try testArgs(f16, inf(f16), 1e0); + try testArgs(f16, inf(f16), 1e1); try testArgs(f16, inf(f16), fmax(f16)); try testArgs(f16, inf(f16), inf(f16)); try testArgs(f16, inf(f16), nan(f16)); @@ -2037,18 +7529,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f16, nan(f16), -nan(f16)); try testArgs(f16, nan(f16), -inf(f16)); try testArgs(f16, nan(f16), -fmax(f16)); - try testArgs(f16, nan(f16), -10.0); - try testArgs(f16, nan(f16), -1.0); - try testArgs(f16, nan(f16), -0.1); + try testArgs(f16, nan(f16), -1e1); + try testArgs(f16, nan(f16), -1e0); + try testArgs(f16, nan(f16), -1e-1); try testArgs(f16, nan(f16), -fmin(f16)); try testArgs(f16, nan(f16), -tmin(f16)); try testArgs(f16, nan(f16), -0.0); try testArgs(f16, nan(f16), 0.0); try testArgs(f16, nan(f16), tmin(f16)); try testArgs(f16, nan(f16), fmin(f16)); - try testArgs(f16, nan(f16), 0.1); - try testArgs(f16, nan(f16), 1.0); - try testArgs(f16, nan(f16), 10.0); + try testArgs(f16, nan(f16), 1e-1); + try testArgs(f16, nan(f16), 1e0); + try testArgs(f16, nan(f16), 1e1); try testArgs(f16, nan(f16), fmax(f16)); try testArgs(f16, nan(f16), inf(f16)); try testArgs(f16, nan(f16), nan(f16)); @@ -2056,18 +7548,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, -nan(f32), -nan(f32)); try testArgs(f32, -nan(f32), -inf(f32)); try testArgs(f32, -nan(f32), -fmax(f32)); - try testArgs(f32, -nan(f32), -10.0); - try testArgs(f32, -nan(f32), -1.0); - try testArgs(f32, -nan(f32), -0.1); + try testArgs(f32, -nan(f32), -1e1); + try testArgs(f32, -nan(f32), -1e0); + try testArgs(f32, -nan(f32), -1e-1); try testArgs(f32, -nan(f32), -fmin(f32)); try testArgs(f32, -nan(f32), -tmin(f32)); try testArgs(f32, -nan(f32), -0.0); try testArgs(f32, -nan(f32), 0.0); try testArgs(f32, -nan(f32), tmin(f32)); try testArgs(f32, -nan(f32), fmin(f32)); - try testArgs(f32, -nan(f32), 0.1); - try testArgs(f32, -nan(f32), 1.0); - try testArgs(f32, -nan(f32), 10.0); + try testArgs(f32, -nan(f32), 1e-1); + try testArgs(f32, -nan(f32), 1e0); + try testArgs(f32, -nan(f32), 1e1); try testArgs(f32, -nan(f32), fmax(f32)); try testArgs(f32, -nan(f32), inf(f32)); try testArgs(f32, -nan(f32), nan(f32)); @@ -2075,18 +7567,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, -inf(f32), -nan(f32)); try testArgs(f32, -inf(f32), -inf(f32)); try testArgs(f32, -inf(f32), -fmax(f32)); - try testArgs(f32, -inf(f32), -10.0); - try testArgs(f32, -inf(f32), -1.0); - try testArgs(f32, -inf(f32), -0.1); + try testArgs(f32, -inf(f32), -1e1); + try testArgs(f32, -inf(f32), -1e0); + try testArgs(f32, -inf(f32), -1e-1); try testArgs(f32, -inf(f32), -fmin(f32)); try testArgs(f32, -inf(f32), -tmin(f32)); try testArgs(f32, -inf(f32), -0.0); try testArgs(f32, -inf(f32), 0.0); try testArgs(f32, -inf(f32), tmin(f32)); try testArgs(f32, -inf(f32), fmin(f32)); - try testArgs(f32, -inf(f32), 0.1); - try testArgs(f32, -inf(f32), 1.0); - try testArgs(f32, -inf(f32), 10.0); + try testArgs(f32, -inf(f32), 1e-1); + try testArgs(f32, -inf(f32), 1e0); + try testArgs(f32, -inf(f32), 1e1); try testArgs(f32, -inf(f32), fmax(f32)); try testArgs(f32, -inf(f32), inf(f32)); try testArgs(f32, -inf(f32), nan(f32)); @@ -2094,94 +7586,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, -fmax(f32), -nan(f32)); try testArgs(f32, -fmax(f32), -inf(f32)); try testArgs(f32, -fmax(f32), -fmax(f32)); - try testArgs(f32, -fmax(f32), -10.0); - try testArgs(f32, -fmax(f32), -1.0); - try testArgs(f32, -fmax(f32), -0.1); + try testArgs(f32, -fmax(f32), -1e1); + try testArgs(f32, -fmax(f32), -1e0); + try testArgs(f32, -fmax(f32), -1e-1); try testArgs(f32, -fmax(f32), -fmin(f32)); try testArgs(f32, -fmax(f32), -tmin(f32)); try testArgs(f32, -fmax(f32), -0.0); try testArgs(f32, -fmax(f32), 0.0); try testArgs(f32, -fmax(f32), tmin(f32)); try testArgs(f32, -fmax(f32), fmin(f32)); - try testArgs(f32, -fmax(f32), 0.1); - try testArgs(f32, -fmax(f32), 1.0); - try testArgs(f32, -fmax(f32), 10.0); + try testArgs(f32, -fmax(f32), 1e-1); + try testArgs(f32, -fmax(f32), 1e0); + try testArgs(f32, -fmax(f32), 1e1); try testArgs(f32, -fmax(f32), fmax(f32)); try testArgs(f32, -fmax(f32), inf(f32)); try testArgs(f32, -fmax(f32), nan(f32)); - try testArgs(f32, -10.0, -nan(f32)); - try testArgs(f32, -10.0, -inf(f32)); - try testArgs(f32, -10.0, -fmax(f32)); - try testArgs(f32, -10.0, -10.0); - try testArgs(f32, -10.0, -1.0); - try testArgs(f32, -10.0, -0.1); - try testArgs(f32, -10.0, -fmin(f32)); - try testArgs(f32, -10.0, -tmin(f32)); - try testArgs(f32, -10.0, -0.0); - try testArgs(f32, -10.0, 0.0); - try testArgs(f32, -10.0, tmin(f32)); - try testArgs(f32, -10.0, fmin(f32)); - try testArgs(f32, -10.0, 0.1); - try testArgs(f32, -10.0, 1.0); - try testArgs(f32, -10.0, 10.0); - try testArgs(f32, -10.0, fmax(f32)); - try testArgs(f32, -10.0, inf(f32)); - try testArgs(f32, -10.0, nan(f32)); + try testArgs(f32, -1e1, -nan(f32)); + try testArgs(f32, -1e1, -inf(f32)); + try testArgs(f32, -1e1, -fmax(f32)); + try testArgs(f32, -1e1, -1e1); + try testArgs(f32, -1e1, -1e0); + try testArgs(f32, -1e1, -1e-1); + try testArgs(f32, -1e1, -fmin(f32)); + try testArgs(f32, -1e1, -tmin(f32)); + try testArgs(f32, -1e1, -0.0); + try testArgs(f32, -1e1, 0.0); + try testArgs(f32, -1e1, tmin(f32)); + try testArgs(f32, -1e1, fmin(f32)); + try testArgs(f32, -1e1, 1e-1); + try testArgs(f32, -1e1, 1e0); + try testArgs(f32, -1e1, 1e1); + try testArgs(f32, -1e1, fmax(f32)); + try testArgs(f32, -1e1, inf(f32)); + try testArgs(f32, -1e1, nan(f32)); - try testArgs(f32, -1.0, -nan(f32)); - try testArgs(f32, -1.0, -inf(f32)); - try testArgs(f32, -1.0, -fmax(f32)); - try testArgs(f32, -1.0, -10.0); - try testArgs(f32, -1.0, -1.0); - try testArgs(f32, -1.0, -0.1); - try testArgs(f32, -1.0, -fmin(f32)); - try testArgs(f32, -1.0, -tmin(f32)); - try testArgs(f32, -1.0, -0.0); - try testArgs(f32, -1.0, 0.0); - try testArgs(f32, -1.0, tmin(f32)); - try testArgs(f32, -1.0, fmin(f32)); - try testArgs(f32, -1.0, 0.1); - try testArgs(f32, -1.0, 1.0); - try testArgs(f32, -1.0, 10.0); - try testArgs(f32, -1.0, fmax(f32)); - try testArgs(f32, -1.0, inf(f32)); - try testArgs(f32, -1.0, nan(f32)); + try testArgs(f32, -1e0, -nan(f32)); + try testArgs(f32, -1e0, -inf(f32)); + try testArgs(f32, -1e0, -fmax(f32)); + try testArgs(f32, -1e0, -1e1); + try testArgs(f32, -1e0, -1e0); + try testArgs(f32, -1e0, -1e-1); + try testArgs(f32, -1e0, -fmin(f32)); + try testArgs(f32, -1e0, -tmin(f32)); + try testArgs(f32, -1e0, -0.0); + try testArgs(f32, -1e0, 0.0); + try testArgs(f32, -1e0, tmin(f32)); + try testArgs(f32, -1e0, fmin(f32)); + try testArgs(f32, -1e0, 1e-1); + try testArgs(f32, -1e0, 1e0); + try testArgs(f32, -1e0, 1e1); + try testArgs(f32, -1e0, fmax(f32)); + try testArgs(f32, -1e0, inf(f32)); + try testArgs(f32, -1e0, nan(f32)); - try testArgs(f32, -0.1, -nan(f32)); - try testArgs(f32, -0.1, -inf(f32)); - try testArgs(f32, -0.1, -fmax(f32)); - try testArgs(f32, -0.1, -10.0); - try testArgs(f32, -0.1, -1.0); - try testArgs(f32, -0.1, -0.1); - try testArgs(f32, -0.1, -fmin(f32)); - try testArgs(f32, -0.1, -tmin(f32)); - try testArgs(f32, -0.1, -0.0); - try testArgs(f32, -0.1, 0.0); - try testArgs(f32, -0.1, tmin(f32)); - try testArgs(f32, -0.1, fmin(f32)); - try testArgs(f32, -0.1, 0.1); - try testArgs(f32, -0.1, 1.0); - try testArgs(f32, -0.1, 10.0); - try testArgs(f32, -0.1, fmax(f32)); - try testArgs(f32, -0.1, inf(f32)); - try testArgs(f32, -0.1, nan(f32)); + try testArgs(f32, -1e-1, -nan(f32)); + try testArgs(f32, -1e-1, -inf(f32)); + try testArgs(f32, -1e-1, -fmax(f32)); + try testArgs(f32, -1e-1, -1e1); + try testArgs(f32, -1e-1, -1e0); + try testArgs(f32, -1e-1, -1e-1); + try testArgs(f32, -1e-1, -fmin(f32)); + try testArgs(f32, -1e-1, -tmin(f32)); + try testArgs(f32, -1e-1, -0.0); + try testArgs(f32, -1e-1, 0.0); + try testArgs(f32, -1e-1, tmin(f32)); + try testArgs(f32, -1e-1, fmin(f32)); + try testArgs(f32, -1e-1, 1e-1); + try testArgs(f32, -1e-1, 1e0); + try testArgs(f32, -1e-1, 1e1); + try testArgs(f32, -1e-1, fmax(f32)); + try testArgs(f32, -1e-1, inf(f32)); + try testArgs(f32, -1e-1, nan(f32)); try testArgs(f32, -fmin(f32), -nan(f32)); try testArgs(f32, -fmin(f32), -inf(f32)); try testArgs(f32, -fmin(f32), -fmax(f32)); - try testArgs(f32, -fmin(f32), -10.0); - try testArgs(f32, -fmin(f32), -1.0); - try testArgs(f32, -fmin(f32), -0.1); + try testArgs(f32, -fmin(f32), -1e1); + try testArgs(f32, -fmin(f32), -1e0); + try testArgs(f32, -fmin(f32), -1e-1); try testArgs(f32, -fmin(f32), -fmin(f32)); try testArgs(f32, -fmin(f32), -tmin(f32)); try testArgs(f32, -fmin(f32), -0.0); try testArgs(f32, -fmin(f32), 0.0); try testArgs(f32, -fmin(f32), tmin(f32)); try testArgs(f32, -fmin(f32), fmin(f32)); - try testArgs(f32, -fmin(f32), 0.1); - try testArgs(f32, -fmin(f32), 1.0); - try testArgs(f32, -fmin(f32), 10.0); + try testArgs(f32, -fmin(f32), 1e-1); + try testArgs(f32, -fmin(f32), 1e0); + try testArgs(f32, -fmin(f32), 1e1); try testArgs(f32, -fmin(f32), fmax(f32)); try testArgs(f32, -fmin(f32), inf(f32)); try testArgs(f32, -fmin(f32), nan(f32)); @@ -2189,18 +7681,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, -tmin(f32), -nan(f32)); try testArgs(f32, -tmin(f32), -inf(f32)); try testArgs(f32, -tmin(f32), -fmax(f32)); - try testArgs(f32, -tmin(f32), -10.0); - try testArgs(f32, -tmin(f32), -1.0); - try testArgs(f32, -tmin(f32), -0.1); + try testArgs(f32, -tmin(f32), -1e1); + try testArgs(f32, -tmin(f32), -1e0); + try testArgs(f32, -tmin(f32), -1e-1); try testArgs(f32, -tmin(f32), -fmin(f32)); try testArgs(f32, -tmin(f32), -tmin(f32)); try testArgs(f32, -tmin(f32), -0.0); try testArgs(f32, -tmin(f32), 0.0); try testArgs(f32, -tmin(f32), tmin(f32)); try testArgs(f32, -tmin(f32), fmin(f32)); - try testArgs(f32, -tmin(f32), 0.1); - try testArgs(f32, -tmin(f32), 1.0); - try testArgs(f32, -tmin(f32), 10.0); + try testArgs(f32, -tmin(f32), 1e-1); + try testArgs(f32, -tmin(f32), 1e0); + try testArgs(f32, -tmin(f32), 1e1); try testArgs(f32, -tmin(f32), fmax(f32)); try testArgs(f32, -tmin(f32), inf(f32)); try testArgs(f32, -tmin(f32), nan(f32)); @@ -2208,18 +7700,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, -0.0, -nan(f32)); try testArgs(f32, -0.0, -inf(f32)); try testArgs(f32, -0.0, -fmax(f32)); - try testArgs(f32, -0.0, -10.0); - try testArgs(f32, -0.0, -1.0); - try testArgs(f32, -0.0, -0.1); + try testArgs(f32, -0.0, -1e1); + try testArgs(f32, -0.0, -1e0); + try testArgs(f32, -0.0, -1e-1); try testArgs(f32, -0.0, -fmin(f32)); try testArgs(f32, -0.0, -tmin(f32)); try testArgs(f32, -0.0, -0.0); try testArgs(f32, -0.0, 0.0); try testArgs(f32, -0.0, tmin(f32)); try testArgs(f32, -0.0, fmin(f32)); - try testArgs(f32, -0.0, 0.1); - try testArgs(f32, -0.0, 1.0); - try testArgs(f32, -0.0, 10.0); + try testArgs(f32, -0.0, 1e-1); + try testArgs(f32, -0.0, 1e0); + try testArgs(f32, -0.0, 1e1); try testArgs(f32, -0.0, fmax(f32)); try testArgs(f32, -0.0, inf(f32)); try testArgs(f32, -0.0, nan(f32)); @@ -2227,18 +7719,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, 0.0, -nan(f32)); try testArgs(f32, 0.0, -inf(f32)); try testArgs(f32, 0.0, -fmax(f32)); - try testArgs(f32, 0.0, -10.0); - try testArgs(f32, 0.0, -1.0); - try testArgs(f32, 0.0, -0.1); + try testArgs(f32, 0.0, -1e1); + try testArgs(f32, 0.0, -1e0); + try testArgs(f32, 0.0, -1e-1); try testArgs(f32, 0.0, -fmin(f32)); try testArgs(f32, 0.0, -tmin(f32)); try testArgs(f32, 0.0, -0.0); try testArgs(f32, 0.0, 0.0); try testArgs(f32, 0.0, tmin(f32)); try testArgs(f32, 0.0, fmin(f32)); - try testArgs(f32, 0.0, 0.1); - try testArgs(f32, 0.0, 1.0); - try testArgs(f32, 0.0, 10.0); + try testArgs(f32, 0.0, 1e-1); + try testArgs(f32, 0.0, 1e0); + try testArgs(f32, 0.0, 1e1); try testArgs(f32, 0.0, fmax(f32)); try testArgs(f32, 0.0, inf(f32)); try testArgs(f32, 0.0, nan(f32)); @@ -2246,18 +7738,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, tmin(f32), -nan(f32)); try testArgs(f32, tmin(f32), -inf(f32)); try testArgs(f32, tmin(f32), -fmax(f32)); - try testArgs(f32, tmin(f32), -10.0); - try testArgs(f32, tmin(f32), -1.0); - try testArgs(f32, tmin(f32), -0.1); + try testArgs(f32, tmin(f32), -1e1); + try testArgs(f32, tmin(f32), -1e0); + try testArgs(f32, tmin(f32), -1e-1); try testArgs(f32, tmin(f32), -fmin(f32)); try testArgs(f32, tmin(f32), -tmin(f32)); try testArgs(f32, tmin(f32), -0.0); try testArgs(f32, tmin(f32), 0.0); try testArgs(f32, tmin(f32), tmin(f32)); try testArgs(f32, tmin(f32), fmin(f32)); - try testArgs(f32, tmin(f32), 0.1); - try testArgs(f32, tmin(f32), 1.0); - try testArgs(f32, tmin(f32), 10.0); + try testArgs(f32, tmin(f32), 1e-1); + try testArgs(f32, tmin(f32), 1e0); + try testArgs(f32, tmin(f32), 1e1); try testArgs(f32, tmin(f32), fmax(f32)); try testArgs(f32, tmin(f32), inf(f32)); try testArgs(f32, tmin(f32), nan(f32)); @@ -2265,94 +7757,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, fmin(f32), -nan(f32)); try testArgs(f32, fmin(f32), -inf(f32)); try testArgs(f32, fmin(f32), -fmax(f32)); - try testArgs(f32, fmin(f32), -10.0); - try testArgs(f32, fmin(f32), -1.0); - try testArgs(f32, fmin(f32), -0.1); + try testArgs(f32, fmin(f32), -1e1); + try testArgs(f32, fmin(f32), -1e0); + try testArgs(f32, fmin(f32), -1e-1); try testArgs(f32, fmin(f32), -fmin(f32)); try testArgs(f32, fmin(f32), -tmin(f32)); try testArgs(f32, fmin(f32), -0.0); try testArgs(f32, fmin(f32), 0.0); try testArgs(f32, fmin(f32), tmin(f32)); try testArgs(f32, fmin(f32), fmin(f32)); - try testArgs(f32, fmin(f32), 0.1); - try testArgs(f32, fmin(f32), 1.0); - try testArgs(f32, fmin(f32), 10.0); + try testArgs(f32, fmin(f32), 1e-1); + try testArgs(f32, fmin(f32), 1e0); + try testArgs(f32, fmin(f32), 1e1); try testArgs(f32, fmin(f32), fmax(f32)); try testArgs(f32, fmin(f32), inf(f32)); try testArgs(f32, fmin(f32), nan(f32)); - try testArgs(f32, 0.1, -nan(f32)); - try testArgs(f32, 0.1, -inf(f32)); - try testArgs(f32, 0.1, -fmax(f32)); - try testArgs(f32, 0.1, -10.0); - try testArgs(f32, 0.1, -1.0); - try testArgs(f32, 0.1, -0.1); - try testArgs(f32, 0.1, -fmin(f32)); - try testArgs(f32, 0.1, -tmin(f32)); - try testArgs(f32, 0.1, -0.0); - try testArgs(f32, 0.1, 0.0); - try testArgs(f32, 0.1, tmin(f32)); - try testArgs(f32, 0.1, fmin(f32)); - try testArgs(f32, 0.1, 0.1); - try testArgs(f32, 0.1, 1.0); - try testArgs(f32, 0.1, 10.0); - try testArgs(f32, 0.1, fmax(f32)); - try testArgs(f32, 0.1, inf(f32)); - try testArgs(f32, 0.1, nan(f32)); + try testArgs(f32, 1e-1, -nan(f32)); + try testArgs(f32, 1e-1, -inf(f32)); + try testArgs(f32, 1e-1, -fmax(f32)); + try testArgs(f32, 1e-1, -1e1); + try testArgs(f32, 1e-1, -1e0); + try testArgs(f32, 1e-1, -1e-1); + try testArgs(f32, 1e-1, -fmin(f32)); + try testArgs(f32, 1e-1, -tmin(f32)); + try testArgs(f32, 1e-1, -0.0); + try testArgs(f32, 1e-1, 0.0); + try testArgs(f32, 1e-1, tmin(f32)); + try testArgs(f32, 1e-1, fmin(f32)); + try testArgs(f32, 1e-1, 1e-1); + try testArgs(f32, 1e-1, 1e0); + try testArgs(f32, 1e-1, 1e1); + try testArgs(f32, 1e-1, fmax(f32)); + try testArgs(f32, 1e-1, inf(f32)); + try testArgs(f32, 1e-1, nan(f32)); - try testArgs(f32, 1.0, -nan(f32)); - try testArgs(f32, 1.0, -inf(f32)); - try testArgs(f32, 1.0, -fmax(f32)); - try testArgs(f32, 1.0, -10.0); - try testArgs(f32, 1.0, -1.0); - try testArgs(f32, 1.0, -0.1); - try testArgs(f32, 1.0, -fmin(f32)); - try testArgs(f32, 1.0, -tmin(f32)); - try testArgs(f32, 1.0, -0.0); - try testArgs(f32, 1.0, 0.0); - try testArgs(f32, 1.0, tmin(f32)); - try testArgs(f32, 1.0, fmin(f32)); - try testArgs(f32, 1.0, 0.1); - try testArgs(f32, 1.0, 1.0); - try testArgs(f32, 1.0, 10.0); - try testArgs(f32, 1.0, fmax(f32)); - try testArgs(f32, 1.0, inf(f32)); - try testArgs(f32, 1.0, nan(f32)); + try testArgs(f32, 1e0, -nan(f32)); + try testArgs(f32, 1e0, -inf(f32)); + try testArgs(f32, 1e0, -fmax(f32)); + try testArgs(f32, 1e0, -1e1); + try testArgs(f32, 1e0, -1e0); + try testArgs(f32, 1e0, -1e-1); + try testArgs(f32, 1e0, -fmin(f32)); + try testArgs(f32, 1e0, -tmin(f32)); + try testArgs(f32, 1e0, -0.0); + try testArgs(f32, 1e0, 0.0); + try testArgs(f32, 1e0, tmin(f32)); + try testArgs(f32, 1e0, fmin(f32)); + try testArgs(f32, 1e0, 1e-1); + try testArgs(f32, 1e0, 1e0); + try testArgs(f32, 1e0, 1e1); + try testArgs(f32, 1e0, fmax(f32)); + try testArgs(f32, 1e0, inf(f32)); + try testArgs(f32, 1e0, nan(f32)); - try testArgs(f32, 10.0, -nan(f32)); - try testArgs(f32, 10.0, -inf(f32)); - try testArgs(f32, 10.0, -fmax(f32)); - try testArgs(f32, 10.0, -10.0); - try testArgs(f32, 10.0, -1.0); - try testArgs(f32, 10.0, -0.1); - try testArgs(f32, 10.0, -fmin(f32)); - try testArgs(f32, 10.0, -tmin(f32)); - try testArgs(f32, 10.0, -0.0); - try testArgs(f32, 10.0, 0.0); - try testArgs(f32, 10.0, tmin(f32)); - try testArgs(f32, 10.0, fmin(f32)); - try testArgs(f32, 10.0, 0.1); - try testArgs(f32, 10.0, 1.0); - try testArgs(f32, 10.0, 10.0); - try testArgs(f32, 10.0, fmax(f32)); - try testArgs(f32, 10.0, inf(f32)); - try testArgs(f32, 10.0, nan(f32)); + try testArgs(f32, 1e1, -nan(f32)); + try testArgs(f32, 1e1, -inf(f32)); + try testArgs(f32, 1e1, -fmax(f32)); + try testArgs(f32, 1e1, -1e1); + try testArgs(f32, 1e1, -1e0); + try testArgs(f32, 1e1, -1e-1); + try testArgs(f32, 1e1, -fmin(f32)); + try testArgs(f32, 1e1, -tmin(f32)); + try testArgs(f32, 1e1, -0.0); + try testArgs(f32, 1e1, 0.0); + try testArgs(f32, 1e1, tmin(f32)); + try testArgs(f32, 1e1, fmin(f32)); + try testArgs(f32, 1e1, 1e-1); + try testArgs(f32, 1e1, 1e0); + try testArgs(f32, 1e1, 1e1); + try testArgs(f32, 1e1, fmax(f32)); + try testArgs(f32, 1e1, inf(f32)); + try testArgs(f32, 1e1, nan(f32)); try testArgs(f32, fmax(f32), -nan(f32)); try testArgs(f32, fmax(f32), -inf(f32)); try testArgs(f32, fmax(f32), -fmax(f32)); - try testArgs(f32, fmax(f32), -10.0); - try testArgs(f32, fmax(f32), -1.0); - try testArgs(f32, fmax(f32), -0.1); + try testArgs(f32, fmax(f32), -1e1); + try testArgs(f32, fmax(f32), -1e0); + try testArgs(f32, fmax(f32), -1e-1); try testArgs(f32, fmax(f32), -fmin(f32)); try testArgs(f32, fmax(f32), -tmin(f32)); try testArgs(f32, fmax(f32), -0.0); try testArgs(f32, fmax(f32), 0.0); try testArgs(f32, fmax(f32), tmin(f32)); try testArgs(f32, fmax(f32), fmin(f32)); - try testArgs(f32, fmax(f32), 0.1); - try testArgs(f32, fmax(f32), 1.0); - try testArgs(f32, fmax(f32), 10.0); + try testArgs(f32, fmax(f32), 1e-1); + try testArgs(f32, fmax(f32), 1e0); + try testArgs(f32, fmax(f32), 1e1); try testArgs(f32, fmax(f32), fmax(f32)); try testArgs(f32, fmax(f32), inf(f32)); try testArgs(f32, fmax(f32), nan(f32)); @@ -2360,18 +7852,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, inf(f32), -nan(f32)); try testArgs(f32, inf(f32), -inf(f32)); try testArgs(f32, inf(f32), -fmax(f32)); - try testArgs(f32, inf(f32), -10.0); - try testArgs(f32, inf(f32), -1.0); - try testArgs(f32, inf(f32), -0.1); + try testArgs(f32, inf(f32), -1e1); + try testArgs(f32, inf(f32), -1e0); + try testArgs(f32, inf(f32), -1e-1); try testArgs(f32, inf(f32), -fmin(f32)); try testArgs(f32, inf(f32), -tmin(f32)); try testArgs(f32, inf(f32), -0.0); try testArgs(f32, inf(f32), 0.0); try testArgs(f32, inf(f32), tmin(f32)); try testArgs(f32, inf(f32), fmin(f32)); - try testArgs(f32, inf(f32), 0.1); - try testArgs(f32, inf(f32), 1.0); - try testArgs(f32, inf(f32), 10.0); + try testArgs(f32, inf(f32), 1e-1); + try testArgs(f32, inf(f32), 1e0); + try testArgs(f32, inf(f32), 1e1); try testArgs(f32, inf(f32), fmax(f32)); try testArgs(f32, inf(f32), inf(f32)); try testArgs(f32, inf(f32), nan(f32)); @@ -2379,18 +7871,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f32, nan(f32), -nan(f32)); try testArgs(f32, nan(f32), -inf(f32)); try testArgs(f32, nan(f32), -fmax(f32)); - try testArgs(f32, nan(f32), -10.0); - try testArgs(f32, nan(f32), -1.0); - try testArgs(f32, nan(f32), -0.1); + try testArgs(f32, nan(f32), -1e1); + try testArgs(f32, nan(f32), -1e0); + try testArgs(f32, nan(f32), -1e-1); try testArgs(f32, nan(f32), -fmin(f32)); try testArgs(f32, nan(f32), -tmin(f32)); try testArgs(f32, nan(f32), -0.0); try testArgs(f32, nan(f32), 0.0); try testArgs(f32, nan(f32), tmin(f32)); try testArgs(f32, nan(f32), fmin(f32)); - try testArgs(f32, nan(f32), 0.1); - try testArgs(f32, nan(f32), 1.0); - try testArgs(f32, nan(f32), 10.0); + try testArgs(f32, nan(f32), 1e-1); + try testArgs(f32, nan(f32), 1e0); + try testArgs(f32, nan(f32), 1e1); try testArgs(f32, nan(f32), fmax(f32)); try testArgs(f32, nan(f32), inf(f32)); try testArgs(f32, nan(f32), nan(f32)); @@ -2398,18 +7890,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, -nan(f64), -nan(f64)); try testArgs(f64, -nan(f64), -inf(f64)); try testArgs(f64, -nan(f64), -fmax(f64)); - try testArgs(f64, -nan(f64), -10.0); - try testArgs(f64, -nan(f64), -1.0); - try testArgs(f64, -nan(f64), -0.1); + try testArgs(f64, -nan(f64), -1e1); + try testArgs(f64, -nan(f64), -1e0); + try testArgs(f64, -nan(f64), -1e-1); try testArgs(f64, -nan(f64), -fmin(f64)); try testArgs(f64, -nan(f64), -tmin(f64)); try testArgs(f64, -nan(f64), -0.0); try testArgs(f64, -nan(f64), 0.0); try testArgs(f64, -nan(f64), tmin(f64)); try testArgs(f64, -nan(f64), fmin(f64)); - try testArgs(f64, -nan(f64), 0.1); - try testArgs(f64, -nan(f64), 1.0); - try testArgs(f64, -nan(f64), 10.0); + try testArgs(f64, -nan(f64), 1e-1); + try testArgs(f64, -nan(f64), 1e0); + try testArgs(f64, -nan(f64), 1e1); try testArgs(f64, -nan(f64), fmax(f64)); try testArgs(f64, -nan(f64), inf(f64)); try testArgs(f64, -nan(f64), nan(f64)); @@ -2417,18 +7909,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, -inf(f64), -nan(f64)); try testArgs(f64, -inf(f64), -inf(f64)); try testArgs(f64, -inf(f64), -fmax(f64)); - try testArgs(f64, -inf(f64), -10.0); - try testArgs(f64, -inf(f64), -1.0); - try testArgs(f64, -inf(f64), -0.1); + try testArgs(f64, -inf(f64), -1e1); + try testArgs(f64, -inf(f64), -1e0); + try testArgs(f64, -inf(f64), -1e-1); try testArgs(f64, -inf(f64), -fmin(f64)); try testArgs(f64, -inf(f64), -tmin(f64)); try testArgs(f64, -inf(f64), -0.0); try testArgs(f64, -inf(f64), 0.0); try testArgs(f64, -inf(f64), tmin(f64)); try testArgs(f64, -inf(f64), fmin(f64)); - try testArgs(f64, -inf(f64), 0.1); - try testArgs(f64, -inf(f64), 1.0); - try testArgs(f64, -inf(f64), 10.0); + try testArgs(f64, -inf(f64), 1e-1); + try testArgs(f64, -inf(f64), 1e0); + try testArgs(f64, -inf(f64), 1e1); try testArgs(f64, -inf(f64), fmax(f64)); try testArgs(f64, -inf(f64), inf(f64)); try testArgs(f64, -inf(f64), nan(f64)); @@ -2436,94 +7928,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, -fmax(f64), -nan(f64)); try testArgs(f64, -fmax(f64), -inf(f64)); try testArgs(f64, -fmax(f64), -fmax(f64)); - try testArgs(f64, -fmax(f64), -10.0); - try testArgs(f64, -fmax(f64), -1.0); - try testArgs(f64, -fmax(f64), -0.1); + try testArgs(f64, -fmax(f64), -1e1); + try testArgs(f64, -fmax(f64), -1e0); + try testArgs(f64, -fmax(f64), -1e-1); try testArgs(f64, -fmax(f64), -fmin(f64)); try testArgs(f64, -fmax(f64), -tmin(f64)); try testArgs(f64, -fmax(f64), -0.0); try testArgs(f64, -fmax(f64), 0.0); try testArgs(f64, -fmax(f64), tmin(f64)); try testArgs(f64, -fmax(f64), fmin(f64)); - try testArgs(f64, -fmax(f64), 0.1); - try testArgs(f64, -fmax(f64), 1.0); - try testArgs(f64, -fmax(f64), 10.0); + try testArgs(f64, -fmax(f64), 1e-1); + try testArgs(f64, -fmax(f64), 1e0); + try testArgs(f64, -fmax(f64), 1e1); try testArgs(f64, -fmax(f64), fmax(f64)); try testArgs(f64, -fmax(f64), inf(f64)); try testArgs(f64, -fmax(f64), nan(f64)); - try testArgs(f64, -10.0, -nan(f64)); - try testArgs(f64, -10.0, -inf(f64)); - try testArgs(f64, -10.0, -fmax(f64)); - try testArgs(f64, -10.0, -10.0); - try testArgs(f64, -10.0, -1.0); - try testArgs(f64, -10.0, -0.1); - try testArgs(f64, -10.0, -fmin(f64)); - try testArgs(f64, -10.0, -tmin(f64)); - try testArgs(f64, -10.0, -0.0); - try testArgs(f64, -10.0, 0.0); - try testArgs(f64, -10.0, tmin(f64)); - try testArgs(f64, -10.0, fmin(f64)); - try testArgs(f64, -10.0, 0.1); - try testArgs(f64, -10.0, 1.0); - try testArgs(f64, -10.0, 10.0); - try testArgs(f64, -10.0, fmax(f64)); - try testArgs(f64, -10.0, inf(f64)); - try testArgs(f64, -10.0, nan(f64)); + try testArgs(f64, -1e1, -nan(f64)); + try testArgs(f64, -1e1, -inf(f64)); + try testArgs(f64, -1e1, -fmax(f64)); + try testArgs(f64, -1e1, -1e1); + try testArgs(f64, -1e1, -1e0); + try testArgs(f64, -1e1, -1e-1); + try testArgs(f64, -1e1, -fmin(f64)); + try testArgs(f64, -1e1, -tmin(f64)); + try testArgs(f64, -1e1, -0.0); + try testArgs(f64, -1e1, 0.0); + try testArgs(f64, -1e1, tmin(f64)); + try testArgs(f64, -1e1, fmin(f64)); + try testArgs(f64, -1e1, 1e-1); + try testArgs(f64, -1e1, 1e0); + try testArgs(f64, -1e1, 1e1); + try testArgs(f64, -1e1, fmax(f64)); + try testArgs(f64, -1e1, inf(f64)); + try testArgs(f64, -1e1, nan(f64)); - try testArgs(f64, -1.0, -nan(f64)); - try testArgs(f64, -1.0, -inf(f64)); - try testArgs(f64, -1.0, -fmax(f64)); - try testArgs(f64, -1.0, -10.0); - try testArgs(f64, -1.0, -1.0); - try testArgs(f64, -1.0, -0.1); - try testArgs(f64, -1.0, -fmin(f64)); - try testArgs(f64, -1.0, -tmin(f64)); - try testArgs(f64, -1.0, -0.0); - try testArgs(f64, -1.0, 0.0); - try testArgs(f64, -1.0, tmin(f64)); - try testArgs(f64, -1.0, fmin(f64)); - try testArgs(f64, -1.0, 0.1); - try testArgs(f64, -1.0, 1.0); - try testArgs(f64, -1.0, 10.0); - try testArgs(f64, -1.0, fmax(f64)); - try testArgs(f64, -1.0, inf(f64)); - try testArgs(f64, -1.0, nan(f64)); + try testArgs(f64, -1e0, -nan(f64)); + try testArgs(f64, -1e0, -inf(f64)); + try testArgs(f64, -1e0, -fmax(f64)); + try testArgs(f64, -1e0, -1e1); + try testArgs(f64, -1e0, -1e0); + try testArgs(f64, -1e0, -1e-1); + try testArgs(f64, -1e0, -fmin(f64)); + try testArgs(f64, -1e0, -tmin(f64)); + try testArgs(f64, -1e0, -0.0); + try testArgs(f64, -1e0, 0.0); + try testArgs(f64, -1e0, tmin(f64)); + try testArgs(f64, -1e0, fmin(f64)); + try testArgs(f64, -1e0, 1e-1); + try testArgs(f64, -1e0, 1e0); + try testArgs(f64, -1e0, 1e1); + try testArgs(f64, -1e0, fmax(f64)); + try testArgs(f64, -1e0, inf(f64)); + try testArgs(f64, -1e0, nan(f64)); - try testArgs(f64, -0.1, -nan(f64)); - try testArgs(f64, -0.1, -inf(f64)); - try testArgs(f64, -0.1, -fmax(f64)); - try testArgs(f64, -0.1, -10.0); - try testArgs(f64, -0.1, -1.0); - try testArgs(f64, -0.1, -0.1); - try testArgs(f64, -0.1, -fmin(f64)); - try testArgs(f64, -0.1, -tmin(f64)); - try testArgs(f64, -0.1, -0.0); - try testArgs(f64, -0.1, 0.0); - try testArgs(f64, -0.1, tmin(f64)); - try testArgs(f64, -0.1, fmin(f64)); - try testArgs(f64, -0.1, 0.1); - try testArgs(f64, -0.1, 1.0); - try testArgs(f64, -0.1, 10.0); - try testArgs(f64, -0.1, fmax(f64)); - try testArgs(f64, -0.1, inf(f64)); - try testArgs(f64, -0.1, nan(f64)); + try testArgs(f64, -1e-1, -nan(f64)); + try testArgs(f64, -1e-1, -inf(f64)); + try testArgs(f64, -1e-1, -fmax(f64)); + try testArgs(f64, -1e-1, -1e1); + try testArgs(f64, -1e-1, -1e0); + try testArgs(f64, -1e-1, -1e-1); + try testArgs(f64, -1e-1, -fmin(f64)); + try testArgs(f64, -1e-1, -tmin(f64)); + try testArgs(f64, -1e-1, -0.0); + try testArgs(f64, -1e-1, 0.0); + try testArgs(f64, -1e-1, tmin(f64)); + try testArgs(f64, -1e-1, fmin(f64)); + try testArgs(f64, -1e-1, 1e-1); + try testArgs(f64, -1e-1, 1e0); + try testArgs(f64, -1e-1, 1e1); + try testArgs(f64, -1e-1, fmax(f64)); + try testArgs(f64, -1e-1, inf(f64)); + try testArgs(f64, -1e-1, nan(f64)); try testArgs(f64, -fmin(f64), -nan(f64)); try testArgs(f64, -fmin(f64), -inf(f64)); try testArgs(f64, -fmin(f64), -fmax(f64)); - try testArgs(f64, -fmin(f64), -10.0); - try testArgs(f64, -fmin(f64), -1.0); - try testArgs(f64, -fmin(f64), -0.1); + try testArgs(f64, -fmin(f64), -1e1); + try testArgs(f64, -fmin(f64), -1e0); + try testArgs(f64, -fmin(f64), -1e-1); try testArgs(f64, -fmin(f64), -fmin(f64)); try testArgs(f64, -fmin(f64), -tmin(f64)); try testArgs(f64, -fmin(f64), -0.0); try testArgs(f64, -fmin(f64), 0.0); try testArgs(f64, -fmin(f64), tmin(f64)); try testArgs(f64, -fmin(f64), fmin(f64)); - try testArgs(f64, -fmin(f64), 0.1); - try testArgs(f64, -fmin(f64), 1.0); - try testArgs(f64, -fmin(f64), 10.0); + try testArgs(f64, -fmin(f64), 1e-1); + try testArgs(f64, -fmin(f64), 1e0); + try testArgs(f64, -fmin(f64), 1e1); try testArgs(f64, -fmin(f64), fmax(f64)); try testArgs(f64, -fmin(f64), inf(f64)); try testArgs(f64, -fmin(f64), nan(f64)); @@ -2531,18 +8023,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, -tmin(f64), -nan(f64)); try testArgs(f64, -tmin(f64), -inf(f64)); try testArgs(f64, -tmin(f64), -fmax(f64)); - try testArgs(f64, -tmin(f64), -10.0); - try testArgs(f64, -tmin(f64), -1.0); - try testArgs(f64, -tmin(f64), -0.1); + try testArgs(f64, -tmin(f64), -1e1); + try testArgs(f64, -tmin(f64), -1e0); + try testArgs(f64, -tmin(f64), -1e-1); try testArgs(f64, -tmin(f64), -fmin(f64)); try testArgs(f64, -tmin(f64), -tmin(f64)); try testArgs(f64, -tmin(f64), -0.0); try testArgs(f64, -tmin(f64), 0.0); try testArgs(f64, -tmin(f64), tmin(f64)); try testArgs(f64, -tmin(f64), fmin(f64)); - try testArgs(f64, -tmin(f64), 0.1); - try testArgs(f64, -tmin(f64), 1.0); - try testArgs(f64, -tmin(f64), 10.0); + try testArgs(f64, -tmin(f64), 1e-1); + try testArgs(f64, -tmin(f64), 1e0); + try testArgs(f64, -tmin(f64), 1e1); try testArgs(f64, -tmin(f64), fmax(f64)); try testArgs(f64, -tmin(f64), inf(f64)); try testArgs(f64, -tmin(f64), nan(f64)); @@ -2550,18 +8042,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, -0.0, -nan(f64)); try testArgs(f64, -0.0, -inf(f64)); try testArgs(f64, -0.0, -fmax(f64)); - try testArgs(f64, -0.0, -10.0); - try testArgs(f64, -0.0, -1.0); - try testArgs(f64, -0.0, -0.1); + try testArgs(f64, -0.0, -1e1); + try testArgs(f64, -0.0, -1e0); + try testArgs(f64, -0.0, -1e-1); try testArgs(f64, -0.0, -fmin(f64)); try testArgs(f64, -0.0, -tmin(f64)); try testArgs(f64, -0.0, -0.0); try testArgs(f64, -0.0, 0.0); try testArgs(f64, -0.0, tmin(f64)); try testArgs(f64, -0.0, fmin(f64)); - try testArgs(f64, -0.0, 0.1); - try testArgs(f64, -0.0, 1.0); - try testArgs(f64, -0.0, 10.0); + try testArgs(f64, -0.0, 1e-1); + try testArgs(f64, -0.0, 1e0); + try testArgs(f64, -0.0, 1e1); try testArgs(f64, -0.0, fmax(f64)); try testArgs(f64, -0.0, inf(f64)); try testArgs(f64, -0.0, nan(f64)); @@ -2569,18 +8061,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, 0.0, -nan(f64)); try testArgs(f64, 0.0, -inf(f64)); try testArgs(f64, 0.0, -fmax(f64)); - try testArgs(f64, 0.0, -10.0); - try testArgs(f64, 0.0, -1.0); - try testArgs(f64, 0.0, -0.1); + try testArgs(f64, 0.0, -1e1); + try testArgs(f64, 0.0, -1e0); + try testArgs(f64, 0.0, -1e-1); try testArgs(f64, 0.0, -fmin(f64)); try testArgs(f64, 0.0, -tmin(f64)); try testArgs(f64, 0.0, -0.0); try testArgs(f64, 0.0, 0.0); try testArgs(f64, 0.0, tmin(f64)); try testArgs(f64, 0.0, fmin(f64)); - try testArgs(f64, 0.0, 0.1); - try testArgs(f64, 0.0, 1.0); - try testArgs(f64, 0.0, 10.0); + try testArgs(f64, 0.0, 1e-1); + try testArgs(f64, 0.0, 1e0); + try testArgs(f64, 0.0, 1e1); try testArgs(f64, 0.0, fmax(f64)); try testArgs(f64, 0.0, inf(f64)); try testArgs(f64, 0.0, nan(f64)); @@ -2588,18 +8080,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, tmin(f64), -nan(f64)); try testArgs(f64, tmin(f64), -inf(f64)); try testArgs(f64, tmin(f64), -fmax(f64)); - try testArgs(f64, tmin(f64), -10.0); - try testArgs(f64, tmin(f64), -1.0); - try testArgs(f64, tmin(f64), -0.1); + try testArgs(f64, tmin(f64), -1e1); + try testArgs(f64, tmin(f64), -1e0); + try testArgs(f64, tmin(f64), -1e-1); try testArgs(f64, tmin(f64), -fmin(f64)); try testArgs(f64, tmin(f64), -tmin(f64)); try testArgs(f64, tmin(f64), -0.0); try testArgs(f64, tmin(f64), 0.0); try testArgs(f64, tmin(f64), tmin(f64)); try testArgs(f64, tmin(f64), fmin(f64)); - try testArgs(f64, tmin(f64), 0.1); - try testArgs(f64, tmin(f64), 1.0); - try testArgs(f64, tmin(f64), 10.0); + try testArgs(f64, tmin(f64), 1e-1); + try testArgs(f64, tmin(f64), 1e0); + try testArgs(f64, tmin(f64), 1e1); try testArgs(f64, tmin(f64), fmax(f64)); try testArgs(f64, tmin(f64), inf(f64)); try testArgs(f64, tmin(f64), nan(f64)); @@ -2607,94 +8099,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, fmin(f64), -nan(f64)); try testArgs(f64, fmin(f64), -inf(f64)); try testArgs(f64, fmin(f64), -fmax(f64)); - try testArgs(f64, fmin(f64), -10.0); - try testArgs(f64, fmin(f64), -1.0); - try testArgs(f64, fmin(f64), -0.1); + try testArgs(f64, fmin(f64), -1e1); + try testArgs(f64, fmin(f64), -1e0); + try testArgs(f64, fmin(f64), -1e-1); try testArgs(f64, fmin(f64), -fmin(f64)); try testArgs(f64, fmin(f64), -tmin(f64)); try testArgs(f64, fmin(f64), -0.0); try testArgs(f64, fmin(f64), 0.0); try testArgs(f64, fmin(f64), tmin(f64)); try testArgs(f64, fmin(f64), fmin(f64)); - try testArgs(f64, fmin(f64), 0.1); - try testArgs(f64, fmin(f64), 1.0); - try testArgs(f64, fmin(f64), 10.0); + try testArgs(f64, fmin(f64), 1e-1); + try testArgs(f64, fmin(f64), 1e0); + try testArgs(f64, fmin(f64), 1e1); try testArgs(f64, fmin(f64), fmax(f64)); try testArgs(f64, fmin(f64), inf(f64)); try testArgs(f64, fmin(f64), nan(f64)); - try testArgs(f64, 0.1, -nan(f64)); - try testArgs(f64, 0.1, -inf(f64)); - try testArgs(f64, 0.1, -fmax(f64)); - try testArgs(f64, 0.1, -10.0); - try testArgs(f64, 0.1, -1.0); - try testArgs(f64, 0.1, -0.1); - try testArgs(f64, 0.1, -fmin(f64)); - try testArgs(f64, 0.1, -tmin(f64)); - try testArgs(f64, 0.1, -0.0); - try testArgs(f64, 0.1, 0.0); - try testArgs(f64, 0.1, tmin(f64)); - try testArgs(f64, 0.1, fmin(f64)); - try testArgs(f64, 0.1, 0.1); - try testArgs(f64, 0.1, 1.0); - try testArgs(f64, 0.1, 10.0); - try testArgs(f64, 0.1, fmax(f64)); - try testArgs(f64, 0.1, inf(f64)); - try testArgs(f64, 0.1, nan(f64)); + try testArgs(f64, 1e-1, -nan(f64)); + try testArgs(f64, 1e-1, -inf(f64)); + try testArgs(f64, 1e-1, -fmax(f64)); + try testArgs(f64, 1e-1, -1e1); + try testArgs(f64, 1e-1, -1e0); + try testArgs(f64, 1e-1, -1e-1); + try testArgs(f64, 1e-1, -fmin(f64)); + try testArgs(f64, 1e-1, -tmin(f64)); + try testArgs(f64, 1e-1, -0.0); + try testArgs(f64, 1e-1, 0.0); + try testArgs(f64, 1e-1, tmin(f64)); + try testArgs(f64, 1e-1, fmin(f64)); + try testArgs(f64, 1e-1, 1e-1); + try testArgs(f64, 1e-1, 1e0); + try testArgs(f64, 1e-1, 1e1); + try testArgs(f64, 1e-1, fmax(f64)); + try testArgs(f64, 1e-1, inf(f64)); + try testArgs(f64, 1e-1, nan(f64)); - try testArgs(f64, 1.0, -nan(f64)); - try testArgs(f64, 1.0, -inf(f64)); - try testArgs(f64, 1.0, -fmax(f64)); - try testArgs(f64, 1.0, -10.0); - try testArgs(f64, 1.0, -1.0); - try testArgs(f64, 1.0, -0.1); - try testArgs(f64, 1.0, -fmin(f64)); - try testArgs(f64, 1.0, -tmin(f64)); - try testArgs(f64, 1.0, -0.0); - try testArgs(f64, 1.0, 0.0); - try testArgs(f64, 1.0, tmin(f64)); - try testArgs(f64, 1.0, fmin(f64)); - try testArgs(f64, 1.0, 0.1); - try testArgs(f64, 1.0, 1.0); - try testArgs(f64, 1.0, 10.0); - try testArgs(f64, 1.0, fmax(f64)); - try testArgs(f64, 1.0, inf(f64)); - try testArgs(f64, 1.0, nan(f64)); + try testArgs(f64, 1e0, -nan(f64)); + try testArgs(f64, 1e0, -inf(f64)); + try testArgs(f64, 1e0, -fmax(f64)); + try testArgs(f64, 1e0, -1e1); + try testArgs(f64, 1e0, -1e0); + try testArgs(f64, 1e0, -1e-1); + try testArgs(f64, 1e0, -fmin(f64)); + try testArgs(f64, 1e0, -tmin(f64)); + try testArgs(f64, 1e0, -0.0); + try testArgs(f64, 1e0, 0.0); + try testArgs(f64, 1e0, tmin(f64)); + try testArgs(f64, 1e0, fmin(f64)); + try testArgs(f64, 1e0, 1e-1); + try testArgs(f64, 1e0, 1e0); + try testArgs(f64, 1e0, 1e1); + try testArgs(f64, 1e0, fmax(f64)); + try testArgs(f64, 1e0, inf(f64)); + try testArgs(f64, 1e0, nan(f64)); - try testArgs(f64, 10.0, -nan(f64)); - try testArgs(f64, 10.0, -inf(f64)); - try testArgs(f64, 10.0, -fmax(f64)); - try testArgs(f64, 10.0, -10.0); - try testArgs(f64, 10.0, -1.0); - try testArgs(f64, 10.0, -0.1); - try testArgs(f64, 10.0, -fmin(f64)); - try testArgs(f64, 10.0, -tmin(f64)); - try testArgs(f64, 10.0, -0.0); - try testArgs(f64, 10.0, 0.0); - try testArgs(f64, 10.0, tmin(f64)); - try testArgs(f64, 10.0, fmin(f64)); - try testArgs(f64, 10.0, 0.1); - try testArgs(f64, 10.0, 1.0); - try testArgs(f64, 10.0, 10.0); - try testArgs(f64, 10.0, fmax(f64)); - try testArgs(f64, 10.0, inf(f64)); - try testArgs(f64, 10.0, nan(f64)); + try testArgs(f64, 1e1, -nan(f64)); + try testArgs(f64, 1e1, -inf(f64)); + try testArgs(f64, 1e1, -fmax(f64)); + try testArgs(f64, 1e1, -1e1); + try testArgs(f64, 1e1, -1e0); + try testArgs(f64, 1e1, -1e-1); + try testArgs(f64, 1e1, -fmin(f64)); + try testArgs(f64, 1e1, -tmin(f64)); + try testArgs(f64, 1e1, -0.0); + try testArgs(f64, 1e1, 0.0); + try testArgs(f64, 1e1, tmin(f64)); + try testArgs(f64, 1e1, fmin(f64)); + try testArgs(f64, 1e1, 1e-1); + try testArgs(f64, 1e1, 1e0); + try testArgs(f64, 1e1, 1e1); + try testArgs(f64, 1e1, fmax(f64)); + try testArgs(f64, 1e1, inf(f64)); + try testArgs(f64, 1e1, nan(f64)); try testArgs(f64, fmax(f64), -nan(f64)); try testArgs(f64, fmax(f64), -inf(f64)); try testArgs(f64, fmax(f64), -fmax(f64)); - try testArgs(f64, fmax(f64), -10.0); - try testArgs(f64, fmax(f64), -1.0); - try testArgs(f64, fmax(f64), -0.1); + try testArgs(f64, fmax(f64), -1e1); + try testArgs(f64, fmax(f64), -1e0); + try testArgs(f64, fmax(f64), -1e-1); try testArgs(f64, fmax(f64), -fmin(f64)); try testArgs(f64, fmax(f64), -tmin(f64)); try testArgs(f64, fmax(f64), -0.0); try testArgs(f64, fmax(f64), 0.0); try testArgs(f64, fmax(f64), tmin(f64)); try testArgs(f64, fmax(f64), fmin(f64)); - try testArgs(f64, fmax(f64), 0.1); - try testArgs(f64, fmax(f64), 1.0); - try testArgs(f64, fmax(f64), 10.0); + try testArgs(f64, fmax(f64), 1e-1); + try testArgs(f64, fmax(f64), 1e0); + try testArgs(f64, fmax(f64), 1e1); try testArgs(f64, fmax(f64), fmax(f64)); try testArgs(f64, fmax(f64), inf(f64)); try testArgs(f64, fmax(f64), nan(f64)); @@ -2702,18 +8194,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, inf(f64), -nan(f64)); try testArgs(f64, inf(f64), -inf(f64)); try testArgs(f64, inf(f64), -fmax(f64)); - try testArgs(f64, inf(f64), -10.0); - try testArgs(f64, inf(f64), -1.0); - try testArgs(f64, inf(f64), -0.1); + try testArgs(f64, inf(f64), -1e1); + try testArgs(f64, inf(f64), -1e0); + try testArgs(f64, inf(f64), -1e-1); try testArgs(f64, inf(f64), -fmin(f64)); try testArgs(f64, inf(f64), -tmin(f64)); try testArgs(f64, inf(f64), -0.0); try testArgs(f64, inf(f64), 0.0); try testArgs(f64, inf(f64), tmin(f64)); try testArgs(f64, inf(f64), fmin(f64)); - try testArgs(f64, inf(f64), 0.1); - try testArgs(f64, inf(f64), 1.0); - try testArgs(f64, inf(f64), 10.0); + try testArgs(f64, inf(f64), 1e-1); + try testArgs(f64, inf(f64), 1e0); + try testArgs(f64, inf(f64), 1e1); try testArgs(f64, inf(f64), fmax(f64)); try testArgs(f64, inf(f64), inf(f64)); try testArgs(f64, inf(f64), nan(f64)); @@ -2721,18 +8213,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f64, nan(f64), -nan(f64)); try testArgs(f64, nan(f64), -inf(f64)); try testArgs(f64, nan(f64), -fmax(f64)); - try testArgs(f64, nan(f64), -10.0); - try testArgs(f64, nan(f64), -1.0); - try testArgs(f64, nan(f64), -0.1); + try testArgs(f64, nan(f64), -1e1); + try testArgs(f64, nan(f64), -1e0); + try testArgs(f64, nan(f64), -1e-1); try testArgs(f64, nan(f64), -fmin(f64)); try testArgs(f64, nan(f64), -tmin(f64)); try testArgs(f64, nan(f64), -0.0); try testArgs(f64, nan(f64), 0.0); try testArgs(f64, nan(f64), tmin(f64)); try testArgs(f64, nan(f64), fmin(f64)); - try testArgs(f64, nan(f64), 0.1); - try testArgs(f64, nan(f64), 1.0); - try testArgs(f64, nan(f64), 10.0); + try testArgs(f64, nan(f64), 1e-1); + try testArgs(f64, nan(f64), 1e0); + try testArgs(f64, nan(f64), 1e1); try testArgs(f64, nan(f64), fmax(f64)); try testArgs(f64, nan(f64), inf(f64)); try testArgs(f64, nan(f64), nan(f64)); @@ -2740,18 +8232,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, -nan(f80), -nan(f80)); try testArgs(f80, -nan(f80), -inf(f80)); try testArgs(f80, -nan(f80), -fmax(f80)); - try testArgs(f80, -nan(f80), -10.0); - try testArgs(f80, -nan(f80), -1.0); - try testArgs(f80, -nan(f80), -0.1); + try testArgs(f80, -nan(f80), -1e1); + try testArgs(f80, -nan(f80), -1e0); + try testArgs(f80, -nan(f80), -1e-1); try testArgs(f80, -nan(f80), -fmin(f80)); try testArgs(f80, -nan(f80), -tmin(f80)); try testArgs(f80, -nan(f80), -0.0); try testArgs(f80, -nan(f80), 0.0); try testArgs(f80, -nan(f80), tmin(f80)); try testArgs(f80, -nan(f80), fmin(f80)); - try testArgs(f80, -nan(f80), 0.1); - try testArgs(f80, -nan(f80), 1.0); - try testArgs(f80, -nan(f80), 10.0); + try testArgs(f80, -nan(f80), 1e-1); + try testArgs(f80, -nan(f80), 1e0); + try testArgs(f80, -nan(f80), 1e1); try testArgs(f80, -nan(f80), fmax(f80)); try testArgs(f80, -nan(f80), inf(f80)); try testArgs(f80, -nan(f80), nan(f80)); @@ -2759,18 +8251,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, -inf(f80), -nan(f80)); try testArgs(f80, -inf(f80), -inf(f80)); try testArgs(f80, -inf(f80), -fmax(f80)); - try testArgs(f80, -inf(f80), -10.0); - try testArgs(f80, -inf(f80), -1.0); - try testArgs(f80, -inf(f80), -0.1); + try testArgs(f80, -inf(f80), -1e1); + try testArgs(f80, -inf(f80), -1e0); + try testArgs(f80, -inf(f80), -1e-1); try testArgs(f80, -inf(f80), -fmin(f80)); try testArgs(f80, -inf(f80), -tmin(f80)); try testArgs(f80, -inf(f80), -0.0); try testArgs(f80, -inf(f80), 0.0); try testArgs(f80, -inf(f80), tmin(f80)); try testArgs(f80, -inf(f80), fmin(f80)); - try testArgs(f80, -inf(f80), 0.1); - try testArgs(f80, -inf(f80), 1.0); - try testArgs(f80, -inf(f80), 10.0); + try testArgs(f80, -inf(f80), 1e-1); + try testArgs(f80, -inf(f80), 1e0); + try testArgs(f80, -inf(f80), 1e1); try testArgs(f80, -inf(f80), fmax(f80)); try testArgs(f80, -inf(f80), inf(f80)); try testArgs(f80, -inf(f80), nan(f80)); @@ -2778,94 +8270,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, -fmax(f80), -nan(f80)); try testArgs(f80, -fmax(f80), -inf(f80)); try testArgs(f80, -fmax(f80), -fmax(f80)); - try testArgs(f80, -fmax(f80), -10.0); - try testArgs(f80, -fmax(f80), -1.0); - try testArgs(f80, -fmax(f80), -0.1); + try testArgs(f80, -fmax(f80), -1e1); + try testArgs(f80, -fmax(f80), -1e0); + try testArgs(f80, -fmax(f80), -1e-1); try testArgs(f80, -fmax(f80), -fmin(f80)); try testArgs(f80, -fmax(f80), -tmin(f80)); try testArgs(f80, -fmax(f80), -0.0); try testArgs(f80, -fmax(f80), 0.0); try testArgs(f80, -fmax(f80), tmin(f80)); try testArgs(f80, -fmax(f80), fmin(f80)); - try testArgs(f80, -fmax(f80), 0.1); - try testArgs(f80, -fmax(f80), 1.0); - try testArgs(f80, -fmax(f80), 10.0); + try testArgs(f80, -fmax(f80), 1e-1); + try testArgs(f80, -fmax(f80), 1e0); + try testArgs(f80, -fmax(f80), 1e1); try testArgs(f80, -fmax(f80), fmax(f80)); try testArgs(f80, -fmax(f80), inf(f80)); try testArgs(f80, -fmax(f80), nan(f80)); - try testArgs(f80, -10.0, -nan(f80)); - try testArgs(f80, -10.0, -inf(f80)); - try testArgs(f80, -10.0, -fmax(f80)); - try testArgs(f80, -10.0, -10.0); - try testArgs(f80, -10.0, -1.0); - try testArgs(f80, -10.0, -0.1); - try testArgs(f80, -10.0, -fmin(f80)); - try testArgs(f80, -10.0, -tmin(f80)); - try testArgs(f80, -10.0, -0.0); - try testArgs(f80, -10.0, 0.0); - try testArgs(f80, -10.0, tmin(f80)); - try testArgs(f80, -10.0, fmin(f80)); - try testArgs(f80, -10.0, 0.1); - try testArgs(f80, -10.0, 1.0); - try testArgs(f80, -10.0, 10.0); - try testArgs(f80, -10.0, fmax(f80)); - try testArgs(f80, -10.0, inf(f80)); - try testArgs(f80, -10.0, nan(f80)); + try testArgs(f80, -1e1, -nan(f80)); + try testArgs(f80, -1e1, -inf(f80)); + try testArgs(f80, -1e1, -fmax(f80)); + try testArgs(f80, -1e1, -1e1); + try testArgs(f80, -1e1, -1e0); + try testArgs(f80, -1e1, -1e-1); + try testArgs(f80, -1e1, -fmin(f80)); + try testArgs(f80, -1e1, -tmin(f80)); + try testArgs(f80, -1e1, -0.0); + try testArgs(f80, -1e1, 0.0); + try testArgs(f80, -1e1, tmin(f80)); + try testArgs(f80, -1e1, fmin(f80)); + try testArgs(f80, -1e1, 1e-1); + try testArgs(f80, -1e1, 1e0); + try testArgs(f80, -1e1, 1e1); + try testArgs(f80, -1e1, fmax(f80)); + try testArgs(f80, -1e1, inf(f80)); + try testArgs(f80, -1e1, nan(f80)); - try testArgs(f80, -1.0, -nan(f80)); - try testArgs(f80, -1.0, -inf(f80)); - try testArgs(f80, -1.0, -fmax(f80)); - try testArgs(f80, -1.0, -10.0); - try testArgs(f80, -1.0, -1.0); - try testArgs(f80, -1.0, -0.1); - try testArgs(f80, -1.0, -fmin(f80)); - try testArgs(f80, -1.0, -tmin(f80)); - try testArgs(f80, -1.0, -0.0); - try testArgs(f80, -1.0, 0.0); - try testArgs(f80, -1.0, tmin(f80)); - try testArgs(f80, -1.0, fmin(f80)); - try testArgs(f80, -1.0, 0.1); - try testArgs(f80, -1.0, 1.0); - try testArgs(f80, -1.0, 10.0); - try testArgs(f80, -1.0, fmax(f80)); - try testArgs(f80, -1.0, inf(f80)); - try testArgs(f80, -1.0, nan(f80)); + try testArgs(f80, -1e0, -nan(f80)); + try testArgs(f80, -1e0, -inf(f80)); + try testArgs(f80, -1e0, -fmax(f80)); + try testArgs(f80, -1e0, -1e1); + try testArgs(f80, -1e0, -1e0); + try testArgs(f80, -1e0, -1e-1); + try testArgs(f80, -1e0, -fmin(f80)); + try testArgs(f80, -1e0, -tmin(f80)); + try testArgs(f80, -1e0, -0.0); + try testArgs(f80, -1e0, 0.0); + try testArgs(f80, -1e0, tmin(f80)); + try testArgs(f80, -1e0, fmin(f80)); + try testArgs(f80, -1e0, 1e-1); + try testArgs(f80, -1e0, 1e0); + try testArgs(f80, -1e0, 1e1); + try testArgs(f80, -1e0, fmax(f80)); + try testArgs(f80, -1e0, inf(f80)); + try testArgs(f80, -1e0, nan(f80)); - try testArgs(f80, -0.1, -nan(f80)); - try testArgs(f80, -0.1, -inf(f80)); - try testArgs(f80, -0.1, -fmax(f80)); - try testArgs(f80, -0.1, -10.0); - try testArgs(f80, -0.1, -1.0); - try testArgs(f80, -0.1, -0.1); - try testArgs(f80, -0.1, -fmin(f80)); - try testArgs(f80, -0.1, -tmin(f80)); - try testArgs(f80, -0.1, -0.0); - try testArgs(f80, -0.1, 0.0); - try testArgs(f80, -0.1, tmin(f80)); - try testArgs(f80, -0.1, fmin(f80)); - try testArgs(f80, -0.1, 0.1); - try testArgs(f80, -0.1, 1.0); - try testArgs(f80, -0.1, 10.0); - try testArgs(f80, -0.1, fmax(f80)); - try testArgs(f80, -0.1, inf(f80)); - try testArgs(f80, -0.1, nan(f80)); + try testArgs(f80, -1e-1, -nan(f80)); + try testArgs(f80, -1e-1, -inf(f80)); + try testArgs(f80, -1e-1, -fmax(f80)); + try testArgs(f80, -1e-1, -1e1); + try testArgs(f80, -1e-1, -1e0); + try testArgs(f80, -1e-1, -1e-1); + try testArgs(f80, -1e-1, -fmin(f80)); + try testArgs(f80, -1e-1, -tmin(f80)); + try testArgs(f80, -1e-1, -0.0); + try testArgs(f80, -1e-1, 0.0); + try testArgs(f80, -1e-1, tmin(f80)); + try testArgs(f80, -1e-1, fmin(f80)); + try testArgs(f80, -1e-1, 1e-1); + try testArgs(f80, -1e-1, 1e0); + try testArgs(f80, -1e-1, 1e1); + try testArgs(f80, -1e-1, fmax(f80)); + try testArgs(f80, -1e-1, inf(f80)); + try testArgs(f80, -1e-1, nan(f80)); try testArgs(f80, -fmin(f80), -nan(f80)); try testArgs(f80, -fmin(f80), -inf(f80)); try testArgs(f80, -fmin(f80), -fmax(f80)); - try testArgs(f80, -fmin(f80), -10.0); - try testArgs(f80, -fmin(f80), -1.0); - try testArgs(f80, -fmin(f80), -0.1); + try testArgs(f80, -fmin(f80), -1e1); + try testArgs(f80, -fmin(f80), -1e0); + try testArgs(f80, -fmin(f80), -1e-1); try testArgs(f80, -fmin(f80), -fmin(f80)); try testArgs(f80, -fmin(f80), -tmin(f80)); try testArgs(f80, -fmin(f80), -0.0); try testArgs(f80, -fmin(f80), 0.0); try testArgs(f80, -fmin(f80), tmin(f80)); try testArgs(f80, -fmin(f80), fmin(f80)); - try testArgs(f80, -fmin(f80), 0.1); - try testArgs(f80, -fmin(f80), 1.0); - try testArgs(f80, -fmin(f80), 10.0); + try testArgs(f80, -fmin(f80), 1e-1); + try testArgs(f80, -fmin(f80), 1e0); + try testArgs(f80, -fmin(f80), 1e1); try testArgs(f80, -fmin(f80), fmax(f80)); try testArgs(f80, -fmin(f80), inf(f80)); try testArgs(f80, -fmin(f80), nan(f80)); @@ -2873,18 +8365,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, -tmin(f80), -nan(f80)); try testArgs(f80, -tmin(f80), -inf(f80)); try testArgs(f80, -tmin(f80), -fmax(f80)); - try testArgs(f80, -tmin(f80), -10.0); - try testArgs(f80, -tmin(f80), -1.0); - try testArgs(f80, -tmin(f80), -0.1); + try testArgs(f80, -tmin(f80), -1e1); + try testArgs(f80, -tmin(f80), -1e0); + try testArgs(f80, -tmin(f80), -1e-1); try testArgs(f80, -tmin(f80), -fmin(f80)); try testArgs(f80, -tmin(f80), -tmin(f80)); try testArgs(f80, -tmin(f80), -0.0); try testArgs(f80, -tmin(f80), 0.0); try testArgs(f80, -tmin(f80), tmin(f80)); try testArgs(f80, -tmin(f80), fmin(f80)); - try testArgs(f80, -tmin(f80), 0.1); - try testArgs(f80, -tmin(f80), 1.0); - try testArgs(f80, -tmin(f80), 10.0); + try testArgs(f80, -tmin(f80), 1e-1); + try testArgs(f80, -tmin(f80), 1e0); + try testArgs(f80, -tmin(f80), 1e1); try testArgs(f80, -tmin(f80), fmax(f80)); try testArgs(f80, -tmin(f80), inf(f80)); try testArgs(f80, -tmin(f80), nan(f80)); @@ -2892,18 +8384,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, -0.0, -nan(f80)); try testArgs(f80, -0.0, -inf(f80)); try testArgs(f80, -0.0, -fmax(f80)); - try testArgs(f80, -0.0, -10.0); - try testArgs(f80, -0.0, -1.0); - try testArgs(f80, -0.0, -0.1); + try testArgs(f80, -0.0, -1e1); + try testArgs(f80, -0.0, -1e0); + try testArgs(f80, -0.0, -1e-1); try testArgs(f80, -0.0, -fmin(f80)); try testArgs(f80, -0.0, -tmin(f80)); try testArgs(f80, -0.0, -0.0); try testArgs(f80, -0.0, 0.0); try testArgs(f80, -0.0, tmin(f80)); try testArgs(f80, -0.0, fmin(f80)); - try testArgs(f80, -0.0, 0.1); - try testArgs(f80, -0.0, 1.0); - try testArgs(f80, -0.0, 10.0); + try testArgs(f80, -0.0, 1e-1); + try testArgs(f80, -0.0, 1e0); + try testArgs(f80, -0.0, 1e1); try testArgs(f80, -0.0, fmax(f80)); try testArgs(f80, -0.0, inf(f80)); try testArgs(f80, -0.0, nan(f80)); @@ -2911,18 +8403,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, 0.0, -nan(f80)); try testArgs(f80, 0.0, -inf(f80)); try testArgs(f80, 0.0, -fmax(f80)); - try testArgs(f80, 0.0, -10.0); - try testArgs(f80, 0.0, -1.0); - try testArgs(f80, 0.0, -0.1); + try testArgs(f80, 0.0, -1e1); + try testArgs(f80, 0.0, -1e0); + try testArgs(f80, 0.0, -1e-1); try testArgs(f80, 0.0, -fmin(f80)); try testArgs(f80, 0.0, -tmin(f80)); try testArgs(f80, 0.0, -0.0); try testArgs(f80, 0.0, 0.0); try testArgs(f80, 0.0, tmin(f80)); try testArgs(f80, 0.0, fmin(f80)); - try testArgs(f80, 0.0, 0.1); - try testArgs(f80, 0.0, 1.0); - try testArgs(f80, 0.0, 10.0); + try testArgs(f80, 0.0, 1e-1); + try testArgs(f80, 0.0, 1e0); + try testArgs(f80, 0.0, 1e1); try testArgs(f80, 0.0, fmax(f80)); try testArgs(f80, 0.0, inf(f80)); try testArgs(f80, 0.0, nan(f80)); @@ -2930,18 +8422,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, tmin(f80), -nan(f80)); try testArgs(f80, tmin(f80), -inf(f80)); try testArgs(f80, tmin(f80), -fmax(f80)); - try testArgs(f80, tmin(f80), -10.0); - try testArgs(f80, tmin(f80), -1.0); - try testArgs(f80, tmin(f80), -0.1); + try testArgs(f80, tmin(f80), -1e1); + try testArgs(f80, tmin(f80), -1e0); + try testArgs(f80, tmin(f80), -1e-1); try testArgs(f80, tmin(f80), -fmin(f80)); try testArgs(f80, tmin(f80), -tmin(f80)); try testArgs(f80, tmin(f80), -0.0); try testArgs(f80, tmin(f80), 0.0); try testArgs(f80, tmin(f80), tmin(f80)); try testArgs(f80, tmin(f80), fmin(f80)); - try testArgs(f80, tmin(f80), 0.1); - try testArgs(f80, tmin(f80), 1.0); - try testArgs(f80, tmin(f80), 10.0); + try testArgs(f80, tmin(f80), 1e-1); + try testArgs(f80, tmin(f80), 1e0); + try testArgs(f80, tmin(f80), 1e1); try testArgs(f80, tmin(f80), fmax(f80)); try testArgs(f80, tmin(f80), inf(f80)); try testArgs(f80, tmin(f80), nan(f80)); @@ -2949,94 +8441,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, fmin(f80), -nan(f80)); try testArgs(f80, fmin(f80), -inf(f80)); try testArgs(f80, fmin(f80), -fmax(f80)); - try testArgs(f80, fmin(f80), -10.0); - try testArgs(f80, fmin(f80), -1.0); - try testArgs(f80, fmin(f80), -0.1); + try testArgs(f80, fmin(f80), -1e1); + try testArgs(f80, fmin(f80), -1e0); + try testArgs(f80, fmin(f80), -1e-1); try testArgs(f80, fmin(f80), -fmin(f80)); try testArgs(f80, fmin(f80), -tmin(f80)); try testArgs(f80, fmin(f80), -0.0); try testArgs(f80, fmin(f80), 0.0); try testArgs(f80, fmin(f80), tmin(f80)); try testArgs(f80, fmin(f80), fmin(f80)); - try testArgs(f80, fmin(f80), 0.1); - try testArgs(f80, fmin(f80), 1.0); - try testArgs(f80, fmin(f80), 10.0); + try testArgs(f80, fmin(f80), 1e-1); + try testArgs(f80, fmin(f80), 1e0); + try testArgs(f80, fmin(f80), 1e1); try testArgs(f80, fmin(f80), fmax(f80)); try testArgs(f80, fmin(f80), inf(f80)); try testArgs(f80, fmin(f80), nan(f80)); - try testArgs(f80, 0.1, -nan(f80)); - try testArgs(f80, 0.1, -inf(f80)); - try testArgs(f80, 0.1, -fmax(f80)); - try testArgs(f80, 0.1, -10.0); - try testArgs(f80, 0.1, -1.0); - try testArgs(f80, 0.1, -0.1); - try testArgs(f80, 0.1, -fmin(f80)); - try testArgs(f80, 0.1, -tmin(f80)); - try testArgs(f80, 0.1, -0.0); - try testArgs(f80, 0.1, 0.0); - try testArgs(f80, 0.1, tmin(f80)); - try testArgs(f80, 0.1, fmin(f80)); - try testArgs(f80, 0.1, 0.1); - try testArgs(f80, 0.1, 1.0); - try testArgs(f80, 0.1, 10.0); - try testArgs(f80, 0.1, fmax(f80)); - try testArgs(f80, 0.1, inf(f80)); - try testArgs(f80, 0.1, nan(f80)); + try testArgs(f80, 1e-1, -nan(f80)); + try testArgs(f80, 1e-1, -inf(f80)); + try testArgs(f80, 1e-1, -fmax(f80)); + try testArgs(f80, 1e-1, -1e1); + try testArgs(f80, 1e-1, -1e0); + try testArgs(f80, 1e-1, -1e-1); + try testArgs(f80, 1e-1, -fmin(f80)); + try testArgs(f80, 1e-1, -tmin(f80)); + try testArgs(f80, 1e-1, -0.0); + try testArgs(f80, 1e-1, 0.0); + try testArgs(f80, 1e-1, tmin(f80)); + try testArgs(f80, 1e-1, fmin(f80)); + try testArgs(f80, 1e-1, 1e-1); + try testArgs(f80, 1e-1, 1e0); + try testArgs(f80, 1e-1, 1e1); + try testArgs(f80, 1e-1, fmax(f80)); + try testArgs(f80, 1e-1, inf(f80)); + try testArgs(f80, 1e-1, nan(f80)); - try testArgs(f80, 1.0, -nan(f80)); - try testArgs(f80, 1.0, -inf(f80)); - try testArgs(f80, 1.0, -fmax(f80)); - try testArgs(f80, 1.0, -10.0); - try testArgs(f80, 1.0, -1.0); - try testArgs(f80, 1.0, -0.1); - try testArgs(f80, 1.0, -fmin(f80)); - try testArgs(f80, 1.0, -tmin(f80)); - try testArgs(f80, 1.0, -0.0); - try testArgs(f80, 1.0, 0.0); - try testArgs(f80, 1.0, tmin(f80)); - try testArgs(f80, 1.0, fmin(f80)); - try testArgs(f80, 1.0, 0.1); - try testArgs(f80, 1.0, 1.0); - try testArgs(f80, 1.0, 10.0); - try testArgs(f80, 1.0, fmax(f80)); - try testArgs(f80, 1.0, inf(f80)); - try testArgs(f80, 1.0, nan(f80)); + try testArgs(f80, 1e0, -nan(f80)); + try testArgs(f80, 1e0, -inf(f80)); + try testArgs(f80, 1e0, -fmax(f80)); + try testArgs(f80, 1e0, -1e1); + try testArgs(f80, 1e0, -1e0); + try testArgs(f80, 1e0, -1e-1); + try testArgs(f80, 1e0, -fmin(f80)); + try testArgs(f80, 1e0, -tmin(f80)); + try testArgs(f80, 1e0, -0.0); + try testArgs(f80, 1e0, 0.0); + try testArgs(f80, 1e0, tmin(f80)); + try testArgs(f80, 1e0, fmin(f80)); + try testArgs(f80, 1e0, 1e-1); + try testArgs(f80, 1e0, 1e0); + try testArgs(f80, 1e0, 1e1); + try testArgs(f80, 1e0, fmax(f80)); + try testArgs(f80, 1e0, inf(f80)); + try testArgs(f80, 1e0, nan(f80)); - try testArgs(f80, 10.0, -nan(f80)); - try testArgs(f80, 10.0, -inf(f80)); - try testArgs(f80, 10.0, -fmax(f80)); - try testArgs(f80, 10.0, -10.0); - try testArgs(f80, 10.0, -1.0); - try testArgs(f80, 10.0, -0.1); - try testArgs(f80, 10.0, -fmin(f80)); - try testArgs(f80, 10.0, -tmin(f80)); - try testArgs(f80, 10.0, -0.0); - try testArgs(f80, 10.0, 0.0); - try testArgs(f80, 10.0, tmin(f80)); - try testArgs(f80, 10.0, fmin(f80)); - try testArgs(f80, 10.0, 0.1); - try testArgs(f80, 10.0, 1.0); - try testArgs(f80, 10.0, 10.0); - try testArgs(f80, 10.0, fmax(f80)); - try testArgs(f80, 10.0, inf(f80)); - try testArgs(f80, 10.0, nan(f80)); + try testArgs(f80, 1e1, -nan(f80)); + try testArgs(f80, 1e1, -inf(f80)); + try testArgs(f80, 1e1, -fmax(f80)); + try testArgs(f80, 1e1, -1e1); + try testArgs(f80, 1e1, -1e0); + try testArgs(f80, 1e1, -1e-1); + try testArgs(f80, 1e1, -fmin(f80)); + try testArgs(f80, 1e1, -tmin(f80)); + try testArgs(f80, 1e1, -0.0); + try testArgs(f80, 1e1, 0.0); + try testArgs(f80, 1e1, tmin(f80)); + try testArgs(f80, 1e1, fmin(f80)); + try testArgs(f80, 1e1, 1e-1); + try testArgs(f80, 1e1, 1e0); + try testArgs(f80, 1e1, 1e1); + try testArgs(f80, 1e1, fmax(f80)); + try testArgs(f80, 1e1, inf(f80)); + try testArgs(f80, 1e1, nan(f80)); try testArgs(f80, fmax(f80), -nan(f80)); try testArgs(f80, fmax(f80), -inf(f80)); try testArgs(f80, fmax(f80), -fmax(f80)); - try testArgs(f80, fmax(f80), -10.0); - try testArgs(f80, fmax(f80), -1.0); - try testArgs(f80, fmax(f80), -0.1); + try testArgs(f80, fmax(f80), -1e1); + try testArgs(f80, fmax(f80), -1e0); + try testArgs(f80, fmax(f80), -1e-1); try testArgs(f80, fmax(f80), -fmin(f80)); try testArgs(f80, fmax(f80), -tmin(f80)); try testArgs(f80, fmax(f80), -0.0); try testArgs(f80, fmax(f80), 0.0); try testArgs(f80, fmax(f80), tmin(f80)); try testArgs(f80, fmax(f80), fmin(f80)); - try testArgs(f80, fmax(f80), 0.1); - try testArgs(f80, fmax(f80), 1.0); - try testArgs(f80, fmax(f80), 10.0); + try testArgs(f80, fmax(f80), 1e-1); + try testArgs(f80, fmax(f80), 1e0); + try testArgs(f80, fmax(f80), 1e1); try testArgs(f80, fmax(f80), fmax(f80)); try testArgs(f80, fmax(f80), inf(f80)); try testArgs(f80, fmax(f80), nan(f80)); @@ -3044,18 +8536,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, inf(f80), -nan(f80)); try testArgs(f80, inf(f80), -inf(f80)); try testArgs(f80, inf(f80), -fmax(f80)); - try testArgs(f80, inf(f80), -10.0); - try testArgs(f80, inf(f80), -1.0); - try testArgs(f80, inf(f80), -0.1); + try testArgs(f80, inf(f80), -1e1); + try testArgs(f80, inf(f80), -1e0); + try testArgs(f80, inf(f80), -1e-1); try testArgs(f80, inf(f80), -fmin(f80)); try testArgs(f80, inf(f80), -tmin(f80)); try testArgs(f80, inf(f80), -0.0); try testArgs(f80, inf(f80), 0.0); try testArgs(f80, inf(f80), tmin(f80)); try testArgs(f80, inf(f80), fmin(f80)); - try testArgs(f80, inf(f80), 0.1); - try testArgs(f80, inf(f80), 1.0); - try testArgs(f80, inf(f80), 10.0); + try testArgs(f80, inf(f80), 1e-1); + try testArgs(f80, inf(f80), 1e0); + try testArgs(f80, inf(f80), 1e1); try testArgs(f80, inf(f80), fmax(f80)); try testArgs(f80, inf(f80), inf(f80)); try testArgs(f80, inf(f80), nan(f80)); @@ -3063,18 +8555,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f80, nan(f80), -nan(f80)); try testArgs(f80, nan(f80), -inf(f80)); try testArgs(f80, nan(f80), -fmax(f80)); - try testArgs(f80, nan(f80), -10.0); - try testArgs(f80, nan(f80), -1.0); - try testArgs(f80, nan(f80), -0.1); + try testArgs(f80, nan(f80), -1e1); + try testArgs(f80, nan(f80), -1e0); + try testArgs(f80, nan(f80), -1e-1); try testArgs(f80, nan(f80), -fmin(f80)); try testArgs(f80, nan(f80), -tmin(f80)); try testArgs(f80, nan(f80), -0.0); try testArgs(f80, nan(f80), 0.0); try testArgs(f80, nan(f80), tmin(f80)); try testArgs(f80, nan(f80), fmin(f80)); - try testArgs(f80, nan(f80), 0.1); - try testArgs(f80, nan(f80), 1.0); - try testArgs(f80, nan(f80), 10.0); + try testArgs(f80, nan(f80), 1e-1); + try testArgs(f80, nan(f80), 1e0); + try testArgs(f80, nan(f80), 1e1); try testArgs(f80, nan(f80), fmax(f80)); try testArgs(f80, nan(f80), inf(f80)); try testArgs(f80, nan(f80), nan(f80)); @@ -3082,18 +8574,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, -nan(f128), -nan(f128)); try testArgs(f128, -nan(f128), -inf(f128)); try testArgs(f128, -nan(f128), -fmax(f128)); - try testArgs(f128, -nan(f128), -10.0); - try testArgs(f128, -nan(f128), -1.0); - try testArgs(f128, -nan(f128), -0.1); + try testArgs(f128, -nan(f128), -1e1); + try testArgs(f128, -nan(f128), -1e0); + try testArgs(f128, -nan(f128), -1e-1); try testArgs(f128, -nan(f128), -fmin(f128)); try testArgs(f128, -nan(f128), -tmin(f128)); try testArgs(f128, -nan(f128), -0.0); try testArgs(f128, -nan(f128), 0.0); try testArgs(f128, -nan(f128), tmin(f128)); try testArgs(f128, -nan(f128), fmin(f128)); - try testArgs(f128, -nan(f128), 0.1); - try testArgs(f128, -nan(f128), 1.0); - try testArgs(f128, -nan(f128), 10.0); + try testArgs(f128, -nan(f128), 1e-1); + try testArgs(f128, -nan(f128), 1e0); + try testArgs(f128, -nan(f128), 1e1); try testArgs(f128, -nan(f128), fmax(f128)); try testArgs(f128, -nan(f128), inf(f128)); try testArgs(f128, -nan(f128), nan(f128)); @@ -3101,18 +8593,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, -inf(f128), -nan(f128)); try testArgs(f128, -inf(f128), -inf(f128)); try testArgs(f128, -inf(f128), -fmax(f128)); - try testArgs(f128, -inf(f128), -10.0); - try testArgs(f128, -inf(f128), -1.0); - try testArgs(f128, -inf(f128), -0.1); + try testArgs(f128, -inf(f128), -1e1); + try testArgs(f128, -inf(f128), -1e0); + try testArgs(f128, -inf(f128), -1e-1); try testArgs(f128, -inf(f128), -fmin(f128)); try testArgs(f128, -inf(f128), -tmin(f128)); try testArgs(f128, -inf(f128), -0.0); try testArgs(f128, -inf(f128), 0.0); try testArgs(f128, -inf(f128), tmin(f128)); try testArgs(f128, -inf(f128), fmin(f128)); - try testArgs(f128, -inf(f128), 0.1); - try testArgs(f128, -inf(f128), 1.0); - try testArgs(f128, -inf(f128), 10.0); + try testArgs(f128, -inf(f128), 1e-1); + try testArgs(f128, -inf(f128), 1e0); + try testArgs(f128, -inf(f128), 1e1); try testArgs(f128, -inf(f128), fmax(f128)); try testArgs(f128, -inf(f128), inf(f128)); try testArgs(f128, -inf(f128), nan(f128)); @@ -3120,94 +8612,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, -fmax(f128), -nan(f128)); try testArgs(f128, -fmax(f128), -inf(f128)); try testArgs(f128, -fmax(f128), -fmax(f128)); - try testArgs(f128, -fmax(f128), -10.0); - try testArgs(f128, -fmax(f128), -1.0); - try testArgs(f128, -fmax(f128), -0.1); + try testArgs(f128, -fmax(f128), -1e1); + try testArgs(f128, -fmax(f128), -1e0); + try testArgs(f128, -fmax(f128), -1e-1); try testArgs(f128, -fmax(f128), -fmin(f128)); try testArgs(f128, -fmax(f128), -tmin(f128)); try testArgs(f128, -fmax(f128), -0.0); try testArgs(f128, -fmax(f128), 0.0); try testArgs(f128, -fmax(f128), tmin(f128)); try testArgs(f128, -fmax(f128), fmin(f128)); - try testArgs(f128, -fmax(f128), 0.1); - try testArgs(f128, -fmax(f128), 1.0); - try testArgs(f128, -fmax(f128), 10.0); + try testArgs(f128, -fmax(f128), 1e-1); + try testArgs(f128, -fmax(f128), 1e0); + try testArgs(f128, -fmax(f128), 1e1); try testArgs(f128, -fmax(f128), fmax(f128)); try testArgs(f128, -fmax(f128), inf(f128)); try testArgs(f128, -fmax(f128), nan(f128)); - try testArgs(f128, -10.0, -nan(f128)); - try testArgs(f128, -10.0, -inf(f128)); - try testArgs(f128, -10.0, -fmax(f128)); - try testArgs(f128, -10.0, -10.0); - try testArgs(f128, -10.0, -1.0); - try testArgs(f128, -10.0, -0.1); - try testArgs(f128, -10.0, -fmin(f128)); - try testArgs(f128, -10.0, -tmin(f128)); - try testArgs(f128, -10.0, -0.0); - try testArgs(f128, -10.0, 0.0); - try testArgs(f128, -10.0, tmin(f128)); - try testArgs(f128, -10.0, fmin(f128)); - try testArgs(f128, -10.0, 0.1); - try testArgs(f128, -10.0, 1.0); - try testArgs(f128, -10.0, 10.0); - try testArgs(f128, -10.0, fmax(f128)); - try testArgs(f128, -10.0, inf(f128)); - try testArgs(f128, -10.0, nan(f128)); + try testArgs(f128, -1e1, -nan(f128)); + try testArgs(f128, -1e1, -inf(f128)); + try testArgs(f128, -1e1, -fmax(f128)); + try testArgs(f128, -1e1, -1e1); + try testArgs(f128, -1e1, -1e0); + try testArgs(f128, -1e1, -1e-1); + try testArgs(f128, -1e1, -fmin(f128)); + try testArgs(f128, -1e1, -tmin(f128)); + try testArgs(f128, -1e1, -0.0); + try testArgs(f128, -1e1, 0.0); + try testArgs(f128, -1e1, tmin(f128)); + try testArgs(f128, -1e1, fmin(f128)); + try testArgs(f128, -1e1, 1e-1); + try testArgs(f128, -1e1, 1e0); + try testArgs(f128, -1e1, 1e1); + try testArgs(f128, -1e1, fmax(f128)); + try testArgs(f128, -1e1, inf(f128)); + try testArgs(f128, -1e1, nan(f128)); - try testArgs(f128, -1.0, -nan(f128)); - try testArgs(f128, -1.0, -inf(f128)); - try testArgs(f128, -1.0, -fmax(f128)); - try testArgs(f128, -1.0, -10.0); - try testArgs(f128, -1.0, -1.0); - try testArgs(f128, -1.0, -0.1); - try testArgs(f128, -1.0, -fmin(f128)); - try testArgs(f128, -1.0, -tmin(f128)); - try testArgs(f128, -1.0, -0.0); - try testArgs(f128, -1.0, 0.0); - try testArgs(f128, -1.0, tmin(f128)); - try testArgs(f128, -1.0, fmin(f128)); - try testArgs(f128, -1.0, 0.1); - try testArgs(f128, -1.0, 1.0); - try testArgs(f128, -1.0, 10.0); - try testArgs(f128, -1.0, fmax(f128)); - try testArgs(f128, -1.0, inf(f128)); - try testArgs(f128, -1.0, nan(f128)); + try testArgs(f128, -1e0, -nan(f128)); + try testArgs(f128, -1e0, -inf(f128)); + try testArgs(f128, -1e0, -fmax(f128)); + try testArgs(f128, -1e0, -1e1); + try testArgs(f128, -1e0, -1e0); + try testArgs(f128, -1e0, -1e-1); + try testArgs(f128, -1e0, -fmin(f128)); + try testArgs(f128, -1e0, -tmin(f128)); + try testArgs(f128, -1e0, -0.0); + try testArgs(f128, -1e0, 0.0); + try testArgs(f128, -1e0, tmin(f128)); + try testArgs(f128, -1e0, fmin(f128)); + try testArgs(f128, -1e0, 1e-1); + try testArgs(f128, -1e0, 1e0); + try testArgs(f128, -1e0, 1e1); + try testArgs(f128, -1e0, fmax(f128)); + try testArgs(f128, -1e0, inf(f128)); + try testArgs(f128, -1e0, nan(f128)); - try testArgs(f128, -0.1, -nan(f128)); - try testArgs(f128, -0.1, -inf(f128)); - try testArgs(f128, -0.1, -fmax(f128)); - try testArgs(f128, -0.1, -10.0); - try testArgs(f128, -0.1, -1.0); - try testArgs(f128, -0.1, -0.1); - try testArgs(f128, -0.1, -fmin(f128)); - try testArgs(f128, -0.1, -tmin(f128)); - try testArgs(f128, -0.1, -0.0); - try testArgs(f128, -0.1, 0.0); - try testArgs(f128, -0.1, tmin(f128)); - try testArgs(f128, -0.1, fmin(f128)); - try testArgs(f128, -0.1, 0.1); - try testArgs(f128, -0.1, 1.0); - try testArgs(f128, -0.1, 10.0); - try testArgs(f128, -0.1, fmax(f128)); - try testArgs(f128, -0.1, inf(f128)); - try testArgs(f128, -0.1, nan(f128)); + try testArgs(f128, -1e-1, -nan(f128)); + try testArgs(f128, -1e-1, -inf(f128)); + try testArgs(f128, -1e-1, -fmax(f128)); + try testArgs(f128, -1e-1, -1e1); + try testArgs(f128, -1e-1, -1e0); + try testArgs(f128, -1e-1, -1e-1); + try testArgs(f128, -1e-1, -fmin(f128)); + try testArgs(f128, -1e-1, -tmin(f128)); + try testArgs(f128, -1e-1, -0.0); + try testArgs(f128, -1e-1, 0.0); + try testArgs(f128, -1e-1, tmin(f128)); + try testArgs(f128, -1e-1, fmin(f128)); + try testArgs(f128, -1e-1, 1e-1); + try testArgs(f128, -1e-1, 1e0); + try testArgs(f128, -1e-1, 1e1); + try testArgs(f128, -1e-1, fmax(f128)); + try testArgs(f128, -1e-1, inf(f128)); + try testArgs(f128, -1e-1, nan(f128)); try testArgs(f128, -fmin(f128), -nan(f128)); try testArgs(f128, -fmin(f128), -inf(f128)); try testArgs(f128, -fmin(f128), -fmax(f128)); - try testArgs(f128, -fmin(f128), -10.0); - try testArgs(f128, -fmin(f128), -1.0); - try testArgs(f128, -fmin(f128), -0.1); + try testArgs(f128, -fmin(f128), -1e1); + try testArgs(f128, -fmin(f128), -1e0); + try testArgs(f128, -fmin(f128), -1e-1); try testArgs(f128, -fmin(f128), -fmin(f128)); try testArgs(f128, -fmin(f128), -tmin(f128)); try testArgs(f128, -fmin(f128), -0.0); try testArgs(f128, -fmin(f128), 0.0); try testArgs(f128, -fmin(f128), tmin(f128)); try testArgs(f128, -fmin(f128), fmin(f128)); - try testArgs(f128, -fmin(f128), 0.1); - try testArgs(f128, -fmin(f128), 1.0); - try testArgs(f128, -fmin(f128), 10.0); + try testArgs(f128, -fmin(f128), 1e-1); + try testArgs(f128, -fmin(f128), 1e0); + try testArgs(f128, -fmin(f128), 1e1); try testArgs(f128, -fmin(f128), fmax(f128)); try testArgs(f128, -fmin(f128), inf(f128)); try testArgs(f128, -fmin(f128), nan(f128)); @@ -3215,18 +8707,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, -tmin(f128), -nan(f128)); try testArgs(f128, -tmin(f128), -inf(f128)); try testArgs(f128, -tmin(f128), -fmax(f128)); - try testArgs(f128, -tmin(f128), -10.0); - try testArgs(f128, -tmin(f128), -1.0); - try testArgs(f128, -tmin(f128), -0.1); + try testArgs(f128, -tmin(f128), -1e1); + try testArgs(f128, -tmin(f128), -1e0); + try testArgs(f128, -tmin(f128), -1e-1); try testArgs(f128, -tmin(f128), -fmin(f128)); try testArgs(f128, -tmin(f128), -tmin(f128)); try testArgs(f128, -tmin(f128), -0.0); try testArgs(f128, -tmin(f128), 0.0); try testArgs(f128, -tmin(f128), tmin(f128)); try testArgs(f128, -tmin(f128), fmin(f128)); - try testArgs(f128, -tmin(f128), 0.1); - try testArgs(f128, -tmin(f128), 1.0); - try testArgs(f128, -tmin(f128), 10.0); + try testArgs(f128, -tmin(f128), 1e-1); + try testArgs(f128, -tmin(f128), 1e0); + try testArgs(f128, -tmin(f128), 1e1); try testArgs(f128, -tmin(f128), fmax(f128)); try testArgs(f128, -tmin(f128), inf(f128)); try testArgs(f128, -tmin(f128), nan(f128)); @@ -3234,18 +8726,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, -0.0, -nan(f128)); try testArgs(f128, -0.0, -inf(f128)); try testArgs(f128, -0.0, -fmax(f128)); - try testArgs(f128, -0.0, -10.0); - try testArgs(f128, -0.0, -1.0); - try testArgs(f128, -0.0, -0.1); + try testArgs(f128, -0.0, -1e1); + try testArgs(f128, -0.0, -1e0); + try testArgs(f128, -0.0, -1e-1); try testArgs(f128, -0.0, -fmin(f128)); try testArgs(f128, -0.0, -tmin(f128)); try testArgs(f128, -0.0, -0.0); try testArgs(f128, -0.0, 0.0); try testArgs(f128, -0.0, tmin(f128)); try testArgs(f128, -0.0, fmin(f128)); - try testArgs(f128, -0.0, 0.1); - try testArgs(f128, -0.0, 1.0); - try testArgs(f128, -0.0, 10.0); + try testArgs(f128, -0.0, 1e-1); + try testArgs(f128, -0.0, 1e0); + try testArgs(f128, -0.0, 1e1); try testArgs(f128, -0.0, fmax(f128)); try testArgs(f128, -0.0, inf(f128)); try testArgs(f128, -0.0, nan(f128)); @@ -3253,18 +8745,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, 0.0, -nan(f128)); try testArgs(f128, 0.0, -inf(f128)); try testArgs(f128, 0.0, -fmax(f128)); - try testArgs(f128, 0.0, -10.0); - try testArgs(f128, 0.0, -1.0); - try testArgs(f128, 0.0, -0.1); + try testArgs(f128, 0.0, -1e1); + try testArgs(f128, 0.0, -1e0); + try testArgs(f128, 0.0, -1e-1); try testArgs(f128, 0.0, -fmin(f128)); try testArgs(f128, 0.0, -tmin(f128)); try testArgs(f128, 0.0, -0.0); try testArgs(f128, 0.0, 0.0); try testArgs(f128, 0.0, tmin(f128)); try testArgs(f128, 0.0, fmin(f128)); - try testArgs(f128, 0.0, 0.1); - try testArgs(f128, 0.0, 1.0); - try testArgs(f128, 0.0, 10.0); + try testArgs(f128, 0.0, 1e-1); + try testArgs(f128, 0.0, 1e0); + try testArgs(f128, 0.0, 1e1); try testArgs(f128, 0.0, fmax(f128)); try testArgs(f128, 0.0, inf(f128)); try testArgs(f128, 0.0, nan(f128)); @@ -3272,18 +8764,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, tmin(f128), -nan(f128)); try testArgs(f128, tmin(f128), -inf(f128)); try testArgs(f128, tmin(f128), -fmax(f128)); - try testArgs(f128, tmin(f128), -10.0); - try testArgs(f128, tmin(f128), -1.0); - try testArgs(f128, tmin(f128), -0.1); + try testArgs(f128, tmin(f128), -1e1); + try testArgs(f128, tmin(f128), -1e0); + try testArgs(f128, tmin(f128), -1e-1); try testArgs(f128, tmin(f128), -fmin(f128)); try testArgs(f128, tmin(f128), -tmin(f128)); try testArgs(f128, tmin(f128), -0.0); try testArgs(f128, tmin(f128), 0.0); try testArgs(f128, tmin(f128), tmin(f128)); try testArgs(f128, tmin(f128), fmin(f128)); - try testArgs(f128, tmin(f128), 0.1); - try testArgs(f128, tmin(f128), 1.0); - try testArgs(f128, tmin(f128), 10.0); + try testArgs(f128, tmin(f128), 1e-1); + try testArgs(f128, tmin(f128), 1e0); + try testArgs(f128, tmin(f128), 1e1); try testArgs(f128, tmin(f128), fmax(f128)); try testArgs(f128, tmin(f128), inf(f128)); try testArgs(f128, tmin(f128), nan(f128)); @@ -3291,94 +8783,94 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, fmin(f128), -nan(f128)); try testArgs(f128, fmin(f128), -inf(f128)); try testArgs(f128, fmin(f128), -fmax(f128)); - try testArgs(f128, fmin(f128), -10.0); - try testArgs(f128, fmin(f128), -1.0); - try testArgs(f128, fmin(f128), -0.1); + try testArgs(f128, fmin(f128), -1e1); + try testArgs(f128, fmin(f128), -1e0); + try testArgs(f128, fmin(f128), -1e-1); try testArgs(f128, fmin(f128), -fmin(f128)); try testArgs(f128, fmin(f128), -tmin(f128)); try testArgs(f128, fmin(f128), -0.0); try testArgs(f128, fmin(f128), 0.0); try testArgs(f128, fmin(f128), tmin(f128)); try testArgs(f128, fmin(f128), fmin(f128)); - try testArgs(f128, fmin(f128), 0.1); - try testArgs(f128, fmin(f128), 1.0); - try testArgs(f128, fmin(f128), 10.0); + try testArgs(f128, fmin(f128), 1e-1); + try testArgs(f128, fmin(f128), 1e0); + try testArgs(f128, fmin(f128), 1e1); try testArgs(f128, fmin(f128), fmax(f128)); try testArgs(f128, fmin(f128), inf(f128)); try testArgs(f128, fmin(f128), nan(f128)); - try testArgs(f128, 0.1, -nan(f128)); - try testArgs(f128, 0.1, -inf(f128)); - try testArgs(f128, 0.1, -fmax(f128)); - try testArgs(f128, 0.1, -10.0); - try testArgs(f128, 0.1, -1.0); - try testArgs(f128, 0.1, -0.1); - try testArgs(f128, 0.1, -fmin(f128)); - try testArgs(f128, 0.1, -tmin(f128)); - try testArgs(f128, 0.1, -0.0); - try testArgs(f128, 0.1, 0.0); - try testArgs(f128, 0.1, tmin(f128)); - try testArgs(f128, 0.1, fmin(f128)); - try testArgs(f128, 0.1, 0.1); - try testArgs(f128, 0.1, 1.0); - try testArgs(f128, 0.1, 10.0); - try testArgs(f128, 0.1, fmax(f128)); - try testArgs(f128, 0.1, inf(f128)); - try testArgs(f128, 0.1, nan(f128)); + try testArgs(f128, 1e-1, -nan(f128)); + try testArgs(f128, 1e-1, -inf(f128)); + try testArgs(f128, 1e-1, -fmax(f128)); + try testArgs(f128, 1e-1, -1e1); + try testArgs(f128, 1e-1, -1e0); + try testArgs(f128, 1e-1, -1e-1); + try testArgs(f128, 1e-1, -fmin(f128)); + try testArgs(f128, 1e-1, -tmin(f128)); + try testArgs(f128, 1e-1, -0.0); + try testArgs(f128, 1e-1, 0.0); + try testArgs(f128, 1e-1, tmin(f128)); + try testArgs(f128, 1e-1, fmin(f128)); + try testArgs(f128, 1e-1, 1e-1); + try testArgs(f128, 1e-1, 1e0); + try testArgs(f128, 1e-1, 1e1); + try testArgs(f128, 1e-1, fmax(f128)); + try testArgs(f128, 1e-1, inf(f128)); + try testArgs(f128, 1e-1, nan(f128)); - try testArgs(f128, 1.0, -nan(f128)); - try testArgs(f128, 1.0, -inf(f128)); - try testArgs(f128, 1.0, -fmax(f128)); - try testArgs(f128, 1.0, -10.0); - try testArgs(f128, 1.0, -1.0); - try testArgs(f128, 1.0, -0.1); - try testArgs(f128, 1.0, -fmin(f128)); - try testArgs(f128, 1.0, -tmin(f128)); - try testArgs(f128, 1.0, -0.0); - try testArgs(f128, 1.0, 0.0); - try testArgs(f128, 1.0, tmin(f128)); - try testArgs(f128, 1.0, fmin(f128)); - try testArgs(f128, 1.0, 0.1); - try testArgs(f128, 1.0, 1.0); - try testArgs(f128, 1.0, 10.0); - try testArgs(f128, 1.0, fmax(f128)); - try testArgs(f128, 1.0, inf(f128)); - try testArgs(f128, 1.0, nan(f128)); + try testArgs(f128, 1e0, -nan(f128)); + try testArgs(f128, 1e0, -inf(f128)); + try testArgs(f128, 1e0, -fmax(f128)); + try testArgs(f128, 1e0, -1e1); + try testArgs(f128, 1e0, -1e0); + try testArgs(f128, 1e0, -1e-1); + try testArgs(f128, 1e0, -fmin(f128)); + try testArgs(f128, 1e0, -tmin(f128)); + try testArgs(f128, 1e0, -0.0); + try testArgs(f128, 1e0, 0.0); + try testArgs(f128, 1e0, tmin(f128)); + try testArgs(f128, 1e0, fmin(f128)); + try testArgs(f128, 1e0, 1e-1); + try testArgs(f128, 1e0, 1e0); + try testArgs(f128, 1e0, 1e1); + try testArgs(f128, 1e0, fmax(f128)); + try testArgs(f128, 1e0, inf(f128)); + try testArgs(f128, 1e0, nan(f128)); - try testArgs(f128, 10.0, -nan(f128)); - try testArgs(f128, 10.0, -inf(f128)); - try testArgs(f128, 10.0, -fmax(f128)); - try testArgs(f128, 10.0, -10.0); - try testArgs(f128, 10.0, -1.0); - try testArgs(f128, 10.0, -0.1); - try testArgs(f128, 10.0, -fmin(f128)); - try testArgs(f128, 10.0, -tmin(f128)); - try testArgs(f128, 10.0, -0.0); - try testArgs(f128, 10.0, 0.0); - try testArgs(f128, 10.0, tmin(f128)); - try testArgs(f128, 10.0, fmin(f128)); - try testArgs(f128, 10.0, 0.1); - try testArgs(f128, 10.0, 1.0); - try testArgs(f128, 10.0, 10.0); - try testArgs(f128, 10.0, fmax(f128)); - try testArgs(f128, 10.0, inf(f128)); - try testArgs(f128, 10.0, nan(f128)); + try testArgs(f128, 1e1, -nan(f128)); + try testArgs(f128, 1e1, -inf(f128)); + try testArgs(f128, 1e1, -fmax(f128)); + try testArgs(f128, 1e1, -1e1); + try testArgs(f128, 1e1, -1e0); + try testArgs(f128, 1e1, -1e-1); + try testArgs(f128, 1e1, -fmin(f128)); + try testArgs(f128, 1e1, -tmin(f128)); + try testArgs(f128, 1e1, -0.0); + try testArgs(f128, 1e1, 0.0); + try testArgs(f128, 1e1, tmin(f128)); + try testArgs(f128, 1e1, fmin(f128)); + try testArgs(f128, 1e1, 1e-1); + try testArgs(f128, 1e1, 1e0); + try testArgs(f128, 1e1, 1e1); + try testArgs(f128, 1e1, fmax(f128)); + try testArgs(f128, 1e1, inf(f128)); + try testArgs(f128, 1e1, nan(f128)); try testArgs(f128, fmax(f128), -nan(f128)); try testArgs(f128, fmax(f128), -inf(f128)); try testArgs(f128, fmax(f128), -fmax(f128)); - try testArgs(f128, fmax(f128), -10.0); - try testArgs(f128, fmax(f128), -1.0); - try testArgs(f128, fmax(f128), -0.1); + try testArgs(f128, fmax(f128), -1e1); + try testArgs(f128, fmax(f128), -1e0); + try testArgs(f128, fmax(f128), -1e-1); try testArgs(f128, fmax(f128), -fmin(f128)); try testArgs(f128, fmax(f128), -tmin(f128)); try testArgs(f128, fmax(f128), -0.0); try testArgs(f128, fmax(f128), 0.0); try testArgs(f128, fmax(f128), tmin(f128)); try testArgs(f128, fmax(f128), fmin(f128)); - try testArgs(f128, fmax(f128), 0.1); - try testArgs(f128, fmax(f128), 1.0); - try testArgs(f128, fmax(f128), 10.0); + try testArgs(f128, fmax(f128), 1e-1); + try testArgs(f128, fmax(f128), 1e0); + try testArgs(f128, fmax(f128), 1e1); try testArgs(f128, fmax(f128), fmax(f128)); try testArgs(f128, fmax(f128), inf(f128)); try testArgs(f128, fmax(f128), nan(f128)); @@ -3386,18 +8878,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, inf(f128), -nan(f128)); try testArgs(f128, inf(f128), -inf(f128)); try testArgs(f128, inf(f128), -fmax(f128)); - try testArgs(f128, inf(f128), -10.0); - try testArgs(f128, inf(f128), -1.0); - try testArgs(f128, inf(f128), -0.1); + try testArgs(f128, inf(f128), -1e1); + try testArgs(f128, inf(f128), -1e0); + try testArgs(f128, inf(f128), -1e-1); try testArgs(f128, inf(f128), -fmin(f128)); try testArgs(f128, inf(f128), -tmin(f128)); try testArgs(f128, inf(f128), -0.0); try testArgs(f128, inf(f128), 0.0); try testArgs(f128, inf(f128), tmin(f128)); try testArgs(f128, inf(f128), fmin(f128)); - try testArgs(f128, inf(f128), 0.1); - try testArgs(f128, inf(f128), 1.0); - try testArgs(f128, inf(f128), 10.0); + try testArgs(f128, inf(f128), 1e-1); + try testArgs(f128, inf(f128), 1e0); + try testArgs(f128, inf(f128), 1e1); try testArgs(f128, inf(f128), fmax(f128)); try testArgs(f128, inf(f128), inf(f128)); try testArgs(f128, inf(f128), nan(f128)); @@ -3405,18 +8897,18 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(f128, nan(f128), -nan(f128)); try testArgs(f128, nan(f128), -inf(f128)); try testArgs(f128, nan(f128), -fmax(f128)); - try testArgs(f128, nan(f128), -10.0); - try testArgs(f128, nan(f128), -1.0); - try testArgs(f128, nan(f128), -0.1); + try testArgs(f128, nan(f128), -1e1); + try testArgs(f128, nan(f128), -1e0); + try testArgs(f128, nan(f128), -1e-1); try testArgs(f128, nan(f128), -fmin(f128)); try testArgs(f128, nan(f128), -tmin(f128)); try testArgs(f128, nan(f128), -0.0); try testArgs(f128, nan(f128), 0.0); try testArgs(f128, nan(f128), tmin(f128)); try testArgs(f128, nan(f128), fmin(f128)); - try testArgs(f128, nan(f128), 0.1); - try testArgs(f128, nan(f128), 1.0); - try testArgs(f128, nan(f128), 10.0); + try testArgs(f128, nan(f128), 1e-1); + try testArgs(f128, nan(f128), 1e0); + try testArgs(f128, nan(f128), 1e1); try testArgs(f128, nan(f128), fmax(f128)); try testArgs(f128, nan(f128), inf(f128)); try testArgs(f128, nan(f128), nan(f128)); @@ -4050,73 +9542,73 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) fmax(f16), }); try testArgs(@Vector(2, f16), .{ - 0.1, 1.0, + 1e-1, 1e0, }, .{ -nan(f16), -fmin(f16), }); try testArgs(@Vector(4, f16), .{ - 0.1, -fmax(f16), 0.0, 0.1, + 1e-1, -fmax(f16), 0.0, 1e-1, }, .{ - -fmin(f16), -10.0, 1.0, -tmin(f16), + -fmin(f16), -1e1, 1e0, -tmin(f16), }); try testArgs(@Vector(8, f16), .{ - -fmax(f16), -fmin(f16), -nan(f16), -0.0, tmin(f16), -0.0, 0.0, 0.1, + -fmax(f16), -fmin(f16), -nan(f16), -0.0, tmin(f16), -0.0, 0.0, 1e-1, }, .{ - -1.0, tmin(f16), nan(f16), nan(f16), -fmax(f16), -10.0, -nan(f16), 10.0, + -1e0, tmin(f16), nan(f16), nan(f16), -fmax(f16), -1e1, -nan(f16), 1e1, }); try testArgs(@Vector(16, f16), .{ - 0.1, fmax(f16), -10.0, fmax(f16), -10.0, 0.1, -tmin(f16), -inf(f16), -tmin(f16), -1.0, -fmin(f16), tmin(f16), 10.0, -fmax(f16), 0.0, -fmin(f16), + 1e-1, fmax(f16), -1e1, fmax(f16), -1e1, 1e-1, -tmin(f16), -inf(f16), -tmin(f16), -1e0, -fmin(f16), tmin(f16), 1e1, -fmax(f16), 0.0, -fmin(f16), }, .{ - inf(f16), -10.0, -fmax(f16), fmax(f16), -tmin(f16), 0.0, -1.0, -1.0, 0.1, -nan(f16), -tmin(f16), 1.0, 0.1, fmax(f16), -0.0, inf(f16), + inf(f16), -1e1, -fmax(f16), fmax(f16), -tmin(f16), 0.0, -1e0, -1e0, 1e-1, -nan(f16), -tmin(f16), 1e0, 1e-1, fmax(f16), -0.0, inf(f16), }); try testArgs(@Vector(32, f16), .{ - -inf(f16), tmin(f16), fmin(f16), -nan(f16), nan(f16), 0.1, 0.0, 10.0, -tmin(f16), inf(f16), 1.0, -10.0, fmin(f16), -0.0, 1.0, -fmax(f16), - 10.0, -0.0, -10.0, -tmin(f16), fmax(f16), nan(f16), -fmin(f16), -1.0, 0.0, -10.0, -nan(f16), 1.0, -tmin(f16), -0.0, nan(f16), 10.0, + -inf(f16), tmin(f16), fmin(f16), -nan(f16), nan(f16), 1e-1, 0.0, 1e1, -tmin(f16), inf(f16), 1e0, -1e1, fmin(f16), -0.0, 1e0, -fmax(f16), + 1e1, -0.0, -1e1, -tmin(f16), fmax(f16), nan(f16), -fmin(f16), -1e0, 0.0, -1e1, -nan(f16), 1e0, -tmin(f16), -0.0, nan(f16), 1e1, }, .{ - 0.0, 10.0, -nan(f16), -0.0, tmin(f16), fmax(f16), nan(f16), tmin(f16), -10.0, 0.1, 10.0, fmin(f16), -fmax(f16), inf(f16), inf(f16), -tmin(f16), - inf(f16), -0.0, 0.1, 0.0, -fmin(f16), -0.0, -nan(f16), -inf(f16), -fmin(f16), fmax(f16), 1.0, fmin(f16), -0.0, -tmin(f16), -fmax(f16), -10.0, + 0.0, 1e1, -nan(f16), -0.0, tmin(f16), fmax(f16), nan(f16), tmin(f16), -1e1, 1e-1, 1e1, fmin(f16), -fmax(f16), inf(f16), inf(f16), -tmin(f16), + inf(f16), -0.0, 1e-1, 0.0, -fmin(f16), -0.0, -nan(f16), -inf(f16), -fmin(f16), fmax(f16), 1e0, fmin(f16), -0.0, -tmin(f16), -fmax(f16), -1e1, }); try testArgs(@Vector(64, f16), .{ - -nan(f16), fmin(f16), -inf(f16), inf(f16), -tmin(f16), inf(f16), 0.1, -1.0, -inf(f16), nan(f16), -fmin(f16), 0.1, -tmin(f16), -fmax(f16), -10.0, inf(f16), - 0.0, -fmin(f16), -fmax(f16), 10.0, -fmax(f16), fmax(f16), 10.0, fmin(f16), -inf(f16), -nan(f16), -tmin(f16), nan(f16), -0.0, 0.0, 0.1, -fmin(f16), - 0.0, nan(f16), inf(f16), fmax(f16), nan(f16), tmin(f16), 1.0, tmin(f16), fmin(f16), -10.0, 0.0, 0.1, inf(f16), -10.0, inf(f16), 1.0, - 0.1, -inf(f16), 10.0, -0.0, -1.0, -tmin(f16), -nan(f16), 0.1, 0.1, -nan(f16), -0.0, -10.0, -0.0, -nan(f16), 0.1, fmin(f16), + -nan(f16), fmin(f16), -inf(f16), inf(f16), -tmin(f16), inf(f16), 1e-1, -1e0, -inf(f16), nan(f16), -fmin(f16), 1e-1, -tmin(f16), -fmax(f16), -1e1, inf(f16), + 0.0, -fmin(f16), -fmax(f16), 1e1, -fmax(f16), fmax(f16), 1e1, fmin(f16), -inf(f16), -nan(f16), -tmin(f16), nan(f16), -0.0, 0.0, 1e-1, -fmin(f16), + 0.0, nan(f16), inf(f16), fmax(f16), nan(f16), tmin(f16), 1e0, tmin(f16), fmin(f16), -1e1, 0.0, 1e-1, inf(f16), -1e1, inf(f16), 1e0, + 1e-1, -inf(f16), 1e1, -0.0, -1e0, -tmin(f16), -nan(f16), 1e-1, 1e-1, -nan(f16), -0.0, -1e1, -0.0, -nan(f16), 1e-1, fmin(f16), }, .{ - 10.0, 0.0, fmax(f16), -inf(f16), -fmax(f16), -fmax(f16), tmin(f16), -1.0, -tmin(f16), -10.0, nan(f16), -nan(f16), tmin(f16), -fmin(f16), nan(f16), -10.0, - 10.0, fmax(f16), 0.1, 0.0, 0.1, -fmax(f16), -0.0, -fmin(f16), inf(f16), -1.0, inf(f16), fmin(f16), -inf(f16), -tmin(f16), 10.0, 10.0, - 0.1, 0.1, 0.1, 10.0, -fmin(f16), inf(f16), 0.1, fmax(f16), inf(f16), -0.0, -10.0, tmin(f16), -fmin(f16), 0.0, 10.0, 0.0, - -tmin(f16), -inf(f16), 1.0, -fmax(f16), inf(f16), 10.0, fmax(f16), -1.0, 0.0, 0.1, -1.0, -inf(f16), 0.1, 0.0, -10.0, fmax(f16), + 1e1, 0.0, fmax(f16), -inf(f16), -fmax(f16), -fmax(f16), tmin(f16), -1e0, -tmin(f16), -1e1, nan(f16), -nan(f16), tmin(f16), -fmin(f16), nan(f16), -1e1, + 1e1, fmax(f16), 1e-1, 0.0, 1e-1, -fmax(f16), -0.0, -fmin(f16), inf(f16), -1e0, inf(f16), fmin(f16), -inf(f16), -tmin(f16), 1e1, 1e1, + 1e-1, 1e-1, 1e-1, 1e1, -fmin(f16), inf(f16), 1e-1, fmax(f16), inf(f16), -0.0, -1e1, tmin(f16), -fmin(f16), 0.0, 1e1, 0.0, + -tmin(f16), -inf(f16), 1e0, -fmax(f16), inf(f16), 1e1, fmax(f16), -1e0, 0.0, 1e-1, -1e0, -inf(f16), 1e-1, 0.0, -1e1, fmax(f16), }); try testArgs(@Vector(128, f16), .{ - -fmin(f16), 1.0, 0.0, 0.1, nan(f16), 0.1, 0.1, -inf(f16), -tmin(f16), 1.0, -fmin(f16), -fmax(f16), -1.0, -fmin(f16), 10.0, -nan(f16), - inf(f16), -inf(f16), tmin(f16), -10.0, -1.0, -0.0, -0.0, 1.0, nan(f16), -10.0, fmin(f16), -tmin(f16), tmin(f16), 0.1, -fmax(f16), fmax(f16), - tmin(f16), -fmin(f16), nan(f16), 10.0, 1.0, -fmin(f16), 0.1, 10.0, fmax(f16), fmax(f16), fmax(f16), -1.0, -nan(f16), 10.0, tmin(f16), -nan(f16), - -nan(f16), -inf(f16), -0.0, -inf(f16), nan(f16), -1.0, 0.1, -fmax(f16), -10.0, nan(f16), 1.0, -10.0, tmin(f16), 1.0, 0.1, 1.0, - 10.0, 0.1, tmin(f16), nan(f16), -inf(f16), -1.0, -1.0, -fmax(f16), -inf(f16), 0.1, 0.1, -0.0, 10.0, fmin(f16), -1.0, inf(f16), - 0.1, -10.0, inf(f16), -0.0, 0.1, 0.0, inf(f16), 1.0, tmin(f16), -tmin(f16), 0.1, inf(f16), tmin(f16), -inf(f16), 10.0, 1.0, - -inf(f16), 0.1, 1.0, fmax(f16), -fmin(f16), nan(f16), -nan(f16), fmin(f16), -1.0, -fmax(f16), inf(f16), -fmax(f16), 0.0, -10.0, fmin(f16), -fmax(f16), - -0.0, -1.0, 0.1, 10.0, inf(f16), fmax(f16), inf(f16), 10.0, fmax(f16), -0.0, -tmin(f16), fmin(f16), inf(f16), nan(f16), -fmin(f16), -1.0, + -fmin(f16), 1e0, 0.0, 1e-1, nan(f16), 1e-1, 1e-1, -inf(f16), -tmin(f16), 1e0, -fmin(f16), -fmax(f16), -1e0, -fmin(f16), 1e1, -nan(f16), + inf(f16), -inf(f16), tmin(f16), -1e1, -1e0, -0.0, -0.0, 1e0, nan(f16), -1e1, fmin(f16), -tmin(f16), tmin(f16), 1e-1, -fmax(f16), fmax(f16), + tmin(f16), -fmin(f16), nan(f16), 1e1, 1e0, -fmin(f16), 1e-1, 1e1, fmax(f16), fmax(f16), fmax(f16), -1e0, -nan(f16), 1e1, tmin(f16), -nan(f16), + -nan(f16), -inf(f16), -0.0, -inf(f16), nan(f16), -1e0, 1e-1, -fmax(f16), -1e1, nan(f16), 1e0, -1e1, tmin(f16), 1e0, 1e-1, 1e0, + 1e1, 1e-1, tmin(f16), nan(f16), -inf(f16), -1e0, -1e0, -fmax(f16), -inf(f16), 1e-1, 1e-1, -0.0, 1e1, fmin(f16), -1e0, inf(f16), + 1e-1, -1e1, inf(f16), -0.0, 1e-1, 0.0, inf(f16), 1e0, tmin(f16), -tmin(f16), 1e-1, inf(f16), tmin(f16), -inf(f16), 1e1, 1e0, + -inf(f16), 1e-1, 1e0, fmax(f16), -fmin(f16), nan(f16), -nan(f16), fmin(f16), -1e0, -fmax(f16), inf(f16), -fmax(f16), 0.0, -1e1, fmin(f16), -fmax(f16), + -0.0, -1e0, 1e-1, 1e1, inf(f16), fmax(f16), inf(f16), 1e1, fmax(f16), -0.0, -tmin(f16), fmin(f16), inf(f16), nan(f16), -fmin(f16), -1e0, }, .{ - -fmax(f16), fmax(f16), inf(f16), 1.0, nan(f16), 0.1, -fmax(f16), 10.0, -fmin(f16), 0.1, fmin(f16), -0.0, 0.1, -0.0, -nan(f16), -nan(f16), - inf(f16), 1.0, -1.0, 0.1, 0.1, 0.1, 0.0, -tmin(f16), -1.0, -10.0, -tmin(f16), 1.0, -10.0, fmin(f16), -fmax(f16), -nan(f16), - -tmin(f16), -inf(f16), inf(f16), -fmin(f16), -nan(f16), 0.0, -inf(f16), -fmax(f16), 0.1, -inf(f16), tmin(f16), nan(f16), tmin(f16), fmin(f16), -0.0, 0.1, - fmin(f16), fmin(f16), 1.0, tmin(f16), 0.0, 10.0, 0.1, inf(f16), 10.0, -tmin(f16), tmin(f16), -1.0, -fmin(f16), 1.0, nan(f16), -fmax(f16), - nan(f16), -fmin(f16), 0.1, 10.0, -10.0, 1.0, -0.0, tmin(f16), nan(f16), inf(f16), -fmax(f16), tmin(f16), -tmin(f16), 10.0, fmin(f16), -tmin(f16), - -0.0, 1.0, tmin(f16), fmax(f16), 1.0, -inf(f16), -nan(f16), -0.0, 0.1, -inf(f16), 0.1, fmax(f16), -inf(f16), -nan(f16), -1.0, -inf(f16), - 0.1, fmin(f16), -10.0, -tmin(f16), 1.0, -nan(f16), -fmax(f16), -10.0, -tmin(f16), 10.0, nan(f16), fmin(f16), fmax(f16), tmin(f16), -inf(f16), 1.0, - -fmin(f16), tmin(f16), -1.0, 0.1, 0.0, nan(f16), 1.0, fmax(f16), -1.0, 10.0, nan(f16), 1.0, fmin(f16), 1.0, -10.0, -10.0, + -fmax(f16), fmax(f16), inf(f16), 1e0, nan(f16), 1e-1, -fmax(f16), 1e1, -fmin(f16), 1e-1, fmin(f16), -0.0, 1e-1, -0.0, -nan(f16), -nan(f16), + inf(f16), 1e0, -1e0, 1e-1, 1e-1, 1e-1, 0.0, -tmin(f16), -1e0, -1e1, -tmin(f16), 1e0, -1e1, fmin(f16), -fmax(f16), -nan(f16), + -tmin(f16), -inf(f16), inf(f16), -fmin(f16), -nan(f16), 0.0, -inf(f16), -fmax(f16), 1e-1, -inf(f16), tmin(f16), nan(f16), tmin(f16), fmin(f16), -0.0, 1e-1, + fmin(f16), fmin(f16), 1e0, tmin(f16), 0.0, 1e1, 1e-1, inf(f16), 1e1, -tmin(f16), tmin(f16), -1e0, -fmin(f16), 1e0, nan(f16), -fmax(f16), + nan(f16), -fmin(f16), 1e-1, 1e1, -1e1, 1e0, -0.0, tmin(f16), nan(f16), inf(f16), -fmax(f16), tmin(f16), -tmin(f16), 1e1, fmin(f16), -tmin(f16), + -0.0, 1e0, tmin(f16), fmax(f16), 1e0, -inf(f16), -nan(f16), -0.0, 1e-1, -inf(f16), 1e-1, fmax(f16), -inf(f16), -nan(f16), -1e0, -inf(f16), + 1e-1, fmin(f16), -1e1, -tmin(f16), 1e0, -nan(f16), -fmax(f16), -1e1, -tmin(f16), 1e1, nan(f16), fmin(f16), fmax(f16), tmin(f16), -inf(f16), 1e0, + -fmin(f16), tmin(f16), -1e0, 1e-1, 0.0, nan(f16), 1e0, fmax(f16), -1e0, 1e1, nan(f16), 1e0, fmin(f16), 1e0, -1e1, -1e1, }); try testArgs(@Vector(69, f16), .{ - -nan(f16), -1.0, -fmin(f16), fmin(f16), inf(f16), 0.1, 0.0, fmax(f16), tmin(f16), 0.1, 0.0, -tmin(f16), 0.0, 0.0, 1.0, -inf(f16), - tmin(f16), -inf(f16), -tmin(f16), fmin(f16), -inf(f16), -nan(f16), tmin(f16), -tmin(f16), 0.1, -1.0, -tmin(f16), fmax(f16), nan(f16), -fmin(f16), fmin(f16), 10.0, - fmin(f16), -10.0, 0.0, fmin(f16), fmax(f16), -nan(f16), fmax(f16), -fmax(f16), nan(f16), -nan(f16), fmin(f16), -10.0, -fmin(f16), fmin(f16), -fmin(f16), -nan(f16), - 0.0, -1.0, fmax(f16), 0.1, inf(f16), 1.0, -1.0, -0.0, 10.0, 0.1, -fmax(f16), tmin(f16), -inf(f16), tmin(f16), -fmax(f16), 0.1, - -10.0, -0.0, -fmax(f16), nan(f16), fmax(f16), + -nan(f16), -1e0, -fmin(f16), fmin(f16), inf(f16), 1e-1, 0.0, fmax(f16), tmin(f16), 1e-1, 0.0, -tmin(f16), 0.0, 0.0, 1e0, -inf(f16), + tmin(f16), -inf(f16), -tmin(f16), fmin(f16), -inf(f16), -nan(f16), tmin(f16), -tmin(f16), 1e-1, -1e0, -tmin(f16), fmax(f16), nan(f16), -fmin(f16), fmin(f16), 1e1, + fmin(f16), -1e1, 0.0, fmin(f16), fmax(f16), -nan(f16), fmax(f16), -fmax(f16), nan(f16), -nan(f16), fmin(f16), -1e1, -fmin(f16), fmin(f16), -fmin(f16), -nan(f16), + 0.0, -1e0, fmax(f16), 1e-1, inf(f16), 1e0, -1e0, -0.0, 1e1, 1e-1, -fmax(f16), tmin(f16), -inf(f16), tmin(f16), -fmax(f16), 1e-1, + -1e1, -0.0, -fmax(f16), nan(f16), fmax(f16), }, .{ - inf(f16), -fmin(f16), 0.1, 0.1, -0.0, fmax(f16), 0.1, -0.0, 0.0, -0.0, 0.0, -tmin(f16), tmin(f16), -1.0, nan(f16), -fmin(f16), - fmin(f16), 0.1, 0.1, nan(f16), -fmax(f16), -inf(f16), -nan(f16), -nan(f16), 0.1, -fmax(f16), fmin(f16), 0.1, 0.1, 0.1, -0.0, 10.0, - tmin(f16), -nan(f16), fmin(f16), -1.0, 1.0, -tmin(f16), 0.0, nan(f16), fmax(f16), -10.0, fmin(f16), -fmin(f16), -1.0, 0.1, -fmin(f16), -fmin(f16), - -fmax(f16), 0.0, fmin(f16), -10.0, -1.0, -1.0, fmax(f16), -nan(f16), -inf(f16), -inf(f16), 0.0, tmin(f16), -0.0, nan(f16), -inf(f16), nan(f16), + inf(f16), -fmin(f16), 1e-1, 1e-1, -0.0, fmax(f16), 1e-1, -0.0, 0.0, -0.0, 0.0, -tmin(f16), tmin(f16), -1e0, nan(f16), -fmin(f16), + fmin(f16), 1e-1, 1e-1, nan(f16), -fmax(f16), -inf(f16), -nan(f16), -nan(f16), 1e-1, -fmax(f16), fmin(f16), 1e-1, 1e-1, 1e-1, -0.0, 1e1, + tmin(f16), -nan(f16), fmin(f16), -1e0, 1e0, -tmin(f16), 0.0, nan(f16), fmax(f16), -1e1, fmin(f16), -fmin(f16), -1e0, 1e-1, -fmin(f16), -fmin(f16), + -fmax(f16), 0.0, fmin(f16), -1e1, -1e0, -1e0, fmax(f16), -nan(f16), -inf(f16), -inf(f16), 0.0, tmin(f16), -0.0, nan(f16), -inf(f16), nan(f16), inf(f16), fmin(f16), -nan(f16), -inf(f16), inf(f16), }); @@ -4126,229 +9618,229 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) -tmin(f32), }); try testArgs(@Vector(2, f32), .{ - nan(f32), -10.0, + nan(f32), -1e1, }, .{ -tmin(f32), fmin(f32), }); try testArgs(@Vector(4, f32), .{ - fmax(f32), -fmax(f32), -10.0, 0.0, + fmax(f32), -fmax(f32), -1e1, 0.0, }, .{ - inf(f32), inf(f32), -10.0, inf(f32), + inf(f32), inf(f32), -1e1, inf(f32), }); try testArgs(@Vector(8, f32), .{ - -10.0, fmax(f32), inf(f32), -0.0, -tmin(f32), -tmin(f32), 10.0, 0.1, + -1e1, fmax(f32), inf(f32), -0.0, -tmin(f32), -tmin(f32), 1e1, 1e-1, }, .{ - 10.0, -1.0, -1.0, inf(f32), 1.0, -tmin(f32), nan(f32), 10.0, + 1e1, -1e0, -1e0, inf(f32), 1e0, -tmin(f32), nan(f32), 1e1, }); try testArgs(@Vector(16, f32), .{ - 0.1, 0.1, -nan(f32), -10.0, -nan(f32), 0.0, fmin(f32), fmin(f32), -10.0, 1.0, -fmax(f32), -0.0, inf(f32), -0.0, fmax(f32), -fmin(f32), + 1e-1, 1e-1, -nan(f32), -1e1, -nan(f32), 0.0, fmin(f32), fmin(f32), -1e1, 1e0, -fmax(f32), -0.0, inf(f32), -0.0, fmax(f32), -fmin(f32), }, .{ - nan(f32), 0.0, tmin(f32), -1.0, -10.0, -tmin(f32), fmin(f32), -fmax(f32), 0.1, 0.1, -inf(f32), tmin(f32), -0.0, 10.0, -0.0, -inf(f32), + nan(f32), 0.0, tmin(f32), -1e0, -1e1, -tmin(f32), fmin(f32), -fmax(f32), 1e-1, 1e-1, -inf(f32), tmin(f32), -0.0, 1e1, -0.0, -inf(f32), }); try testArgs(@Vector(32, f32), .{ - 0.1, tmin(f32), -1.0, 1.0, tmin(f32), -10.0, fmax(f32), 0.0, tmin(f32), 0.1, -1.0, fmax(f32), -nan(f32), -0.0, fmin(f32), 0.0, - -fmax(f32), fmax(f32), -fmin(f32), -inf(f32), tmin(f32), -nan(f32), -1.0, tmin(f32), -fmin(f32), -inf(f32), nan(f32), -tmin(f32), inf(f32), -inf(f32), -nan(f32), 0.1, + 1e-1, tmin(f32), -1e0, 1e0, tmin(f32), -1e1, fmax(f32), 0.0, tmin(f32), 1e-1, -1e0, fmax(f32), -nan(f32), -0.0, fmin(f32), 0.0, + -fmax(f32), fmax(f32), -fmin(f32), -inf(f32), tmin(f32), -nan(f32), -1e0, tmin(f32), -fmin(f32), -inf(f32), nan(f32), -tmin(f32), inf(f32), -inf(f32), -nan(f32), 1e-1, }, .{ - -fmin(f32), -1.0, fmax(f32), inf(f32), -fmin(f32), fmax(f32), 0.0, -10.0, 0.0, 0.1, fmin(f32), -inf(f32), 1.0, -nan(f32), -nan(f32), - -inf(f32), -0.0, nan(f32), -fmax(f32), 10.0, -tmin(f32), fmax(f32), -10.0, 0.1, tmin(f32), 0.1, -fmax(f32), 0.0, 0.1, -nan(f32), + -fmin(f32), -1e0, fmax(f32), inf(f32), -fmin(f32), fmax(f32), 0.0, -1e1, 0.0, 1e-1, fmin(f32), -inf(f32), 1e0, -nan(f32), -nan(f32), + -inf(f32), -0.0, nan(f32), -fmax(f32), 1e1, -tmin(f32), fmax(f32), -1e1, 1e-1, tmin(f32), 1e-1, -fmax(f32), 0.0, 1e-1, -nan(f32), -fmin(f32), fmax(f32), }); try testArgs(@Vector(64, f32), .{ - fmin(f32), 0.0, -inf(f32), 0.1, -10.0, -fmin(f32), 10.0, nan(f32), 0.1, 1.0, -1.0, 10.0, 10.0, 0.1, -fmax(f32), -1.0, - -fmin(f32), 0.1, -inf(f32), -inf(f32), 0.1, 0.1, 0.0, -1.0, nan(f32), -0.0, -0.0, -fmin(f32), -inf(f32), inf(f32), tmin(f32), -nan(f32), - 0.1, 0.0, 1.0, tmin(f32), 10.0, fmin(f32), -fmin(f32), fmax(f32), nan(f32), 1.0, -nan(f32), -nan(f32), 1.0, nan(f32), 1.0, fmax(f32), - -0.0, 0.0, inf(f32), nan(f32), tmin(f32), 0.0, fmin(f32), -0.0, -fmin(f32), tmin(f32), -1.0, -10.0, 0.1, -tmin(f32), -inf(f32), -1.0, + fmin(f32), 0.0, -inf(f32), 1e-1, -1e1, -fmin(f32), 1e1, nan(f32), 1e-1, 1e0, -1e0, 1e1, 1e1, 1e-1, -fmax(f32), -1e0, + -fmin(f32), 1e-1, -inf(f32), -inf(f32), 1e-1, 1e-1, 0.0, -1e0, nan(f32), -0.0, -0.0, -fmin(f32), -inf(f32), inf(f32), tmin(f32), -nan(f32), + 1e-1, 0.0, 1e0, tmin(f32), 1e1, fmin(f32), -fmin(f32), fmax(f32), nan(f32), 1e0, -nan(f32), -nan(f32), 1e0, nan(f32), 1e0, fmax(f32), + -0.0, 0.0, inf(f32), nan(f32), tmin(f32), 0.0, fmin(f32), -0.0, -fmin(f32), tmin(f32), -1e0, -1e1, 1e-1, -tmin(f32), -inf(f32), -1e0, }, .{ - nan(f32), -nan(f32), -tmin(f32), inf(f32), -inf(f32), 0.1, 0.1, 0.1, -1.0, -inf(f32), -0.0, fmax(f32), tmin(f32), -nan(f32), -fmax(f32), -1.0, - -fmin(f32), -0.0, fmax(f32), -fmax(f32), 1.0, -0.0, 0.0, 10.0, -1.0, -fmin(f32), 0.0, fmax(f32), 0.1, 1.0, 10.0, 0.1, - 0.1, fmin(f32), -nan(f32), -inf(f32), -0.0, -inf(f32), 0.1, -fmax(f32), -10.0, -10.0, nan(f32), 10.0, -1.0, -fmin(f32), 10.0, fmin(f32), - 1.0, -fmax(f32), nan(f32), inf(f32), fmax(f32), fmax(f32), -fmin(f32), -inf(f32), -tmin(f32), -nan(f32), nan(f32), nan(f32), 0.1, 0.1, -1.0, inf(f32), + nan(f32), -nan(f32), -tmin(f32), inf(f32), -inf(f32), 1e-1, 1e-1, 1e-1, -1e0, -inf(f32), -0.0, fmax(f32), tmin(f32), -nan(f32), -fmax(f32), -1e0, + -fmin(f32), -0.0, fmax(f32), -fmax(f32), 1e0, -0.0, 0.0, 1e1, -1e0, -fmin(f32), 0.0, fmax(f32), 1e-1, 1e0, 1e1, 1e-1, + 1e-1, fmin(f32), -nan(f32), -inf(f32), -0.0, -inf(f32), 1e-1, -fmax(f32), -1e1, -1e1, nan(f32), 1e1, -1e0, -fmin(f32), 1e1, fmin(f32), + 1e0, -fmax(f32), nan(f32), inf(f32), fmax(f32), fmax(f32), -fmin(f32), -inf(f32), -tmin(f32), -nan(f32), nan(f32), nan(f32), 1e-1, 1e-1, -1e0, inf(f32), }); try testArgs(@Vector(128, f32), .{ - -10.0, -nan(f32), inf(f32), inf(f32), -tmin(f32), -0.0, 0.0, 0.1, -0.0, fmin(f32), nan(f32), -1.0, nan(f32), -fmax(f32), nan(f32), 0.0, - 1.0, -tmin(f32), 0.0, -nan(f32), 0.1, 0.1, -1.0, 10.0, -fmax(f32), -fmin(f32), 0.1, nan(f32), 0.1, -fmax(f32), -tmin(f32), -inf(f32), - inf(f32), tmin(f32), -tmin(f32), nan(f32), -inf(f32), -10.0, 1.0, -nan(f32), 0.1, nan(f32), -1.0, tmin(f32), -fmin(f32), -0.0, -0.0, 1.0, - fmin(f32), -fmin(f32), 0.1, 0.1, 0.1, -10.0, -10.0, -tmin(f32), 1.0, -0.0, 10.0, -fmax(f32), 10.0, -fmax(f32), inf(f32), -1.0, - -fmax(f32), fmin(f32), fmin(f32), fmin(f32), -1.0, -nan(f32), fmax(f32), -nan(f32), 0.1, -1.0, -fmax(f32), -tmin(f32), -0.0, fmax(f32), -10.0, inf(f32), - 10.0, -inf(f32), 0.1, fmin(f32), nan(f32), -fmax(f32), -tmin(f32), inf(f32), tmin(f32), -fmin(f32), fmax(f32), 1.0, fmin(f32), -0.0, 0.1, fmin(f32), - 0.1, inf(f32), -10.0, inf(f32), 10.0, tmin(f32), 0.0, 1.0, inf(f32), -10.0, -fmin(f32), tmin(f32), 1.0, 0.1, 0.1, -fmin(f32), - 10.0, 0.1, fmax(f32), fmin(f32), 1.0, -10.0, -inf(f32), -10.0, 0.0, -fmax(f32), -inf(f32), -1.0, fmax(f32), -tmin(f32), inf(f32), nan(f32), + -1e1, -nan(f32), inf(f32), inf(f32), -tmin(f32), -0.0, 0.0, 1e-1, -0.0, fmin(f32), nan(f32), -1e0, nan(f32), -fmax(f32), nan(f32), 0.0, + 1e0, -tmin(f32), 0.0, -nan(f32), 1e-1, 1e-1, -1e0, 1e1, -fmax(f32), -fmin(f32), 1e-1, nan(f32), 1e-1, -fmax(f32), -tmin(f32), -inf(f32), + inf(f32), tmin(f32), -tmin(f32), nan(f32), -inf(f32), -1e1, 1e0, -nan(f32), 1e-1, nan(f32), -1e0, tmin(f32), -fmin(f32), -0.0, -0.0, 1e0, + fmin(f32), -fmin(f32), 1e-1, 1e-1, 1e-1, -1e1, -1e1, -tmin(f32), 1e0, -0.0, 1e1, -fmax(f32), 1e1, -fmax(f32), inf(f32), -1e0, + -fmax(f32), fmin(f32), fmin(f32), fmin(f32), -1e0, -nan(f32), fmax(f32), -nan(f32), 1e-1, -1e0, -fmax(f32), -tmin(f32), -0.0, fmax(f32), -1e1, inf(f32), + 1e1, -inf(f32), 1e-1, fmin(f32), nan(f32), -fmax(f32), -tmin(f32), inf(f32), tmin(f32), -fmin(f32), fmax(f32), 1e0, fmin(f32), -0.0, 1e-1, fmin(f32), + 1e-1, inf(f32), -1e1, inf(f32), 1e1, tmin(f32), 0.0, 1e0, inf(f32), -1e1, -fmin(f32), tmin(f32), 1e0, 1e-1, 1e-1, -fmin(f32), + 1e1, 1e-1, fmax(f32), fmin(f32), 1e0, -1e1, -inf(f32), -1e1, 0.0, -fmax(f32), -inf(f32), -1e0, fmax(f32), -tmin(f32), inf(f32), nan(f32), }, .{ - -tmin(f32), -fmax(f32), -fmax(f32), 10.0, inf(f32), 0.1, 1.0, fmin(f32), 0.1, 10.0, fmin(f32), -fmax(f32), 1.0, fmax(f32), 0.1, -fmin(f32), - 0.0, -0.0, -0.0, -1.0, -nan(f32), nan(f32), -tmin(f32), 10.0, -tmin(f32), -10.0, inf(f32), 0.0, tmin(f32), 0.0, -fmax(f32), inf(f32), - fmin(f32), 0.1, -10.0, tmin(f32), tmin(f32), 0.1, fmin(f32), -tmin(f32), fmin(f32), nan(f32), 0.1, -fmax(f32), -1.0, -0.0, fmin(f32), -0.0, - -1.0, -0.0, -inf(f32), fmax(f32), -10.0, 1.0, inf(f32), -1.0, -tmin(f32), -tmin(f32), 0.1, -10.0, -fmin(f32), 10.0, -10.0, -inf(f32), - -1.0, inf(f32), 0.1, 1.0, -nan(f32), 0.1, -10.0, -nan(f32), -tmin(f32), 0.0, fmin(f32), -nan(f32), fmax(f32), -tmin(f32), 0.0, 0.0, - -fmax(f32), -inf(f32), -1.0, -0.0, 10.0, nan(f32), 0.1, tmin(f32), -10.0, 10.0, tmin(f32), -fmax(f32), 0.1, -10.0, -tmin(f32), fmax(f32), - -fmax(f32), 0.1, -nan(f32), -fmin(f32), inf(f32), inf(f32), tmin(f32), tmin(f32), -tmin(f32), tmin(f32), 0.0, -0.0, 1.0, 10.0, -10.0, inf(f32), - 0.0, -fmin(f32), fmax(f32), -10.0, fmax(f32), -0.0, 0.0, -fmin(f32), 10.0, -fmin(f32), -fmin(f32), -fmin(f32), 10.0, fmin(f32), -inf(f32), fmax(f32), + -tmin(f32), -fmax(f32), -fmax(f32), 1e1, inf(f32), 1e-1, 1e0, fmin(f32), 1e-1, 1e1, fmin(f32), -fmax(f32), 1e0, fmax(f32), 1e-1, -fmin(f32), + 0.0, -0.0, -0.0, -1e0, -nan(f32), nan(f32), -tmin(f32), 1e1, -tmin(f32), -1e1, inf(f32), 0.0, tmin(f32), 0.0, -fmax(f32), inf(f32), + fmin(f32), 1e-1, -1e1, tmin(f32), tmin(f32), 1e-1, fmin(f32), -tmin(f32), fmin(f32), nan(f32), 1e-1, -fmax(f32), -1e0, -0.0, fmin(f32), -0.0, + -1e0, -0.0, -inf(f32), fmax(f32), -1e1, 1e0, inf(f32), -1e0, -tmin(f32), -tmin(f32), 1e-1, -1e1, -fmin(f32), 1e1, -1e1, -inf(f32), + -1e0, inf(f32), 1e-1, 1e0, -nan(f32), 1e-1, -1e1, -nan(f32), -tmin(f32), 0.0, fmin(f32), -nan(f32), fmax(f32), -tmin(f32), 0.0, 0.0, + -fmax(f32), -inf(f32), -1e0, -0.0, 1e1, nan(f32), 1e-1, tmin(f32), -1e1, 1e1, tmin(f32), -fmax(f32), 1e-1, -1e1, -tmin(f32), fmax(f32), + -fmax(f32), 1e-1, -nan(f32), -fmin(f32), inf(f32), inf(f32), tmin(f32), tmin(f32), -tmin(f32), tmin(f32), 0.0, -0.0, 1e0, 1e1, -1e1, inf(f32), + 0.0, -fmin(f32), fmax(f32), -1e1, fmax(f32), -0.0, 0.0, -fmin(f32), 1e1, -fmin(f32), -fmin(f32), -fmin(f32), 1e1, fmin(f32), -inf(f32), fmax(f32), }); try testArgs(@Vector(69, f32), .{ - nan(f32), 0.1, -tmin(f32), fmax(f32), nan(f32), -fmax(f32), 0.1, fmax(f32), 10.0, inf(f32), -fmin(f32), -fmax(f32), inf(f32), -nan(f32), 0.1, 1.0, - fmax(f32), 0.1, 10.0, 0.0, -10.0, fmax(f32), 10.0, 0.0, 1.0, 10.0, -fmax(f32), 0.0, -tmin(f32), -fmin(f32), 0.1, 1.0, - fmin(f32), tmin(f32), -fmin(f32), -tmin(f32), tmin(f32), -inf(f32), -fmax(f32), -0.0, -1.0, -0.0, -fmax(f32), fmax(f32), fmin(f32), -0.0, 0.0, -inf(f32), - -tmin(f32), inf(f32), -nan(f32), tmin(f32), -1.0, -tmin(f32), 10.0, -inf(f32), -fmin(f32), 0.1, -inf(f32), -1.0, nan(f32), -inf(f32), -tmin(f32), 10.0, - 10.0, -nan(f32), -nan(f32), tmin(f32), -nan(f32), + nan(f32), 1e-1, -tmin(f32), fmax(f32), nan(f32), -fmax(f32), 1e-1, fmax(f32), 1e1, inf(f32), -fmin(f32), -fmax(f32), inf(f32), -nan(f32), 1e-1, 1e0, + fmax(f32), 1e-1, 1e1, 0.0, -1e1, fmax(f32), 1e1, 0.0, 1e0, 1e1, -fmax(f32), 0.0, -tmin(f32), -fmin(f32), 1e-1, 1e0, + fmin(f32), tmin(f32), -fmin(f32), -tmin(f32), tmin(f32), -inf(f32), -fmax(f32), -0.0, -1e0, -0.0, -fmax(f32), fmax(f32), fmin(f32), -0.0, 0.0, -inf(f32), + -tmin(f32), inf(f32), -nan(f32), tmin(f32), -1e0, -tmin(f32), 1e1, -inf(f32), -fmin(f32), 1e-1, -inf(f32), -1e0, nan(f32), -inf(f32), -tmin(f32), 1e1, + 1e1, -nan(f32), -nan(f32), tmin(f32), -nan(f32), }, .{ - -nan(f32), 1.0, fmax(f32), 0.1, -0.0, 1.0, -inf(f32), -fmin(f32), -nan(f32), inf(f32), 1.0, -nan(f32), -nan(f32), -inf(f32), tmin(f32), -fmin(f32), - -nan(f32), 0.1, fmin(f32), -1.0, -fmax(f32), 0.1, -1.0, 0.1, 0.1, -tmin(f32), 0.1, 0.1, 10.0, fmin(f32), 0.0, nan(f32), - tmin(f32), 1.0, nan(f32), -fmin(f32), tmin(f32), nan(f32), 0.1, nan(f32), 1.0, -fmax(f32), tmin(f32), 1.0, 0.0, -1.0, nan(f32), fmin(f32), - -inf(f32), fmax(f32), -0.0, nan(f32), tmin(f32), tmin(f32), -inf(f32), -10.0, -nan(f32), -fmax(f32), -0.0, 0.1, -inf(f32), 1.0, nan(f32), 1.0, - -10.0, fmin(f32), inf(f32), fmin(f32), 0.0, + -nan(f32), 1e0, fmax(f32), 1e-1, -0.0, 1e0, -inf(f32), -fmin(f32), -nan(f32), inf(f32), 1e0, -nan(f32), -nan(f32), -inf(f32), tmin(f32), -fmin(f32), + -nan(f32), 1e-1, fmin(f32), -1e0, -fmax(f32), 1e-1, -1e0, 1e-1, 1e-1, -tmin(f32), 1e-1, 1e-1, 1e1, fmin(f32), 0.0, nan(f32), + tmin(f32), 1e0, nan(f32), -fmin(f32), tmin(f32), nan(f32), 1e-1, nan(f32), 1e0, -fmax(f32), tmin(f32), 1e0, 0.0, -1e0, nan(f32), fmin(f32), + -inf(f32), fmax(f32), -0.0, nan(f32), tmin(f32), tmin(f32), -inf(f32), -1e1, -nan(f32), -fmax(f32), -0.0, 1e-1, -inf(f32), 1e0, nan(f32), 1e0, + -1e1, fmin(f32), inf(f32), fmin(f32), 0.0, }); try testArgs(@Vector(1, f64), .{ -0.0, }, .{ - 1.0, + 1e0, }); try testArgs(@Vector(2, f64), .{ - -1.0, 0.0, + -1e0, 0.0, }, .{ -inf(f64), -fmax(f64), }); try testArgs(@Vector(4, f64), .{ - -inf(f64), inf(f64), 10.0, 0.0, + -inf(f64), inf(f64), 1e1, 0.0, }, .{ - -tmin(f64), 1.0, nan(f64), 0.0, + -tmin(f64), 1e0, nan(f64), 0.0, }); try testArgs(@Vector(8, f64), .{ - 0.1, -tmin(f64), -fmax(f64), 1.0, inf(f64), -10.0, -tmin(f64), -10.0, + 1e-1, -tmin(f64), -fmax(f64), 1e0, inf(f64), -1e1, -tmin(f64), -1e1, }, .{ - tmin(f64), fmin(f64), 0.1, 10.0, -0.0, -0.0, fmax(f64), -1.0, + tmin(f64), fmin(f64), 1e-1, 1e1, -0.0, -0.0, fmax(f64), -1e0, }); try testArgs(@Vector(16, f64), .{ - 0.1, -nan(f64), 1.0, tmin(f64), fmax(f64), -fmax(f64), -tmin(f64), -0.0, -fmin(f64), -1.0, -fmax(f64), -nan(f64), -fmax(f64), nan(f64), -0.0, 0.1, + 1e-1, -nan(f64), 1e0, tmin(f64), fmax(f64), -fmax(f64), -tmin(f64), -0.0, -fmin(f64), -1e0, -fmax(f64), -nan(f64), -fmax(f64), nan(f64), -0.0, 1e-1, }, .{ - -1.0, -tmin(f64), -fmin(f64), 0.1, 0.1, -0.0, -nan(f64), -inf(f64), -inf(f64), -0.0, nan(f64), tmin(f64), 1.0, 0.1, tmin(f64), fmin(f64), + -1e0, -tmin(f64), -fmin(f64), 1e-1, 1e-1, -0.0, -nan(f64), -inf(f64), -inf(f64), -0.0, nan(f64), tmin(f64), 1e0, 1e-1, tmin(f64), fmin(f64), }); try testArgs(@Vector(32, f64), .{ - -fmax(f64), fmin(f64), 0.1, 0.1, 0.0, 1.0, -0.0, -tmin(f64), tmin(f64), inf(f64), -tmin(f64), -tmin(f64), -tmin(f64), -fmax(f64), fmin(f64), 1.0, - -fmin(f64), -nan(f64), 1.0, -inf(f64), -nan(f64), -1.0, 0.0, 0.0, nan(f64), -nan(f64), -fmin(f64), fmin(f64), 0.1, nan(f64), tmin(f64), -fmax(f64), + -fmax(f64), fmin(f64), 1e-1, 1e-1, 0.0, 1e0, -0.0, -tmin(f64), tmin(f64), inf(f64), -tmin(f64), -tmin(f64), -tmin(f64), -fmax(f64), fmin(f64), 1e0, + -fmin(f64), -nan(f64), 1e0, -inf(f64), -nan(f64), -1e0, 0.0, 0.0, nan(f64), -nan(f64), -fmin(f64), fmin(f64), 1e-1, nan(f64), tmin(f64), -fmax(f64), }, .{ - -tmin(f64), -fmax(f64), -inf(f64), -nan(f64), fmin(f64), -inf(f64), 0.1, -fmax(f64), -inf(f64), fmin(f64), inf(f64), -1.0, -tmin(f64), inf(f64), 0.1, nan(f64), - fmin(f64), 10.0, -tmin(f64), -nan(f64), -inf(f64), 1.0, nan(f64), -fmin(f64), -1.0, nan(f64), -1.0, 0.0, 1.0, nan(f64), -1.0, -fmin(f64), + -tmin(f64), -fmax(f64), -inf(f64), -nan(f64), fmin(f64), -inf(f64), 1e-1, -fmax(f64), -inf(f64), fmin(f64), inf(f64), -1e0, -tmin(f64), inf(f64), 1e-1, nan(f64), + fmin(f64), 1e1, -tmin(f64), -nan(f64), -inf(f64), 1e0, nan(f64), -fmin(f64), -1e0, nan(f64), -1e0, 0.0, 1e0, nan(f64), -1e0, -fmin(f64), }); try testArgs(@Vector(64, f64), .{ - -10.0, fmax(f64), -nan(f64), tmin(f64), 0.1, -1.0, 1.0, -0.0, -fmin(f64), 0.1, -fmin(f64), -0.0, -0.0, tmin(f64), -10.0, 0.1, - -10.0, -fmax(f64), -10.0, -fmin(f64), 0.0, -10.0, nan(f64), 1.0, inf(f64), inf(f64), -inf(f64), tmin(f64), tmin(f64), 0.1, -0.0, 0.1, - -0.0, 0.1, -10.0, 10.0, fmax(f64), -fmin(f64), 1.0, fmax(f64), 1.0, -10.0, fmin(f64), fmax(f64), -1.0, -0.0, -0.0, fmax(f64), - -inf(f64), -inf(f64), -tmin(f64), -fmax(f64), -nan(f64), tmin(f64), -1.0, 0.0, -inf(f64), fmax(f64), nan(f64), -inf(f64), fmin(f64), -nan(f64), -nan(f64), -10.0, + -1e1, fmax(f64), -nan(f64), tmin(f64), 1e-1, -1e0, 1e0, -0.0, -fmin(f64), 1e-1, -fmin(f64), -0.0, -0.0, tmin(f64), -1e1, 1e-1, + -1e1, -fmax(f64), -1e1, -fmin(f64), 0.0, -1e1, nan(f64), 1e0, inf(f64), inf(f64), -inf(f64), tmin(f64), tmin(f64), 1e-1, -0.0, 1e-1, + -0.0, 1e-1, -1e1, 1e1, fmax(f64), -fmin(f64), 1e0, fmax(f64), 1e0, -1e1, fmin(f64), fmax(f64), -1e0, -0.0, -0.0, fmax(f64), + -inf(f64), -inf(f64), -tmin(f64), -fmax(f64), -nan(f64), tmin(f64), -1e0, 0.0, -inf(f64), fmax(f64), nan(f64), -inf(f64), fmin(f64), -nan(f64), -nan(f64), -1e1, }, .{ - nan(f64), -1.0, 0.0, -10.0, -fmax(f64), -fmin(f64), -nan(f64), -tmin(f64), 0.1, -1.0, -nan(f64), -fmax(f64), 0.0, 0.0, 10.0, inf(f64), - fmin(f64), 0.0, -10.0, 1.0, -tmin(f64), -inf(f64), -fmax(f64), 0.0, -fmin(f64), -1.0, -fmin(f64), tmin(f64), 1.0, -10.0, fmin(f64), 0.1, - inf(f64), -0.0, tmin(f64), -fmax(f64), -tmin(f64), -fmax(f64), fmin(f64), -fmax(f64), 0.1, 1.0, 1.0, 0.0, fmin(f64), nan(f64), -10.0, tmin(f64), - inf(f64), 0.1, 1.0, -nan(f64), 1.0, -fmin(f64), fmax(f64), inf(f64), fmin(f64), -inf(f64), -0.0, 0.0, -1.0, -0.0, 0.1, 0.1, + nan(f64), -1e0, 0.0, -1e1, -fmax(f64), -fmin(f64), -nan(f64), -tmin(f64), 1e-1, -1e0, -nan(f64), -fmax(f64), 0.0, 0.0, 1e1, inf(f64), + fmin(f64), 0.0, -1e1, 1e0, -tmin(f64), -inf(f64), -fmax(f64), 0.0, -fmin(f64), -1e0, -fmin(f64), tmin(f64), 1e0, -1e1, fmin(f64), 1e-1, + inf(f64), -0.0, tmin(f64), -fmax(f64), -tmin(f64), -fmax(f64), fmin(f64), -fmax(f64), 1e-1, 1e0, 1e0, 0.0, fmin(f64), nan(f64), -1e1, tmin(f64), + inf(f64), 1e-1, 1e0, -nan(f64), 1e0, -fmin(f64), fmax(f64), inf(f64), fmin(f64), -inf(f64), -0.0, 0.0, -1e0, -0.0, 1e-1, 1e-1, }); try testArgs(@Vector(128, f64), .{ - nan(f64), -fmin(f64), fmax(f64), fmin(f64), -10.0, nan(f64), tmin(f64), fmax(f64), inf(f64), -nan(f64), tmin(f64), -nan(f64), -0.0, fmin(f64), fmax(f64), - -inf(f64), inf(f64), -1.0, 0.0, 0.1, fmin(f64), 0.0, 0.1, -1.0, -inf(f64), 0.1, fmax(f64), fmin(f64), fmax(f64), -fmax(f64), - fmin(f64), inf(f64), -fmin(f64), -10.0, -0.0, 0.1, nan(f64), -fmax(f64), -fmax(f64), -1.0, 10.0, 10.0, -1.0, -inf(f64), inf(f64), - -fmin(f64), 1.0, -inf(f64), -10.0, 0.1, 1.0, 10.0, 10.0, tmin(f64), nan(f64), inf(f64), 0.0, -1.0, -10.0, 1.0, - -tmin(f64), -fmax(f64), -nan(f64), 10.0, 0.1, tmin(f64), 0.0, 10.0, 0.1, -tmin(f64), -tmin(f64), 1.0, -fmax(f64), nan(f64), -fmin(f64), - nan(f64), 10.0, -1.0, -0.0, -tmin(f64), nan(f64), 10.0, 10.0, -inf(f64), 0.1, -nan(f64), -10.0, -tmin(f64), -fmax(f64), -fmax(f64), - inf(f64), -inf(f64), tmin(f64), 1.0, -inf(f64), -10.0, inf(f64), 0.1, -nan(f64), -inf(f64), fmax(f64), 0.1, -inf(f64), 0.1, 1.0, - 0.1, 0.1, 0.1, inf(f64), -inf(f64), 1.0, 10.0, 10.0, nan(f64), 10.0, -tmin(f64), 1.0, -fmin(f64), -1.0, -fmax(f64), - -fmin(f64), -fmin(f64), -1.0, inf(f64), nan(f64), tmin(f64), 0.1, -1.0, + nan(f64), -fmin(f64), fmax(f64), fmin(f64), -1e1, nan(f64), tmin(f64), fmax(f64), inf(f64), -nan(f64), tmin(f64), -nan(f64), -0.0, fmin(f64), fmax(f64), + -inf(f64), inf(f64), -1e0, 0.0, 1e-1, fmin(f64), 0.0, 1e-1, -1e0, -inf(f64), 1e-1, fmax(f64), fmin(f64), fmax(f64), -fmax(f64), + fmin(f64), inf(f64), -fmin(f64), -1e1, -0.0, 1e-1, nan(f64), -fmax(f64), -fmax(f64), -1e0, 1e1, 1e1, -1e0, -inf(f64), inf(f64), + -fmin(f64), 1e0, -inf(f64), -1e1, 1e-1, 1e0, 1e1, 1e1, tmin(f64), nan(f64), inf(f64), 0.0, -1e0, -1e1, 1e0, + -tmin(f64), -fmax(f64), -nan(f64), 1e1, 1e-1, tmin(f64), 0.0, 1e1, 1e-1, -tmin(f64), -tmin(f64), 1e0, -fmax(f64), nan(f64), -fmin(f64), + nan(f64), 1e1, -1e0, -0.0, -tmin(f64), nan(f64), 1e1, 1e1, -inf(f64), 1e-1, -nan(f64), -1e1, -tmin(f64), -fmax(f64), -fmax(f64), + inf(f64), -inf(f64), tmin(f64), 1e0, -inf(f64), -1e1, inf(f64), 1e-1, -nan(f64), -inf(f64), fmax(f64), 1e-1, -inf(f64), 1e-1, 1e0, + 1e-1, 1e-1, 1e-1, inf(f64), -inf(f64), 1e0, 1e1, 1e1, nan(f64), 1e1, -tmin(f64), 1e0, -fmin(f64), -1e0, -fmax(f64), + -fmin(f64), -fmin(f64), -1e0, inf(f64), nan(f64), tmin(f64), 1e-1, -1e0, }, .{ - 0.0, 0.0, inf(f64), -0.0, 0.1, -nan(f64), 10.0, -nan(f64), tmin(f64), -10.0, -0.0, inf(f64), -fmin(f64), 0.1, fmax(f64), - nan(f64), -tmin(f64), tmin(f64), 1.0, 0.1, -10.0, -nan(f64), 1.0, inf(f64), -10.0, fmin(f64), 0.1, 10.0, -10.0, 10.0, - -nan(f64), -nan(f64), 0.1, 0.0, 10.0, -fmax(f64), -tmin(f64), tmin(f64), -1.0, -tmin(f64), -10.0, 0.1, -fmax(f64), 10.0, nan(f64), - fmax(f64), -1.0, -1.0, -tmin(f64), fmax(f64), -10.0, 0.1, 1.0, fmin(f64), inf(f64), 0.1, tmin(f64), 0.1, -fmax(f64), fmax(f64), - -10.0, -fmax(f64), fmax(f64), tmin(f64), -fmin(f64), inf(f64), 0.1, -0.0, fmax(f64), tmin(f64), 0.1, 1.0, -inf(f64), 1.0, 10.0, - 0.1, 0.0, -10.0, -nan(f64), 10.0, -fmin(f64), -tmin(f64), 10.0, 1.0, -tmin(f64), -1.0, -fmin(f64), -0.0, -10.0, 0.1, - inf(f64), -fmax(f64), 0.1, tmin(f64), -0.0, fmax(f64), 0.0, -nan(f64), -fmin(f64), fmax(f64), -0.0, nan(f64), -inf(f64), tmin(f64), 0.1, - inf(f64), 0.0, 10.0, -fmax(f64), tmin(f64), -0.0, fmin(f64), -nan(f64), -10.0, -inf(f64), nan(f64), inf(f64), -0.0, 10.0, fmax(f64), - tmin(f64), -10.0, -nan(f64), 10.0, -inf(f64), -fmax(f64), -inf(f64), -1.0, + 0.0, 0.0, inf(f64), -0.0, 1e-1, -nan(f64), 1e1, -nan(f64), tmin(f64), -1e1, -0.0, inf(f64), -fmin(f64), 1e-1, fmax(f64), + nan(f64), -tmin(f64), tmin(f64), 1e0, 1e-1, -1e1, -nan(f64), 1e0, inf(f64), -1e1, fmin(f64), 1e-1, 1e1, -1e1, 1e1, + -nan(f64), -nan(f64), 1e-1, 0.0, 1e1, -fmax(f64), -tmin(f64), tmin(f64), -1e0, -tmin(f64), -1e1, 1e-1, -fmax(f64), 1e1, nan(f64), + fmax(f64), -1e0, -1e0, -tmin(f64), fmax(f64), -1e1, 1e-1, 1e0, fmin(f64), inf(f64), 1e-1, tmin(f64), 1e-1, -fmax(f64), fmax(f64), + -1e1, -fmax(f64), fmax(f64), tmin(f64), -fmin(f64), inf(f64), 1e-1, -0.0, fmax(f64), tmin(f64), 1e-1, 1e0, -inf(f64), 1e0, 1e1, + 1e-1, 0.0, -1e1, -nan(f64), 1e1, -fmin(f64), -tmin(f64), 1e1, 1e0, -tmin(f64), -1e0, -fmin(f64), -0.0, -1e1, 1e-1, + inf(f64), -fmax(f64), 1e-1, tmin(f64), -0.0, fmax(f64), 0.0, -nan(f64), -fmin(f64), fmax(f64), -0.0, nan(f64), -inf(f64), tmin(f64), 1e-1, + inf(f64), 0.0, 1e1, -fmax(f64), tmin(f64), -0.0, fmin(f64), -nan(f64), -1e1, -inf(f64), nan(f64), inf(f64), -0.0, 1e1, fmax(f64), + tmin(f64), -1e1, -nan(f64), 1e1, -inf(f64), -fmax(f64), -inf(f64), -1e0, }); try testArgs(@Vector(69, f64), .{ - inf(f64), -0.0, -fmax(f64), fmax(f64), fmax(f64), 0.0, fmin(f64), -nan(f64), 0.1, 0.1, 0.1, -fmin(f64), inf(f64), 0.1, fmax(f64), nan(f64), - tmin(f64), -10.0, 10.0, -tmin(f64), -0.0, nan(f64), -10.0, fmin(f64), 0.0, -0.0, 0.1, inf(f64), -tmin(f64), -nan(f64), inf(f64), -nan(f64), - -inf(f64), fmax(f64), 0.1, -fmin(f64), 0.1, -1.0, fmin(f64), fmin(f64), fmin(f64), 10.0, -fmin(f64), nan(f64), 0.0, 0.0, 10.0, nan(f64), - -tmin(f64), tmin(f64), tmin(f64), fmin(f64), -0.0, -1.0, 0.1, 1.0, fmax(f64), tmin(f64), fmin(f64), 0.0, -fmin(f64), fmin(f64), -tmin(f64), 0.0, - -nan(f64), 10.0, -1.0, 0.1, 0.0, + inf(f64), -0.0, -fmax(f64), fmax(f64), fmax(f64), 0.0, fmin(f64), -nan(f64), 1e-1, 1e-1, 1e-1, -fmin(f64), inf(f64), 1e-1, fmax(f64), nan(f64), + tmin(f64), -1e1, 1e1, -tmin(f64), -0.0, nan(f64), -1e1, fmin(f64), 0.0, -0.0, 1e-1, inf(f64), -tmin(f64), -nan(f64), inf(f64), -nan(f64), + -inf(f64), fmax(f64), 1e-1, -fmin(f64), 1e-1, -1e0, fmin(f64), fmin(f64), fmin(f64), 1e1, -fmin(f64), nan(f64), 0.0, 0.0, 1e1, nan(f64), + -tmin(f64), tmin(f64), tmin(f64), fmin(f64), -0.0, -1e0, 1e-1, 1e0, fmax(f64), tmin(f64), fmin(f64), 0.0, -fmin(f64), fmin(f64), -tmin(f64), 0.0, + -nan(f64), 1e1, -1e0, 1e-1, 0.0, }, .{ - -10.0, -0.0, fmin(f64), -fmin(f64), nan(f64), 10.0, -tmin(f64), -fmax(f64), 10.0, 0.1, -fmin(f64), inf(f64), -inf(f64), -tmin(f64), 1.0, tmin(f64), - -tmin(f64), -nan(f64), fmax(f64), 0.0, -1.0, 10.0, inf(f64), fmin(f64), fmax(f64), 0.1, 0.1, fmax(f64), -inf(f64), 0.1, 0.1, fmin(f64), - 0.1, fmin(f64), -10.0, nan(f64), 0.0, 0.0, fmax(f64), -inf(f64), tmin(f64), inf(f64), -tmin(f64), fmax(f64), -inf(f64), -10.0, -1.0, fmin(f64), - 0.1, -nan(f64), fmax(f64), -fmin(f64), fmax(f64), nan(f64), -0.0, -fmax(f64), 10.0, nan(f64), inf(f64), -1.0, -fmin(f64), nan(f64), -fmin(f64), -0.0, - -nan(f64), -fmin(f64), 0.1, nan(f64), 0.1, + -1e1, -0.0, fmin(f64), -fmin(f64), nan(f64), 1e1, -tmin(f64), -fmax(f64), 1e1, 1e-1, -fmin(f64), inf(f64), -inf(f64), -tmin(f64), 1e0, tmin(f64), + -tmin(f64), -nan(f64), fmax(f64), 0.0, -1e0, 1e1, inf(f64), fmin(f64), fmax(f64), 1e-1, 1e-1, fmax(f64), -inf(f64), 1e-1, 1e-1, fmin(f64), + 1e-1, fmin(f64), -1e1, nan(f64), 0.0, 0.0, fmax(f64), -inf(f64), tmin(f64), inf(f64), -tmin(f64), fmax(f64), -inf(f64), -1e1, -1e0, fmin(f64), + 1e-1, -nan(f64), fmax(f64), -fmin(f64), fmax(f64), nan(f64), -0.0, -fmax(f64), 1e1, nan(f64), inf(f64), -1e0, -fmin(f64), nan(f64), -fmin(f64), -0.0, + -nan(f64), -fmin(f64), 1e-1, nan(f64), 1e-1, }); try testArgs(@Vector(1, f80), .{ -nan(f80), }, .{ - -1.0, + -1e0, }); try testArgs(@Vector(2, f80), .{ -fmax(f80), -inf(f80), }, .{ - 0.1, 10.0, + 1e-1, 1e1, }); try testArgs(@Vector(4, f80), .{ - -0.0, -inf(f80), 0.1, 10.0, + -0.0, -inf(f80), 1e-1, 1e1, }, .{ - -1.0, 0.0, 0.1, -10.0, + -1e0, 0.0, 1e-1, -1e1, }); try testArgs(@Vector(8, f80), .{ - 1.0, -0.0, -inf(f80), 0.1, -inf(f80), fmin(f80), 0.0, 10.0, + 1e0, -0.0, -inf(f80), 1e-1, -inf(f80), fmin(f80), 0.0, 1e1, }, .{ - -0.0, -fmin(f80), fmin(f80), -nan(f80), nan(f80), inf(f80), fmin(f80), 10.0, + -0.0, -fmin(f80), fmin(f80), -nan(f80), nan(f80), inf(f80), fmin(f80), 1e1, }); try testArgs(@Vector(16, f80), .{ - 10.0, inf(f80), -fmin(f80), 0.1, -tmin(f80), -0.0, -inf(f80), -1.0, -fmax(f80), -nan(f80), -tmin(f80), 10.0, 10.0, -inf(f80), -fmax(f80), fmax(f80), + 1e1, inf(f80), -fmin(f80), 1e-1, -tmin(f80), -0.0, -inf(f80), -1e0, -fmax(f80), -nan(f80), -tmin(f80), 1e1, 1e1, -inf(f80), -fmax(f80), fmax(f80), }, .{ - -inf(f80), nan(f80), -fmax(f80), fmin(f80), 1.0, 0.1, -inf(f80), nan(f80), 0.1, nan(f80), -inf(f80), nan(f80), tmin(f80), 0.1, -tmin(f80), -10.0, + -inf(f80), nan(f80), -fmax(f80), fmin(f80), 1e0, 1e-1, -inf(f80), nan(f80), 1e-1, nan(f80), -inf(f80), nan(f80), tmin(f80), 1e-1, -tmin(f80), -1e1, }); try testArgs(@Vector(32, f80), .{ - inf(f80), -0.0, 0.1, -0.0, 0.1, -fmin(f80), -0.0, fmax(f80), nan(f80), -tmin(f80), nan(f80), -10.0, 0.0, 1.0, 10.0, -fmin(f80), - fmin(f80), 0.1, inf(f80), -0.0, nan(f80), tmin(f80), -tmin(f80), fmin(f80), tmin(f80), -0.0, nan(f80), -fmax(f80), tmin(f80), -fmin(f80), 1.0, tmin(f80), + inf(f80), -0.0, 1e-1, -0.0, 1e-1, -fmin(f80), -0.0, fmax(f80), nan(f80), -tmin(f80), nan(f80), -1e1, 0.0, 1e0, 1e1, -fmin(f80), + fmin(f80), 1e-1, inf(f80), -0.0, nan(f80), tmin(f80), -tmin(f80), fmin(f80), tmin(f80), -0.0, nan(f80), -fmax(f80), tmin(f80), -fmin(f80), 1e0, tmin(f80), }, .{ - 0.0, -10.0, fmax(f80), -inf(f80), 0.1, -inf(f80), inf(f80), 10.0, -1.0, -10.0, -fmin(f80), 0.0, inf(f80), 1.0, -nan(f80), 0.0, - 0.1, nan(f80), 1.0, -fmax(f80), fmin(f80), -inf(f80), -fmax(f80), 0.1, -10.0, tmin(f80), fmax(f80), -0.0, -fmin(f80), -fmin(f80), fmin(f80), -tmin(f80), + 0.0, -1e1, fmax(f80), -inf(f80), 1e-1, -inf(f80), inf(f80), 1e1, -1e0, -1e1, -fmin(f80), 0.0, inf(f80), 1e0, -nan(f80), 0.0, + 1e-1, nan(f80), 1e0, -fmax(f80), fmin(f80), -inf(f80), -fmax(f80), 1e-1, -1e1, tmin(f80), fmax(f80), -0.0, -fmin(f80), -fmin(f80), fmin(f80), -tmin(f80), }); try testArgs(@Vector(64, f80), .{ - -fmax(f80), 0.1, -1.0, 1.0, inf(f80), 0.1, -10.0, 0.1, fmin(f80), -fmin(f80), -10.0, -fmax(f80), 0.0, -10.0, -1.0, -nan(f80), - 0.0, 0.1, -1.0, -tmin(f80), 1.0, tmin(f80), fmax(f80), 0.0, -10.0, -tmin(f80), fmax(f80), -0.0, 0.1, -inf(f80), -fmax(f80), -1.0, - -nan(f80), tmin(f80), -tmin(f80), -0.0, -0.0, -1.0, -0.0, fmax(f80), inf(f80), -nan(f80), 0.1, -inf(f80), -tmin(f80), nan(f80), 0.1, 10.0, - nan(f80), -inf(f80), 0.1, tmin(f80), -fmin(f80), 10.0, -10.0, tmin(f80), fmin(f80), nan(f80), 0.1, -nan(f80), tmin(f80), nan(f80), fmax(f80), -fmax(f80), + -fmax(f80), 1e-1, -1e0, 1e0, inf(f80), 1e-1, -1e1, 1e-1, fmin(f80), -fmin(f80), -1e1, -fmax(f80), 0.0, -1e1, -1e0, -nan(f80), + 0.0, 1e-1, -1e0, -tmin(f80), 1e0, tmin(f80), fmax(f80), 0.0, -1e1, -tmin(f80), fmax(f80), -0.0, 1e-1, -inf(f80), -fmax(f80), -1e0, + -nan(f80), tmin(f80), -tmin(f80), -0.0, -0.0, -1e0, -0.0, fmax(f80), inf(f80), -nan(f80), 1e-1, -inf(f80), -tmin(f80), nan(f80), 1e-1, 1e1, + nan(f80), -inf(f80), 1e-1, tmin(f80), -fmin(f80), 1e1, -1e1, tmin(f80), fmin(f80), nan(f80), 1e-1, -nan(f80), tmin(f80), nan(f80), fmax(f80), -fmax(f80), }, .{ - -nan(f80), -fmax(f80), tmin(f80), -inf(f80), -tmin(f80), fmin(f80), -nan(f80), -fmin(f80), fmax(f80), inf(f80), -0.0, -1.0, 0.1, -fmax(f80), 1.0, -inf(f80), - 0.0, -nan(f80), -10.0, -1.0, -nan(f80), inf(f80), 1.0, -nan(f80), 10.0, inf(f80), tmin(f80), 0.1, tmin(f80), -tmin(f80), -inf(f80), -fmin(f80), - fmax(f80), fmax(f80), 0.1, -tmin(f80), -nan(f80), -1.0, fmin(f80), -nan(f80), -nan(f80), inf(f80), -1.0, 0.1, -fmin(f80), -tmin(f80), 0.0, -0.0, - 0.1, -fmin(f80), -inf(f80), -1.0, -tmin(f80), 1.0, -inf(f80), -0.0, 0.0, 1.0, tmin(f80), 0.0, 0.1, -nan(f80), fmax(f80), 1.0, + -nan(f80), -fmax(f80), tmin(f80), -inf(f80), -tmin(f80), fmin(f80), -nan(f80), -fmin(f80), fmax(f80), inf(f80), -0.0, -1e0, 1e-1, -fmax(f80), 1e0, -inf(f80), + 0.0, -nan(f80), -1e1, -1e0, -nan(f80), inf(f80), 1e0, -nan(f80), 1e1, inf(f80), tmin(f80), 1e-1, tmin(f80), -tmin(f80), -inf(f80), -fmin(f80), + fmax(f80), fmax(f80), 1e-1, -tmin(f80), -nan(f80), -1e0, fmin(f80), -nan(f80), -nan(f80), inf(f80), -1e0, 1e-1, -fmin(f80), -tmin(f80), 0.0, -0.0, + 1e-1, -fmin(f80), -inf(f80), -1e0, -tmin(f80), 1e0, -inf(f80), -0.0, 0.0, 1e0, tmin(f80), 0.0, 1e-1, -nan(f80), fmax(f80), 1e0, }); try testArgs(@Vector(128, f80), .{ - 0.1, -0.0, 0.1, 0.0, fmin(f80), -1.0, 1.0, -inf(f80), fmax(f80), -fmin(f80), nan(f80), 10.0, 0.1, 0.1, -fmin(f80), -inf(f80), - -1.0, -inf(f80), 1.0, -fmin(f80), inf(f80), -nan(f80), 10.0, inf(f80), tmin(f80), nan(f80), -10.0, inf(f80), 10.0, inf(f80), -10.0, 0.0, - -10.0, fmin(f80), -tmin(f80), 1.0, -fmax(f80), nan(f80), 0.0, fmax(f80), 0.1, -1.0, -fmin(f80), inf(f80), -tmin(f80), nan(f80), -tmin(f80), 10.0, - -10.0, -tmin(f80), -1.0, -tmin(f80), -fmax(f80), 10.0, -1.0, -inf(f80), -nan(f80), 0.0, 1.0, fmax(f80), -tmin(f80), -fmin(f80), fmin(f80), fmin(f80), - -10.0, -fmax(f80), -tmin(f80), inf(f80), 1.0, 0.0, tmin(f80), -nan(f80), -fmin(f80), 0.1, -nan(f80), 0.0, 0.1, -10.0, -0.0, -nan(f80), - 1.0, 10.0, -10.0, fmin(f80), -nan(f80), fmax(f80), -0.0, 1.0, inf(f80), 1.0, -fmin(f80), -fmin(f80), 0.0, 0.1, inf(f80), 10.0, - tmin(f80), -1.0, fmax(f80), -0.0, fmax(f80), fmax(f80), 0.1, -fmin(f80), -10.0, 1.0, -fmin(f80), -fmax(f80), fmin(f80), -fmax(f80), -0.0, -1.0, - -nan(f80), -inf(f80), nan(f80), -fmax(f80), inf(f80), -inf(f80), -nan(f80), fmin(f80), nan(f80), -1.0, tmin(f80), tmin(f80), 0.1, 10.0, -tmin(f80), -nan(f80), + 1e-1, -0.0, 1e-1, 0.0, fmin(f80), -1e0, 1e0, -inf(f80), fmax(f80), -fmin(f80), nan(f80), 1e1, 1e-1, 1e-1, -fmin(f80), -inf(f80), + -1e0, -inf(f80), 1e0, -fmin(f80), inf(f80), -nan(f80), 1e1, inf(f80), tmin(f80), nan(f80), -1e1, inf(f80), 1e1, inf(f80), -1e1, 0.0, + -1e1, fmin(f80), -tmin(f80), 1e0, -fmax(f80), nan(f80), 0.0, fmax(f80), 1e-1, -1e0, -fmin(f80), inf(f80), -tmin(f80), nan(f80), -tmin(f80), 1e1, + -1e1, -tmin(f80), -1e0, -tmin(f80), -fmax(f80), 1e1, -1e0, -inf(f80), -nan(f80), 0.0, 1e0, fmax(f80), -tmin(f80), -fmin(f80), fmin(f80), fmin(f80), + -1e1, -fmax(f80), -tmin(f80), inf(f80), 1e0, 0.0, tmin(f80), -nan(f80), -fmin(f80), 1e-1, -nan(f80), 0.0, 1e-1, -1e1, -0.0, -nan(f80), + 1e0, 1e1, -1e1, fmin(f80), -nan(f80), fmax(f80), -0.0, 1e0, inf(f80), 1e0, -fmin(f80), -fmin(f80), 0.0, 1e-1, inf(f80), 1e1, + tmin(f80), -1e0, fmax(f80), -0.0, fmax(f80), fmax(f80), 1e-1, -fmin(f80), -1e1, 1e0, -fmin(f80), -fmax(f80), fmin(f80), -fmax(f80), -0.0, -1e0, + -nan(f80), -inf(f80), nan(f80), -fmax(f80), inf(f80), -inf(f80), -nan(f80), fmin(f80), nan(f80), -1e0, tmin(f80), tmin(f80), 1e-1, 1e1, -tmin(f80), -nan(f80), }, .{ - -1.0, -0.0, 0.0, fmax(f80), -1.0, -0.0, 0.1, tmin(f80), -inf(f80), 10.0, -0.0, 0.1, -tmin(f80), -fmax(f80), tmin(f80), inf(f80), - 0.1, 1.0, tmin(f80), nan(f80), -fmax(f80), 10.0, fmin(f80), -1.0, -fmax(f80), nan(f80), -fmin(f80), 10.0, -1.0, tmin(f80), inf(f80), -0.0, - tmin(f80), 1.0, 0.0, -fmin(f80), 0.0, 10.0, -fmax(f80), -0.0, -inf(f80), fmin(f80), -0.0, -0.0, -0.0, -fmax(f80), 0.1, fmax(f80), - -tmin(f80), tmin(f80), -fmax(f80), 10.0, -fmax(f80), 0.1, fmax(f80), -10.0, 0.1, 1.0, -1.0, -1.0, nan(f80), -nan(f80), 10.0, -nan(f80), - nan(f80), -10.0, -tmin(f80), fmin(f80), -tmin(f80), -fmin(f80), tmin(f80), -0.0, 0.1, fmax(f80), tmin(f80), tmin(f80), nan(f80), 0.1, 10.0, 0.1, - inf(f80), inf(f80), 1.0, -inf(f80), -fmax(f80), 0.0, 1.0, -fmax(f80), fmax(f80), nan(f80), fmin(f80), 0.1, -1.0, 1.0, 0.1, -tmin(f80), - 10.0, 0.1, -fmax(f80), 0.0, nan(f80), -tmin(f80), 0.1, fmax(f80), fmax(f80), 0.1, -1.0, inf(f80), nan(f80), 10.0, fmax(f80), -nan(f80), - -10.0, -1.0, tmin(f80), fmin(f80), inf(f80), fmax(f80), -fmin(f80), fmin(f80), -inf(f80), -tmin(f80), 1.0, nan(f80), -fmin(f80), -fmin(f80), fmax(f80), 1.0, + -1e0, -0.0, 0.0, fmax(f80), -1e0, -0.0, 1e-1, tmin(f80), -inf(f80), 1e1, -0.0, 1e-1, -tmin(f80), -fmax(f80), tmin(f80), inf(f80), + 1e-1, 1e0, tmin(f80), nan(f80), -fmax(f80), 1e1, fmin(f80), -1e0, -fmax(f80), nan(f80), -fmin(f80), 1e1, -1e0, tmin(f80), inf(f80), -0.0, + tmin(f80), 1e0, 0.0, -fmin(f80), 0.0, 1e1, -fmax(f80), -0.0, -inf(f80), fmin(f80), -0.0, -0.0, -0.0, -fmax(f80), 1e-1, fmax(f80), + -tmin(f80), tmin(f80), -fmax(f80), 1e1, -fmax(f80), 1e-1, fmax(f80), -1e1, 1e-1, 1e0, -1e0, -1e0, nan(f80), -nan(f80), 1e1, -nan(f80), + nan(f80), -1e1, -tmin(f80), fmin(f80), -tmin(f80), -fmin(f80), tmin(f80), -0.0, 1e-1, fmax(f80), tmin(f80), tmin(f80), nan(f80), 1e-1, 1e1, 1e-1, + inf(f80), inf(f80), 1e0, -inf(f80), -fmax(f80), 0.0, 1e0, -fmax(f80), fmax(f80), nan(f80), fmin(f80), 1e-1, -1e0, 1e0, 1e-1, -tmin(f80), + 1e1, 1e-1, -fmax(f80), 0.0, nan(f80), -tmin(f80), 1e-1, fmax(f80), fmax(f80), 1e-1, -1e0, inf(f80), nan(f80), 1e1, fmax(f80), -nan(f80), + -1e1, -1e0, tmin(f80), fmin(f80), inf(f80), fmax(f80), -fmin(f80), fmin(f80), -inf(f80), -tmin(f80), 1e0, nan(f80), -fmin(f80), -fmin(f80), fmax(f80), 1e0, }); try testArgs(@Vector(69, f80), .{ - -10.0, tmin(f80), 0.1, -nan(f80), -inf(f80), -nan(f80), fmin(f80), -0.0, 10.0, fmax(f80), -fmin(f80), 0.1, -nan(f80), inf(f80), 1.0, -1.0, - inf(f80), fmin(f80), -fmax(f80), 0.1, nan(f80), 0.0, 0.0, nan(f80), -10.0, fmax(f80), fmin(f80), -fmax(f80), 1.0, 0.1, 0.0, -fmin(f80), - -tmin(f80), 0.0, -10.0, fmin(f80), 1.0, 10.0, 0.1, nan(f80), -10.0, fmax(f80), 0.1, fmin(f80), -inf(f80), 0.0, tmin(f80), inf(f80), - fmax(f80), 1.0, 0.1, nan(f80), inf(f80), tmin(f80), tmin(f80), -fmax(f80), 0.0, fmin(f80), -inf(f80), 0.1, -tmin(f80), 0.1, -1.0, 0.1, - -fmax(f80), -1.0, 0.1, -1.0, fmax(f80), + -1e1, tmin(f80), 1e-1, -nan(f80), -inf(f80), -nan(f80), fmin(f80), -0.0, 1e1, fmax(f80), -fmin(f80), 1e-1, -nan(f80), inf(f80), 1e0, -1e0, + inf(f80), fmin(f80), -fmax(f80), 1e-1, nan(f80), 0.0, 0.0, nan(f80), -1e1, fmax(f80), fmin(f80), -fmax(f80), 1e0, 1e-1, 0.0, -fmin(f80), + -tmin(f80), 0.0, -1e1, fmin(f80), 1e0, 1e1, 1e-1, nan(f80), -1e1, fmax(f80), 1e-1, fmin(f80), -inf(f80), 0.0, tmin(f80), inf(f80), + fmax(f80), 1e0, 1e-1, nan(f80), inf(f80), tmin(f80), tmin(f80), -fmax(f80), 0.0, fmin(f80), -inf(f80), 1e-1, -tmin(f80), 1e-1, -1e0, 1e-1, + -fmax(f80), -1e0, 1e-1, -1e0, fmax(f80), }, .{ - -1.0, fmin(f80), inf(f80), -nan(f80), -0.0, fmin(f80), -0.0, nan(f80), -fmax(f80), 0.1, 1.0, -10.0, -tmin(f80), -fmin(f80), 10.0, inf(f80), - -10.0, -tmin(f80), -fmin(f80), 10.0, 0.0, -tmin(f80), 10.0, -10.0, 0.1, 0.1, tmin(f80), fmax(f80), 0.0, 0.1, 0.1, -10.0, - fmin(f80), nan(f80), -10.0, -10.0, -10.0, 0.0, -0.0, 0.1, fmin(f80), fmin(f80), -0.0, -fmin(f80), -nan(f80), -inf(f80), 0.0, -inf(f80), - inf(f80), fmax(f80), -tmin(f80), inf(f80), 0.1, -nan(f80), 0.1, tmin(f80), -10.0, -fmax(f80), -fmax(f80), inf(f80), -nan(f80), 1.0, -inf(f80), 10.0, - nan(f80), 10.0, -10.0, 0.0, -fmin(f80), + -1e0, fmin(f80), inf(f80), -nan(f80), -0.0, fmin(f80), -0.0, nan(f80), -fmax(f80), 1e-1, 1e0, -1e1, -tmin(f80), -fmin(f80), 1e1, inf(f80), + -1e1, -tmin(f80), -fmin(f80), 1e1, 0.0, -tmin(f80), 1e1, -1e1, 1e-1, 1e-1, tmin(f80), fmax(f80), 0.0, 1e-1, 1e-1, -1e1, + fmin(f80), nan(f80), -1e1, -1e1, -1e1, 0.0, -0.0, 1e-1, fmin(f80), fmin(f80), -0.0, -fmin(f80), -nan(f80), -inf(f80), 0.0, -inf(f80), + inf(f80), fmax(f80), -tmin(f80), inf(f80), 1e-1, -nan(f80), 1e-1, tmin(f80), -1e1, -fmax(f80), -fmax(f80), inf(f80), -nan(f80), 1e0, -inf(f80), 1e1, + nan(f80), 1e1, -1e1, 0.0, -fmin(f80), }); try testArgs(@Vector(1, f128), .{ @@ -4359,76 +9851,76 @@ fn binary(comptime op: anytype, comptime opts: struct { strict: bool = false }) try testArgs(@Vector(2, f128), .{ 0.0, -inf(f128), }, .{ - 0.1, -fmin(f128), + 1e-1, -fmin(f128), }); try testArgs(@Vector(4, f128), .{ - 0.1, fmax(f128), 10.0, -fmax(f128), + 1e-1, fmax(f128), 1e1, -fmax(f128), }, .{ -tmin(f128), fmax(f128), -0.0, -0.0, }); try testArgs(@Vector(8, f128), .{ - 10.0, -fmin(f128), 0.0, -inf(f128), 10.0, -0.0, -1.0, -fmin(f128), + 1e1, -fmin(f128), 0.0, -inf(f128), 1e1, -0.0, -1e0, -fmin(f128), }, .{ - fmin(f128), tmin(f128), -1.0, -10.0, 0.0, -tmin(f128), 0.0, 0.1, + fmin(f128), tmin(f128), -1e0, -1e1, 0.0, -tmin(f128), 0.0, 1e-1, }); try testArgs(@Vector(16, f128), .{ - -fmin(f128), -10.0, -fmin(f128), 0.1, -10.0, 1.0, -fmax(f128), tmin(f128), -nan(f128), -tmin(f128), 10.0, -inf(f128), -1.0, tmin(f128), -0.0, nan(f128), + -fmin(f128), -1e1, -fmin(f128), 1e-1, -1e1, 1e0, -fmax(f128), tmin(f128), -nan(f128), -tmin(f128), 1e1, -inf(f128), -1e0, tmin(f128), -0.0, nan(f128), }, .{ - -fmax(f128), fmin(f128), inf(f128), tmin(f128), -10.0, 10.0, fmax(f128), 1.0, -inf(f128), -inf(f128), -fmax(f128), -nan(f128), 1.0, -inf(f128), tmin(f128), tmin(f128), + -fmax(f128), fmin(f128), inf(f128), tmin(f128), -1e1, 1e1, fmax(f128), 1e0, -inf(f128), -inf(f128), -fmax(f128), -nan(f128), 1e0, -inf(f128), tmin(f128), tmin(f128), }); try testArgs(@Vector(32, f128), .{ - -0.0, -1.0, 1.0, -fmax(f128), -fmax(f128), 0.1, -fmin(f128), -fmin(f128), -1.0, -tmin(f128), -0.0, -fmax(f128), tmin(f128), inf(f128), 0.0, fmax(f128), - -nan(f128), -0.0, -inf(f128), -1.0, 0.1, -fmin(f128), tmin(f128), -10.0, fmax(f128), -nan(f128), -nan(f128), -fmax(f128), 0.1, inf(f128), -0.0, tmin(f128), + -0.0, -1e0, 1e0, -fmax(f128), -fmax(f128), 1e-1, -fmin(f128), -fmin(f128), -1e0, -tmin(f128), -0.0, -fmax(f128), tmin(f128), inf(f128), 0.0, fmax(f128), + -nan(f128), -0.0, -inf(f128), -1e0, 1e-1, -fmin(f128), tmin(f128), -1e1, fmax(f128), -nan(f128), -nan(f128), -fmax(f128), 1e-1, inf(f128), -0.0, tmin(f128), }, .{ - -1.0, -10.0, -fmin(f128), -fmin(f128), inf(f128), tmin(f128), nan(f128), 0.0, -fmin(f128), 0.1, -nan(f128), 0.1, -0.0, tmin(f128), 1.0, 0.0, - fmin(f128), fmax(f128), -fmax(f128), -tmin(f128), fmin(f128), -0.0, -1.0, -nan(f128), -inf(f128), 1.0, nan(f128), 1.0, 0.1, -0.0, -fmax(f128), -10.0, + -1e0, -1e1, -fmin(f128), -fmin(f128), inf(f128), tmin(f128), nan(f128), 0.0, -fmin(f128), 1e-1, -nan(f128), 1e-1, -0.0, tmin(f128), 1e0, 0.0, + fmin(f128), fmax(f128), -fmax(f128), -tmin(f128), fmin(f128), -0.0, -1e0, -nan(f128), -inf(f128), 1e0, nan(f128), 1e0, 1e-1, -0.0, -fmax(f128), -1e1, }); try testArgs(@Vector(64, f128), .{ - -1.0, -0.0, nan(f128), 0.1, -10.0, 0.0, 1.0, 1.0, -inf(f128), fmin(f128), fmax(f128), nan(f128), -nan(f128), inf(f128), -0.0, - 0.1, -inf(f128), -fmax(f128), 10.0, -tmin(f128), -tmin(f128), -fmax(f128), 1.0, 0.1, 0.1, nan(f128), 10.0, 1.0, -tmin(f128), 10.0, - -nan(f128), fmax(f128), fmax(f128), 0.0, fmax(f128), inf(f128), 1.0, -0.0, 0.1, -tmin(f128), fmin(f128), fmax(f128), tmin(f128), inf(f128), -10.0, - -1.0, -1.0, -1.0, -inf(f128), 10.0, -tmin(f128), nan(f128), nan(f128), 0.1, fmin(f128), 0.1, tmin(f128), -10.0, 0.1, 10.0, - fmax(f128), fmax(f128), 0.1, -fmax(f128), + -1e0, -0.0, nan(f128), 1e-1, -1e1, 0.0, 1e0, 1e0, -inf(f128), fmin(f128), fmax(f128), nan(f128), -nan(f128), inf(f128), -0.0, + 1e-1, -inf(f128), -fmax(f128), 1e1, -tmin(f128), -tmin(f128), -fmax(f128), 1e0, 1e-1, 1e-1, nan(f128), 1e1, 1e0, -tmin(f128), 1e1, + -nan(f128), fmax(f128), fmax(f128), 0.0, fmax(f128), inf(f128), 1e0, -0.0, 1e-1, -tmin(f128), fmin(f128), fmax(f128), tmin(f128), inf(f128), -1e1, + -1e0, -1e0, -1e0, -inf(f128), 1e1, -tmin(f128), nan(f128), nan(f128), 1e-1, fmin(f128), 1e-1, tmin(f128), -1e1, 1e-1, 1e1, + fmax(f128), fmax(f128), 1e-1, -fmax(f128), }, .{ - -0.0, 0.1, -0.0, -fmin(f128), 10.0, 0.0, 1.0, -inf(f128), tmin(f128), -1.0, fmin(f128), -nan(f128), -10.0, 0.1, -10.0, 0.1, - 0.1, tmin(f128), nan(f128), -1.0, 0.0, -10.0, -10.0, fmax(f128), -fmax(f128), inf(f128), -nan(f128), 0.1, -nan(f128), 1.0, fmax(f128), inf(f128), - nan(f128), fmin(f128), 10.0, inf(f128), 0.0, -inf(f128), 0.1, 0.1, 0.1, -1.0, 0.1, -10.0, inf(f128), -nan(f128), 0.1, inf(f128), - inf(f128), inf(f128), -10.0, -tmin(f128), 0.1, -inf(f128), -fmin(f128), 1.0, -tmin(f128), 1.0, -tmin(f128), -inf(f128), -0.0, -nan(f128), -1.0, -fmax(f128), + -0.0, 1e-1, -0.0, -fmin(f128), 1e1, 0.0, 1e0, -inf(f128), tmin(f128), -1e0, fmin(f128), -nan(f128), -1e1, 1e-1, -1e1, 1e-1, + 1e-1, tmin(f128), nan(f128), -1e0, 0.0, -1e1, -1e1, fmax(f128), -fmax(f128), inf(f128), -nan(f128), 1e-1, -nan(f128), 1e0, fmax(f128), inf(f128), + nan(f128), fmin(f128), 1e1, inf(f128), 0.0, -inf(f128), 1e-1, 1e-1, 1e-1, -1e0, 1e-1, -1e1, inf(f128), -nan(f128), 1e-1, inf(f128), + inf(f128), inf(f128), -1e1, -tmin(f128), 1e-1, -inf(f128), -fmin(f128), 1e0, -tmin(f128), 1e0, -tmin(f128), -inf(f128), -0.0, -nan(f128), -1e0, -fmax(f128), }); try testArgs(@Vector(128, f128), .{ - -inf(f128), tmin(f128), -fmax(f128), 1.0, fmin(f128), -fmax(f128), -1.0, 0.1, -fmax(f128), -fmin(f128), -10.0, nan(f128), 0.1, nan(f128), - inf(f128), -1.0, tmin(f128), -inf(f128), 0.0, fmax(f128), tmin(f128), -fmin(f128), fmin(f128), -10.0, -fmin(f128), -10.0, 1.0, -nan(f128), - -inf(f128), fmin(f128), inf(f128), -tmin(f128), 0.1, 0.0, 10.0, 1.0, -tmin(f128), -tmin(f128), tmin(f128), 1.0, fmin(f128), 0.1, - 0.1, 0.1, fmax(f128), 0.1, inf(f128), 0.0, fmin(f128), -fmin(f128), 10.0, 10.0, -10.0, tmin(f128), inf(f128), inf(f128), - -fmin(f128), 0.0, 0.1, -nan(f128), 0.1, -inf(f128), -nan(f128), -1.0, fmin(f128), -0.0, 10.0, -tmin(f128), 10.0, 1.0, - 0.1, -0.0, -tmin(f128), 0.1, -1.0, -tmin(f128), -fmin(f128), tmin(f128), 0.1, -tmin(f128), -nan(f128), -10.0, -inf(f128), 0.0, - 0.1, 0.0, -fmin(f128), 0.0, 10.0, 10.0, tmin(f128), inf(f128), -nan(f128), -inf(f128), -1.0, -fmin(f128), -10.0, -fmin(f128), - -inf(f128), -fmax(f128), tmin(f128), tmin(f128), -fmin(f128), 0.1, fmin(f128), fmin(f128), -fmin(f128), nan(f128), -1.0, -0.0, -0.0, 0.1, - fmax(f128), 0.0, -fmax(f128), nan(f128), nan(f128), nan(f128), nan(f128), -nan(f128), fmin(f128), -inf(f128), inf(f128), -fmax(f128), -10.0, fmin(f128), - 0.1, fmax(f128), + -inf(f128), tmin(f128), -fmax(f128), 1e0, fmin(f128), -fmax(f128), -1e0, 1e-1, -fmax(f128), -fmin(f128), -1e1, nan(f128), 1e-1, nan(f128), + inf(f128), -1e0, tmin(f128), -inf(f128), 0.0, fmax(f128), tmin(f128), -fmin(f128), fmin(f128), -1e1, -fmin(f128), -1e1, 1e0, -nan(f128), + -inf(f128), fmin(f128), inf(f128), -tmin(f128), 1e-1, 0.0, 1e1, 1e0, -tmin(f128), -tmin(f128), tmin(f128), 1e0, fmin(f128), 1e-1, + 1e-1, 1e-1, fmax(f128), 1e-1, inf(f128), 0.0, fmin(f128), -fmin(f128), 1e1, 1e1, -1e1, tmin(f128), inf(f128), inf(f128), + -fmin(f128), 0.0, 1e-1, -nan(f128), 1e-1, -inf(f128), -nan(f128), -1e0, fmin(f128), -0.0, 1e1, -tmin(f128), 1e1, 1e0, + 1e-1, -0.0, -tmin(f128), 1e-1, -1e0, -tmin(f128), -fmin(f128), tmin(f128), 1e-1, -tmin(f128), -nan(f128), -1e1, -inf(f128), 0.0, + 1e-1, 0.0, -fmin(f128), 0.0, 1e1, 1e1, tmin(f128), inf(f128), -nan(f128), -inf(f128), -1e0, -fmin(f128), -1e1, -fmin(f128), + -inf(f128), -fmax(f128), tmin(f128), tmin(f128), -fmin(f128), 1e-1, fmin(f128), fmin(f128), -fmin(f128), nan(f128), -1e0, -0.0, -0.0, 1e-1, + fmax(f128), 0.0, -fmax(f128), nan(f128), nan(f128), nan(f128), nan(f128), -nan(f128), fmin(f128), -inf(f128), inf(f128), -fmax(f128), -1e1, fmin(f128), + 1e-1, fmax(f128), }, .{ - 0.0, 10.0, 0.1, inf(f128), -0.0, -1.0, nan(f128), -10.0, -inf(f128), 0.1, -tmin(f128), 1.0, inf(f128), 0.1, -1.0, - 10.0, 0.0, 1.0, nan(f128), tmin(f128), fmax(f128), 10.0, 0.1, 0.1, -fmin(f128), -inf(f128), -nan(f128), -fmin(f128), -0.0, -inf(f128), - -nan(f128), fmax(f128), -fmin(f128), -tmin(f128), -fmin(f128), -fmax(f128), nan(f128), fmin(f128), -fmax(f128), fmax(f128), 1.0, 10.0, -fmax(f128), nan(f128), -fmax(f128), - -inf(f128), nan(f128), -nan(f128), tmin(f128), -1.0, 0.1, 0.1, -1.0, -nan(f128), fmax(f128), 10.0, -inf(f128), 10.0, -0.0, -1.0, - -0.0, -tmin(f128), 10.0, -1.0, -fmax(f128), fmin(f128), fmax(f128), tmin(f128), 10.0, fmin(f128), -nan(f128), 1.0, -tmin(f128), -1.0, fmax(f128), - 1.0, -tmin(f128), 0.1, -nan(f128), inf(f128), 0.1, 0.1, fmax(f128), -fmin(f128), fmin(f128), -0.0, fmax(f128), -fmax(f128), -tmin(f128), tmin(f128), - nan(f128), 0.1, tmin(f128), -1.0, fmin(f128), -nan(f128), fmax(f128), 1.0, nan(f128), -nan(f128), inf(f128), -fmin(f128), fmin(f128), 0.1, 10.0, - -tmin(f128), -10.0, 0.0, 0.1, -fmin(f128), -0.0, 0.0, -10.0, fmax(f128), nan(f128), nan(f128), -fmin(f128), -fmax(f128), 10.0, 0.0, - fmin(f128), 10.0, -tmin(f128), -tmin(f128), 0.0, -10.0, 1.0, -fmin(f128), + 0.0, 1e1, 1e-1, inf(f128), -0.0, -1e0, nan(f128), -1e1, -inf(f128), 1e-1, -tmin(f128), 1e0, inf(f128), 1e-1, -1e0, + 1e1, 0.0, 1e0, nan(f128), tmin(f128), fmax(f128), 1e1, 1e-1, 1e-1, -fmin(f128), -inf(f128), -nan(f128), -fmin(f128), -0.0, -inf(f128), + -nan(f128), fmax(f128), -fmin(f128), -tmin(f128), -fmin(f128), -fmax(f128), nan(f128), fmin(f128), -fmax(f128), fmax(f128), 1e0, 1e1, -fmax(f128), nan(f128), -fmax(f128), + -inf(f128), nan(f128), -nan(f128), tmin(f128), -1e0, 1e-1, 1e-1, -1e0, -nan(f128), fmax(f128), 1e1, -inf(f128), 1e1, -0.0, -1e0, + -0.0, -tmin(f128), 1e1, -1e0, -fmax(f128), fmin(f128), fmax(f128), tmin(f128), 1e1, fmin(f128), -nan(f128), 1e0, -tmin(f128), -1e0, fmax(f128), + 1e0, -tmin(f128), 1e-1, -nan(f128), inf(f128), 1e-1, 1e-1, fmax(f128), -fmin(f128), fmin(f128), -0.0, fmax(f128), -fmax(f128), -tmin(f128), tmin(f128), + nan(f128), 1e-1, tmin(f128), -1e0, fmin(f128), -nan(f128), fmax(f128), 1e0, nan(f128), -nan(f128), inf(f128), -fmin(f128), fmin(f128), 1e-1, 1e1, + -tmin(f128), -1e1, 0.0, 1e-1, -fmin(f128), -0.0, 0.0, -1e1, fmax(f128), nan(f128), nan(f128), -fmin(f128), -fmax(f128), 1e1, 0.0, + fmin(f128), 1e1, -tmin(f128), -tmin(f128), 0.0, -1e1, 1e0, -fmin(f128), }); try testArgs(@Vector(69, f128), .{ - -1.0, nan(f128), 0.1, 0.1, 0.1, -1.0, -10.0, inf(f128), -0.0, inf(f128), tmin(f128), 0.0, -fmax(f128), -tmin(f128), -10.0, -fmax(f128), - -0.0, 0.0, nan(f128), inf(f128), 1.0, -1.0, 0.1, -0.0, 1.0, fmax(f128), -fmax(f128), 0.0, inf(f128), -inf(f128), -tmin(f128), -inf(f128), - 10.0, fmin(f128), 10.0, -10.0, 0.1, 1.0, -0.0, nan(f128), tmin(f128), inf(f128), inf(f128), -nan(f128), -nan(f128), 1.0, -tmin(f128), 0.0, - fmin(f128), fmax(f128), fmin(f128), -10.0, nan(f128), 0.0, -nan(f128), -0.0, -nan(f128), 0.1, -10.0, -tmin(f128), fmax(f128), 1.0, fmin(f128), fmax(f128), - nan(f128), -inf(f128), 1.0, fmin(f128), -nan(f128), + -1e0, nan(f128), 1e-1, 1e-1, 1e-1, -1e0, -1e1, inf(f128), -0.0, inf(f128), tmin(f128), 0.0, -fmax(f128), -tmin(f128), -1e1, -fmax(f128), + -0.0, 0.0, nan(f128), inf(f128), 1e0, -1e0, 1e-1, -0.0, 1e0, fmax(f128), -fmax(f128), 0.0, inf(f128), -inf(f128), -tmin(f128), -inf(f128), + 1e1, fmin(f128), 1e1, -1e1, 1e-1, 1e0, -0.0, nan(f128), tmin(f128), inf(f128), inf(f128), -nan(f128), -nan(f128), 1e0, -tmin(f128), 0.0, + fmin(f128), fmax(f128), fmin(f128), -1e1, nan(f128), 0.0, -nan(f128), -0.0, -nan(f128), 1e-1, -1e1, -tmin(f128), fmax(f128), 1e0, fmin(f128), fmax(f128), + nan(f128), -inf(f128), 1e0, fmin(f128), -nan(f128), }, .{ - -inf(f128), fmax(f128), 0.0, nan(f128), -10.0, tmin(f128), nan(f128), 1.0, 10.0, -fmin(f128), fmin(f128), tmin(f128), 0.0, -fmin(f128), -0.0, fmin(f128), - inf(f128), inf(f128), fmin(f128), fmin(f128), -tmin(f128), -fmax(f128), 10.0, nan(f128), -0.0, 1.0, 10.0, -10.0, -inf(f128), fmin(f128), -fmax(f128), 0.1, - -1.0, -nan(f128), -10.0, tmin(f128), inf(f128), nan(f128), 0.0, -10.0, tmin(f128), 0.0, -fmax(f128), -tmin(f128), 0.1, 0.1, 10.0, 0.1, - fmax(f128), 0.1, 0.0, -fmin(f128), -inf(f128), -inf(f128), -nan(f128), 0.1, -fmax(f128), fmax(f128), -fmax(f128), -0.0, -tmin(f128), -1.0, nan(f128), 0.1, - -1.0, -inf(f128), tmin(f128), inf(f128), inf(f128), + -inf(f128), fmax(f128), 0.0, nan(f128), -1e1, tmin(f128), nan(f128), 1e0, 1e1, -fmin(f128), fmin(f128), tmin(f128), 0.0, -fmin(f128), -0.0, fmin(f128), + inf(f128), inf(f128), fmin(f128), fmin(f128), -tmin(f128), -fmax(f128), 1e1, nan(f128), -0.0, 1e0, 1e1, -1e1, -inf(f128), fmin(f128), -fmax(f128), 1e-1, + -1e0, -nan(f128), -1e1, tmin(f128), inf(f128), nan(f128), 0.0, -1e1, tmin(f128), 0.0, -fmax(f128), -tmin(f128), 1e-1, 1e-1, 1e1, 1e-1, + fmax(f128), 1e-1, 0.0, -fmin(f128), -inf(f128), -inf(f128), -nan(f128), 1e-1, -fmax(f128), fmax(f128), -fmax(f128), -0.0, -tmin(f128), -1e0, nan(f128), 1e-1, + -1e0, -inf(f128), tmin(f128), inf(f128), inf(f128), }); } }; @@ -4463,6 +9955,65 @@ test clz { try test_clz.testIntVectors(); } +inline fn intCast(comptime Result: type, comptime Type: type, rhs: Type, comptime ct_rhs: Type) Result { + @setRuntimeSafety(false); // TODO + const res_info = switch (@typeInfo(Result)) { + .int => |info| info, + .vector => |info| @typeInfo(info.child).int, + else => @compileError(@typeName(Result)), + }; + const rhs_info = @typeInfo(Scalar(Type)).int; + const min_bits = @min(res_info.bits, rhs_info.bits); + return @intCast(switch (@as(union(enum) { + shift: std.math.Log2Int(Scalar(Type)), + mask: std.math.Log2IntCeil(Scalar(Type)), + }, switch (res_info.signedness) { + .signed => switch (rhs_info.signedness) { + .signed => .{ .shift = rhs_info.bits - min_bits }, + .unsigned => .{ .mask = min_bits - @intFromBool(res_info.bits <= rhs_info.bits) }, + }, + .unsigned => switch (rhs_info.signedness) { + .signed => .{ .mask = min_bits - @intFromBool(res_info.bits >= rhs_info.bits) }, + .unsigned => .{ .mask = min_bits }, + }, + })) { + // TODO: if (bits == 0) rhs else rhs >> bits, + .shift => |bits| if (bits == 0) rhs else switch (@typeInfo(Type)) { + .int => if (ct_rhs < 0) + rhs | std.math.minInt(Type) >> bits + else + rhs & std.math.maxInt(Type) >> bits, + .vector => rhs | @select( + Scalar(Type), + ct_rhs < splat(Type, 0), + splat(Type, std.math.minInt(Scalar(Type)) >> bits), + splat(Type, 0), + ) & ~@select( + Scalar(Type), + ct_rhs >= splat(Type, 0), + splat(Type, std.math.minInt(Scalar(Type)) >> bits), + splat(Type, 0), + ), + else => comptime unreachable, + }, + .mask => |bits| if (bits == rhs_info.bits) rhs else rhs & splat(Type, (1 << bits) - 1), + }); +} +test intCast { + const test_int_cast = cast(intCast, .{}); + try test_int_cast.testInts(); + try test_int_cast.testIntVectors(); +} + +inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type, comptime _: Type) Result { + return @floatCast(rhs); +} +test floatCast { + const test_float_cast = cast(floatCast, .{ .strict = true }); + try test_float_cast.testFloats(); + try test_float_cast.testFloatVectors(); +} + inline fn equal(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs == rhs) { return lhs == rhs; } diff --git a/test/cases/compile_errors/anytype_param_requires_comptime.zig b/test/cases/compile_errors/anytype_param_requires_comptime.zig index 35d68d19b8..0a9467d709 100644 --- a/test/cases/compile_errors/anytype_param_requires_comptime.zig +++ b/test/cases/compile_errors/anytype_param_requires_comptime.zig @@ -15,6 +15,6 @@ pub export fn entry() void { // error // // :7:25: error: unable to resolve comptime value -// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_463.C' must be comptime-known +// :7:25: note: initializer of comptime-only struct 'tmp.S.foo__anon_464.C' must be comptime-known // :4:16: note: struct requires comptime because of this field // :4:16: note: types are not available at runtime diff --git a/test/cases/compile_errors/bogus_method_call_on_slice.zig b/test/cases/compile_errors/bogus_method_call_on_slice.zig index 1a8c8830df..b51a144431 100644 --- a/test/cases/compile_errors/bogus_method_call_on_slice.zig +++ b/test/cases/compile_errors/bogus_method_call_on_slice.zig @@ -16,5 +16,5 @@ pub export fn entry2() void { // // :3:6: error: no field or member function named 'copy' in '[]const u8' // :9:8: error: no field or member function named 'bar' in '@TypeOf(.{})' -// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_467' +// :12:18: error: no field or member function named 'bar' in 'tmp.entry2__struct_468' // :12:6: note: struct declared here diff --git a/test/cases/compile_errors/coerce_anon_struct.zig b/test/cases/compile_errors/coerce_anon_struct.zig index 21f199f622..193772c50b 100644 --- a/test/cases/compile_errors/coerce_anon_struct.zig +++ b/test/cases/compile_errors/coerce_anon_struct.zig @@ -6,6 +6,6 @@ export fn foo() void { // error // -// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_456' +// :4:16: error: expected type 'tmp.T', found 'tmp.foo__struct_457' // :3:16: note: struct declared here // :1:11: note: struct declared here