From 8195b64f575acaed9dbc59e745a98acebb71dc60 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Wed, 29 Jan 2025 12:29:40 -0500 Subject: [PATCH 1/5] x86_64: rewrite scalar float conversions --- src/arch/x86_64/CodeGen.zig | 1023 +++- test/behavior/x86_64/math.zig | 8671 ++++++++++++++++++++++++++++----- 2 files changed, 8488 insertions(+), 1206 deletions(-) diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index fc3dbcb23d..b0f2776a82 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)), }); } @@ -2499,8 +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), @@ -14558,8 +14556,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 } }, }, @@ -14598,8 +14596,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .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 } }, }, @@ -14637,8 +14635,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .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 } }, }, @@ -14676,8 +14674,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 = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .byte }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14716,8 +14714,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .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 } }, }, @@ -14755,8 +14753,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .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 } }, }, @@ -14794,8 +14792,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .required_features = .{ .@"64bit", .false_deps_lzcnt_tzcnt, .lzcnt, null }, + .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, .dst_constraints = .{.{ .scalar_int_is = .word }}, - .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .qword } }, .any }, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14834,8 +14832,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .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 } }, }, @@ -14873,8 +14871,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .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 } }, }, @@ -14912,8 +14910,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 = .word }}, .src_constraints = .{ .{ .scalar_remainder_int = .{ .of = .xword, .is = .xword } }, .any }, + .dst_constraints = .{.{ .scalar_int_is = .word }}, .patterns = &.{ .{ .src = .{ .to_mem, .none } }, }, @@ -14952,8 +14950,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .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 } }, }, @@ -14991,8 +14989,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { } }, }, .{ .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 } }, }, @@ -16356,8 +16354,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 +16386,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 +16418,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 +16451,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 +16483,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 +16522,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 +16555,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 +16588,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 +16622,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 +16655,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 +16696,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 +16730,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 +16763,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 +16797,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 +16831,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 } }, }, @@ -17326,11 +17324,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 = .word, .is = .word } }, .{ .multiple_scalar_float = .{ .of = .word, .is = .word } }, }, + .dst_constraints = .{.{ .bool_vec = .dword }}, .patterns = &.{ .{ .src = .{ .to_mem, .to_mem } }, }, @@ -17371,11 +17369,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 +17414,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 +17460,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 +17506,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 +17554,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 } }, }, @@ -18675,11 +18673,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 } }, }, @@ -18720,11 +18718,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 } }, }, @@ -18765,11 +18763,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 } }, }, @@ -18810,11 +18808,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 } }, }, @@ -18855,11 +18853,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 } }, }, @@ -18900,11 +18898,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 } }, }, @@ -21901,6 +21899,939 @@ 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 = .{ .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 = .{ .{ .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 = .{ .mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, ._ss, .cvtsd2, .dst0x, .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 = .{ .sse, .none } }, + }, + .dst_temps = .{.{ .rc = .sse }}, + .each = .{ .once = &.{ + .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ }, + .{ ._, ._ss, .cvtsd2, .dst0x, .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 = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, ._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, .src0q, ._, ._ }, + } }, + }, .{ + .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, .src0q, ._, ._ }, + } }, + }, .{ + .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, .dst0y, .src0x, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", .avx, 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 = .{ .@"64bit", .sse2, 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 = .{ .@"64bit", .sse, 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 = .{ .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 = .{ .{ .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 = .{ .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 = .{ .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 = .{ .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 = .{ .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, ._, ._, ._ }, + } }, + } }) 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 = .{ .{ .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 = .{ .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, .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 = .{ .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 = .{ .{ .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 = .{ .mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, ._sd, .cvtss2, .dst0x, .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 = .{ .sse, .none } }, + }, + .dst_temps = .{.{ .rc = .sse }}, + .each = .{ .once = &.{ + .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ }, + .{ ._, ._sd, .cvtss2, .dst0x, .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 = .{ .to_mut_sse, .none } }, + }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{ + .{ ._, ._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 = .{ .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 = .{ .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 = .{ .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 = .{ .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 = .{ .@"64bit", .avx, 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 = .{ .@"64bit", .sse2, 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 = .{ .@"64bit", .sse, 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, ._, ._, ._ }, + } }, + } }) 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); + }, .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}); @@ -42770,8 +43701,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 +44099,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 +44216,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) @@ -43945,11 +44878,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/test/behavior/x86_64/math.zig b/test/behavior/x86_64/math.zig index 510c8289c6..5c5e440035 100644 --- a/test/behavior/x86_64/math.zig +++ b/test/behavior/x86_64/math.zig @@ -650,18 +650,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 +669,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 +688,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 +707,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 +726,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 +1623,6347 @@ 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); + var reg_arg = mem_arg; + _ = .{®_arg}; + try checkExpected(expected, op(Result, Type, reg_arg), opts.strict); + try checkExpected(expected, op(Result, Type, mem_arg), opts.strict); + try checkExpected(expected, op(Result, Type, 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 testInts() !void { + try testArgs(i8, i1, -1); + try testArgs(i8, i1, 0); + try testArgs(u8, i1, -1); + try testArgs(u8, i1, 0); + try testArgs(i16, i1, -1); + try testArgs(i16, i1, 0); + try testArgs(u16, i1, -1); + try testArgs(u16, i1, 0); + try testArgs(i32, i1, -1); + try testArgs(i32, i1, 0); + try testArgs(u32, i1, -1); + try testArgs(u32, i1, 0); + try testArgs(i64, i1, -1); + try testArgs(i64, i1, 0); + try testArgs(u64, i1, -1); + try testArgs(u64, i1, 0); + try testArgs(i128, i1, -1); + try testArgs(i128, i1, 0); + try testArgs(u128, i1, -1); + try testArgs(u128, i1, 0); + try testArgs(i256, i1, -1); + try testArgs(i256, i1, 0); + try testArgs(u256, i1, -1); + try testArgs(u256, i1, 0); + try testArgs(i512, i1, -1); + try testArgs(i512, i1, 0); + try testArgs(u512, i1, -1); + try testArgs(u512, i1, 0); + try testArgs(i1024, i1, -1); + try testArgs(i1024, 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(u8, u1, 0); + try testArgs(u8, u1, 1 << 0); + try testArgs(i16, u1, 0); + try testArgs(i16, u1, 1 << 0); + try testArgs(u16, u1, 0); + try testArgs(u16, u1, 1 << 0); + try testArgs(i32, u1, 0); + try testArgs(i32, u1, 1 << 0); + try testArgs(u32, u1, 0); + try testArgs(u32, u1, 1 << 0); + try testArgs(i64, u1, 0); + try testArgs(i64, u1, 1 << 0); + try testArgs(u64, u1, 0); + try testArgs(u64, u1, 1 << 0); + try testArgs(i128, u1, 0); + try testArgs(i128, u1, 1 << 0); + try testArgs(u128, u1, 0); + try testArgs(u128, u1, 1 << 0); + try testArgs(i256, u1, 0); + try testArgs(i256, u1, 1 << 0); + try testArgs(u256, u1, 0); + try testArgs(u256, u1, 1 << 0); + try testArgs(i512, u1, 0); + try testArgs(i512, u1, 1 << 0); + try testArgs(u512, u1, 0); + try testArgs(u512, u1, 1 << 0); + try testArgs(i1024, u1, 0); + try testArgs(i1024, 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(u8, i2, -1 << 1); + try testArgs(u8, i2, -1); + try testArgs(u8, i2, 0); + try testArgs(i16, i2, -1 << 1); + try testArgs(i16, i2, -1); + try testArgs(i16, i2, 0); + try testArgs(u16, i2, -1 << 1); + try testArgs(u16, i2, -1); + try testArgs(u16, i2, 0); + try testArgs(i32, i2, -1 << 1); + try testArgs(i32, i2, -1); + try testArgs(i32, i2, 0); + try testArgs(u32, i2, -1 << 1); + try testArgs(u32, i2, -1); + try testArgs(u32, i2, 0); + try testArgs(i64, i2, -1 << 1); + try testArgs(i64, i2, -1); + try testArgs(i64, i2, 0); + try testArgs(u64, i2, -1 << 1); + try testArgs(u64, i2, -1); + try testArgs(u64, i2, 0); + try testArgs(i128, i2, -1 << 1); + try testArgs(i128, i2, -1); + try testArgs(i128, i2, 0); + try testArgs(u128, i2, -1 << 1); + try testArgs(u128, i2, -1); + try testArgs(u128, i2, 0); + try testArgs(i256, i2, -1 << 1); + try testArgs(i256, i2, -1); + try testArgs(i256, i2, 0); + try testArgs(u256, i2, -1 << 1); + try testArgs(u256, i2, -1); + try testArgs(u256, i2, 0); + try testArgs(i512, i2, -1 << 1); + try testArgs(i512, i2, -1); + try testArgs(i512, i2, 0); + try testArgs(u512, i2, -1 << 1); + try testArgs(u512, i2, -1); + try testArgs(u512, i2, 0); + try testArgs(i1024, i2, -1 << 1); + try testArgs(i1024, i2, -1); + try testArgs(i1024, 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(u8, u2, 0); + try testArgs(u8, u2, 1 << 0); + try testArgs(u8, u2, 1 << 1); + try testArgs(i16, u2, 0); + try testArgs(i16, u2, 1 << 0); + try testArgs(i16, u2, 1 << 1); + try testArgs(u16, u2, 0); + try testArgs(u16, u2, 1 << 0); + try testArgs(u16, u2, 1 << 1); + try testArgs(i32, u2, 0); + try testArgs(i32, u2, 1 << 0); + try testArgs(i32, u2, 1 << 1); + try testArgs(u32, u2, 0); + try testArgs(u32, u2, 1 << 0); + try testArgs(u32, u2, 1 << 1); + try testArgs(i64, u2, 0); + try testArgs(i64, u2, 1 << 0); + try testArgs(i64, u2, 1 << 1); + try testArgs(u64, u2, 0); + try testArgs(u64, u2, 1 << 0); + try testArgs(u64, u2, 1 << 1); + try testArgs(i128, u2, 0); + try testArgs(i128, u2, 1 << 0); + try testArgs(i128, u2, 1 << 1); + try testArgs(u128, u2, 0); + try testArgs(u128, u2, 1 << 0); + try testArgs(u128, u2, 1 << 1); + try testArgs(i256, u2, 0); + try testArgs(i256, u2, 1 << 0); + try testArgs(i256, u2, 1 << 1); + try testArgs(u256, u2, 0); + try testArgs(u256, u2, 1 << 0); + try testArgs(u256, u2, 1 << 1); + try testArgs(i512, u2, 0); + try testArgs(i512, u2, 1 << 0); + try testArgs(i512, u2, 1 << 1); + try testArgs(u512, u2, 0); + try testArgs(u512, u2, 1 << 0); + try testArgs(u512, u2, 1 << 1); + try testArgs(i1024, u2, 0); + try testArgs(i1024, u2, 1 << 0); + try testArgs(i1024, 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(u8, i3, -1 << 2); + try testArgs(u8, i3, -1); + try testArgs(u8, i3, 0); + try testArgs(i16, i3, -1 << 2); + try testArgs(i16, i3, -1); + try testArgs(i16, i3, 0); + try testArgs(u16, i3, -1 << 2); + try testArgs(u16, i3, -1); + try testArgs(u16, i3, 0); + try testArgs(i32, i3, -1 << 2); + try testArgs(i32, i3, -1); + try testArgs(i32, i3, 0); + try testArgs(u32, i3, -1 << 2); + try testArgs(u32, i3, -1); + try testArgs(u32, i3, 0); + try testArgs(i64, i3, -1 << 2); + try testArgs(i64, i3, -1); + try testArgs(i64, i3, 0); + try testArgs(u64, i3, -1 << 2); + try testArgs(u64, i3, -1); + try testArgs(u64, i3, 0); + try testArgs(i128, i3, -1 << 2); + try testArgs(i128, i3, -1); + try testArgs(i128, i3, 0); + try testArgs(u128, i3, -1 << 2); + try testArgs(u128, i3, -1); + try testArgs(u128, i3, 0); + try testArgs(i256, i3, -1 << 2); + try testArgs(i256, i3, -1); + try testArgs(i256, i3, 0); + try testArgs(u256, i3, -1 << 2); + try testArgs(u256, i3, -1); + try testArgs(u256, i3, 0); + try testArgs(i512, i3, -1 << 2); + try testArgs(i512, i3, -1); + try testArgs(i512, i3, 0); + try testArgs(u512, i3, -1 << 2); + try testArgs(u512, i3, -1); + try testArgs(u512, i3, 0); + try testArgs(i1024, i3, -1 << 2); + try testArgs(i1024, i3, -1); + try testArgs(i1024, 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(u8, u3, 0); + try testArgs(u8, u3, 1 << 0); + try testArgs(u8, u3, 1 << 2); + try testArgs(i16, u3, 0); + try testArgs(i16, u3, 1 << 0); + try testArgs(i16, u3, 1 << 2); + try testArgs(u16, u3, 0); + try testArgs(u16, u3, 1 << 0); + try testArgs(u16, u3, 1 << 2); + try testArgs(i32, u3, 0); + try testArgs(i32, u3, 1 << 0); + try testArgs(i32, u3, 1 << 2); + try testArgs(u32, u3, 0); + try testArgs(u32, u3, 1 << 0); + try testArgs(u32, u3, 1 << 2); + try testArgs(i64, u3, 0); + try testArgs(i64, u3, 1 << 0); + try testArgs(i64, u3, 1 << 2); + try testArgs(u64, u3, 0); + try testArgs(u64, u3, 1 << 0); + try testArgs(u64, u3, 1 << 2); + try testArgs(i128, u3, 0); + try testArgs(i128, u3, 1 << 0); + try testArgs(i128, u3, 1 << 2); + try testArgs(u128, u3, 0); + try testArgs(u128, u3, 1 << 0); + try testArgs(u128, u3, 1 << 2); + try testArgs(i256, u3, 0); + try testArgs(i256, u3, 1 << 0); + try testArgs(i256, u3, 1 << 2); + try testArgs(u256, u3, 0); + try testArgs(u256, u3, 1 << 0); + try testArgs(u256, u3, 1 << 2); + try testArgs(i512, u3, 0); + try testArgs(i512, u3, 1 << 0); + try testArgs(i512, u3, 1 << 2); + try testArgs(u512, u3, 0); + try testArgs(u512, u3, 1 << 0); + try testArgs(u512, u3, 1 << 2); + try testArgs(i1024, u3, 0); + try testArgs(i1024, u3, 1 << 0); + try testArgs(i1024, 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(u8, i4, -1 << 3); + try testArgs(u8, i4, -1); + try testArgs(u8, i4, 0); + try testArgs(i16, i4, -1 << 3); + try testArgs(i16, i4, -1); + try testArgs(i16, i4, 0); + try testArgs(u16, i4, -1 << 3); + try testArgs(u16, i4, -1); + try testArgs(u16, i4, 0); + try testArgs(i32, i4, -1 << 3); + try testArgs(i32, i4, -1); + try testArgs(i32, i4, 0); + try testArgs(u32, i4, -1 << 3); + try testArgs(u32, i4, -1); + try testArgs(u32, i4, 0); + try testArgs(i64, i4, -1 << 3); + try testArgs(i64, i4, -1); + try testArgs(i64, i4, 0); + try testArgs(u64, i4, -1 << 3); + try testArgs(u64, i4, -1); + try testArgs(u64, i4, 0); + try testArgs(i128, i4, -1 << 3); + try testArgs(i128, i4, -1); + try testArgs(i128, i4, 0); + try testArgs(u128, i4, -1 << 3); + try testArgs(u128, i4, -1); + try testArgs(u128, i4, 0); + try testArgs(i256, i4, -1 << 3); + try testArgs(i256, i4, -1); + try testArgs(i256, i4, 0); + try testArgs(u256, i4, -1 << 3); + try testArgs(u256, i4, -1); + try testArgs(u256, i4, 0); + try testArgs(i512, i4, -1 << 3); + try testArgs(i512, i4, -1); + try testArgs(i512, i4, 0); + try testArgs(u512, i4, -1 << 3); + try testArgs(u512, i4, -1); + try testArgs(u512, i4, 0); + try testArgs(i1024, i4, -1 << 3); + try testArgs(i1024, i4, -1); + try testArgs(i1024, 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(u8, u4, 0); + try testArgs(u8, u4, 1 << 0); + try testArgs(u8, u4, 1 << 3); + try testArgs(i16, u4, 0); + try testArgs(i16, u4, 1 << 0); + try testArgs(i16, u4, 1 << 3); + try testArgs(u16, u4, 0); + try testArgs(u16, u4, 1 << 0); + try testArgs(u16, u4, 1 << 3); + try testArgs(i32, u4, 0); + try testArgs(i32, u4, 1 << 0); + try testArgs(i32, u4, 1 << 3); + try testArgs(u32, u4, 0); + try testArgs(u32, u4, 1 << 0); + try testArgs(u32, u4, 1 << 3); + try testArgs(i64, u4, 0); + try testArgs(i64, u4, 1 << 0); + try testArgs(i64, u4, 1 << 3); + try testArgs(u64, u4, 0); + try testArgs(u64, u4, 1 << 0); + try testArgs(u64, u4, 1 << 3); + try testArgs(i128, u4, 0); + try testArgs(i128, u4, 1 << 0); + try testArgs(i128, u4, 1 << 3); + try testArgs(u128, u4, 0); + try testArgs(u128, u4, 1 << 0); + try testArgs(u128, u4, 1 << 3); + try testArgs(i256, u4, 0); + try testArgs(i256, u4, 1 << 0); + try testArgs(i256, u4, 1 << 3); + try testArgs(u256, u4, 0); + try testArgs(u256, u4, 1 << 0); + try testArgs(u256, u4, 1 << 3); + try testArgs(i512, u4, 0); + try testArgs(i512, u4, 1 << 0); + try testArgs(i512, u4, 1 << 3); + try testArgs(u512, u4, 0); + try testArgs(u512, u4, 1 << 0); + try testArgs(u512, u4, 1 << 3); + try testArgs(i1024, u4, 0); + try testArgs(i1024, u4, 1 << 0); + try testArgs(i1024, 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(u8, i5, -1 << 4); + try testArgs(u8, i5, -1); + try testArgs(u8, i5, 0); + try testArgs(i16, i5, -1 << 4); + try testArgs(i16, i5, -1); + try testArgs(i16, i5, 0); + try testArgs(u16, i5, -1 << 4); + try testArgs(u16, i5, -1); + try testArgs(u16, i5, 0); + try testArgs(i32, i5, -1 << 4); + try testArgs(i32, i5, -1); + try testArgs(i32, i5, 0); + try testArgs(u32, i5, -1 << 4); + try testArgs(u32, i5, -1); + try testArgs(u32, i5, 0); + try testArgs(i64, i5, -1 << 4); + try testArgs(i64, i5, -1); + try testArgs(i64, i5, 0); + try testArgs(u64, i5, -1 << 4); + try testArgs(u64, i5, -1); + try testArgs(u64, i5, 0); + try testArgs(i128, i5, -1 << 4); + try testArgs(i128, i5, -1); + try testArgs(i128, i5, 0); + try testArgs(u128, i5, -1 << 4); + try testArgs(u128, i5, -1); + try testArgs(u128, i5, 0); + try testArgs(i256, i5, -1 << 4); + try testArgs(i256, i5, -1); + try testArgs(i256, i5, 0); + try testArgs(u256, i5, -1 << 4); + try testArgs(u256, i5, -1); + try testArgs(u256, i5, 0); + try testArgs(i512, i5, -1 << 4); + try testArgs(i512, i5, -1); + try testArgs(i512, i5, 0); + try testArgs(u512, i5, -1 << 4); + try testArgs(u512, i5, -1); + try testArgs(u512, i5, 0); + try testArgs(i1024, i5, -1 << 4); + try testArgs(i1024, i5, -1); + try testArgs(i1024, 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(u8, u5, 0); + try testArgs(u8, u5, 1 << 0); + try testArgs(u8, u5, 1 << 4); + try testArgs(i16, u5, 0); + try testArgs(i16, u5, 1 << 0); + try testArgs(i16, u5, 1 << 4); + try testArgs(u16, u5, 0); + try testArgs(u16, u5, 1 << 0); + try testArgs(u16, u5, 1 << 4); + try testArgs(i32, u5, 0); + try testArgs(i32, u5, 1 << 0); + try testArgs(i32, u5, 1 << 4); + try testArgs(u32, u5, 0); + try testArgs(u32, u5, 1 << 0); + try testArgs(u32, u5, 1 << 4); + try testArgs(i64, u5, 0); + try testArgs(i64, u5, 1 << 0); + try testArgs(i64, u5, 1 << 4); + try testArgs(u64, u5, 0); + try testArgs(u64, u5, 1 << 0); + try testArgs(u64, u5, 1 << 4); + try testArgs(i128, u5, 0); + try testArgs(i128, u5, 1 << 0); + try testArgs(i128, u5, 1 << 4); + try testArgs(u128, u5, 0); + try testArgs(u128, u5, 1 << 0); + try testArgs(u128, u5, 1 << 4); + try testArgs(i256, u5, 0); + try testArgs(i256, u5, 1 << 0); + try testArgs(i256, u5, 1 << 4); + try testArgs(u256, u5, 0); + try testArgs(u256, u5, 1 << 0); + try testArgs(u256, u5, 1 << 4); + try testArgs(i512, u5, 0); + try testArgs(i512, u5, 1 << 0); + try testArgs(i512, u5, 1 << 4); + try testArgs(u512, u5, 0); + try testArgs(u512, u5, 1 << 0); + try testArgs(u512, u5, 1 << 4); + try testArgs(i1024, u5, 0); + try testArgs(i1024, u5, 1 << 0); + try testArgs(i1024, 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(u8, i7, -1 << 6); + try testArgs(u8, i7, -1); + try testArgs(u8, i7, 0); + try testArgs(i16, i7, -1 << 6); + try testArgs(i16, i7, -1); + try testArgs(i16, i7, 0); + try testArgs(u16, i7, -1 << 6); + try testArgs(u16, i7, -1); + try testArgs(u16, i7, 0); + try testArgs(i32, i7, -1 << 6); + try testArgs(i32, i7, -1); + try testArgs(i32, i7, 0); + try testArgs(u32, i7, -1 << 6); + try testArgs(u32, i7, -1); + try testArgs(u32, i7, 0); + try testArgs(i64, i7, -1 << 6); + try testArgs(i64, i7, -1); + try testArgs(i64, i7, 0); + try testArgs(u64, i7, -1 << 6); + try testArgs(u64, i7, -1); + try testArgs(u64, i7, 0); + try testArgs(i128, i7, -1 << 6); + try testArgs(i128, i7, -1); + try testArgs(i128, i7, 0); + try testArgs(u128, i7, -1 << 6); + try testArgs(u128, i7, -1); + try testArgs(u128, i7, 0); + try testArgs(i256, i7, -1 << 6); + try testArgs(i256, i7, -1); + try testArgs(i256, i7, 0); + try testArgs(u256, i7, -1 << 6); + try testArgs(u256, i7, -1); + try testArgs(u256, i7, 0); + try testArgs(i512, i7, -1 << 6); + try testArgs(i512, i7, -1); + try testArgs(i512, i7, 0); + try testArgs(u512, i7, -1 << 6); + try testArgs(u512, i7, -1); + try testArgs(u512, i7, 0); + try testArgs(i1024, i7, -1 << 6); + try testArgs(i1024, i7, -1); + try testArgs(i1024, 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(u8, u7, 0); + try testArgs(u8, u7, 1 << 0); + try testArgs(u8, u7, 1 << 6); + try testArgs(i16, u7, 0); + try testArgs(i16, u7, 1 << 0); + try testArgs(i16, u7, 1 << 6); + try testArgs(u16, u7, 0); + try testArgs(u16, u7, 1 << 0); + try testArgs(u16, u7, 1 << 6); + try testArgs(i32, u7, 0); + try testArgs(i32, u7, 1 << 0); + try testArgs(i32, u7, 1 << 6); + try testArgs(u32, u7, 0); + try testArgs(u32, u7, 1 << 0); + try testArgs(u32, u7, 1 << 6); + try testArgs(i64, u7, 0); + try testArgs(i64, u7, 1 << 0); + try testArgs(i64, u7, 1 << 6); + try testArgs(u64, u7, 0); + try testArgs(u64, u7, 1 << 0); + try testArgs(u64, u7, 1 << 6); + try testArgs(i128, u7, 0); + try testArgs(i128, u7, 1 << 0); + try testArgs(i128, u7, 1 << 6); + try testArgs(u128, u7, 0); + try testArgs(u128, u7, 1 << 0); + try testArgs(u128, u7, 1 << 6); + try testArgs(i256, u7, 0); + try testArgs(i256, u7, 1 << 0); + try testArgs(i256, u7, 1 << 6); + try testArgs(u256, u7, 0); + try testArgs(u256, u7, 1 << 0); + try testArgs(u256, u7, 1 << 6); + try testArgs(i512, u7, 0); + try testArgs(i512, u7, 1 << 0); + try testArgs(i512, u7, 1 << 6); + try testArgs(u512, u7, 0); + try testArgs(u512, u7, 1 << 0); + try testArgs(u512, u7, 1 << 6); + try testArgs(i1024, u7, 0); + try testArgs(i1024, u7, 1 << 0); + try testArgs(i1024, 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(u8, i8, -1 << 7); + try testArgs(u8, i8, -1); + try testArgs(u8, i8, 0); + try testArgs(i16, i8, -1 << 7); + try testArgs(i16, i8, -1); + try testArgs(i16, i8, 0); + try testArgs(u16, i8, -1 << 7); + try testArgs(u16, i8, -1); + try testArgs(u16, i8, 0); + try testArgs(i32, i8, -1 << 7); + try testArgs(i32, i8, -1); + try testArgs(i32, i8, 0); + try testArgs(u32, i8, -1 << 7); + try testArgs(u32, i8, -1); + try testArgs(u32, i8, 0); + try testArgs(i64, i8, -1 << 7); + try testArgs(i64, i8, -1); + try testArgs(i64, i8, 0); + try testArgs(u64, i8, -1 << 7); + try testArgs(u64, i8, -1); + try testArgs(u64, i8, 0); + try testArgs(i128, i8, -1 << 7); + try testArgs(i128, i8, -1); + try testArgs(i128, i8, 0); + try testArgs(u128, i8, -1 << 7); + try testArgs(u128, i8, -1); + try testArgs(u128, i8, 0); + try testArgs(i256, i8, -1 << 7); + try testArgs(i256, i8, -1); + try testArgs(i256, i8, 0); + try testArgs(u256, i8, -1 << 7); + try testArgs(u256, i8, -1); + try testArgs(u256, i8, 0); + try testArgs(i512, i8, -1 << 7); + try testArgs(i512, i8, -1); + try testArgs(i512, i8, 0); + try testArgs(u512, i8, -1 << 7); + try testArgs(u512, i8, -1); + try testArgs(u512, i8, 0); + try testArgs(i1024, i8, -1 << 7); + try testArgs(i1024, i8, -1); + try testArgs(i1024, 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(u8, u8, 0); + try testArgs(u8, u8, 1 << 0); + try testArgs(u8, u8, 1 << 7); + try testArgs(i16, u8, 0); + try testArgs(i16, u8, 1 << 0); + try testArgs(i16, u8, 1 << 7); + try testArgs(u16, u8, 0); + try testArgs(u16, u8, 1 << 0); + try testArgs(u16, u8, 1 << 7); + try testArgs(i32, u8, 0); + try testArgs(i32, u8, 1 << 0); + try testArgs(i32, u8, 1 << 7); + try testArgs(u32, u8, 0); + try testArgs(u32, u8, 1 << 0); + try testArgs(u32, u8, 1 << 7); + try testArgs(i64, u8, 0); + try testArgs(i64, u8, 1 << 0); + try testArgs(i64, u8, 1 << 7); + try testArgs(u64, u8, 0); + try testArgs(u64, u8, 1 << 0); + try testArgs(u64, u8, 1 << 7); + try testArgs(i128, u8, 0); + try testArgs(i128, u8, 1 << 0); + try testArgs(i128, u8, 1 << 7); + try testArgs(u128, u8, 0); + try testArgs(u128, u8, 1 << 0); + try testArgs(u128, u8, 1 << 7); + try testArgs(i256, u8, 0); + try testArgs(i256, u8, 1 << 0); + try testArgs(i256, u8, 1 << 7); + try testArgs(u256, u8, 0); + try testArgs(u256, u8, 1 << 0); + try testArgs(u256, u8, 1 << 7); + try testArgs(i512, u8, 0); + try testArgs(i512, u8, 1 << 0); + try testArgs(i512, u8, 1 << 7); + try testArgs(u512, u8, 0); + try testArgs(u512, u8, 1 << 0); + try testArgs(u512, u8, 1 << 7); + try testArgs(i1024, u8, 0); + try testArgs(i1024, u8, 1 << 0); + try testArgs(i1024, 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(u8, i9, -1 << 8); + try testArgs(u8, i9, -1); + try testArgs(u8, i9, 0); + try testArgs(i16, i9, -1 << 8); + try testArgs(i16, i9, -1); + try testArgs(i16, i9, 0); + try testArgs(u16, i9, -1 << 8); + try testArgs(u16, i9, -1); + try testArgs(u16, i9, 0); + try testArgs(i32, i9, -1 << 8); + try testArgs(i32, i9, -1); + try testArgs(i32, i9, 0); + try testArgs(u32, i9, -1 << 8); + try testArgs(u32, i9, -1); + try testArgs(u32, i9, 0); + try testArgs(i64, i9, -1 << 8); + try testArgs(i64, i9, -1); + try testArgs(i64, i9, 0); + try testArgs(u64, i9, -1 << 8); + try testArgs(u64, i9, -1); + try testArgs(u64, i9, 0); + try testArgs(i128, i9, -1 << 8); + try testArgs(i128, i9, -1); + try testArgs(i128, i9, 0); + try testArgs(u128, i9, -1 << 8); + try testArgs(u128, i9, -1); + try testArgs(u128, i9, 0); + try testArgs(i256, i9, -1 << 8); + try testArgs(i256, i9, -1); + try testArgs(i256, i9, 0); + try testArgs(u256, i9, -1 << 8); + try testArgs(u256, i9, -1); + try testArgs(u256, i9, 0); + try testArgs(i512, i9, -1 << 8); + try testArgs(i512, i9, -1); + try testArgs(i512, i9, 0); + try testArgs(u512, i9, -1 << 8); + try testArgs(u512, i9, -1); + try testArgs(u512, i9, 0); + try testArgs(i1024, i9, -1 << 8); + try testArgs(i1024, i9, -1); + try testArgs(i1024, 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(u8, u9, 0); + try testArgs(u8, u9, 1 << 0); + try testArgs(u8, u9, 1 << 8); + try testArgs(i16, u9, 0); + try testArgs(i16, u9, 1 << 0); + try testArgs(i16, u9, 1 << 8); + try testArgs(u16, u9, 0); + try testArgs(u16, u9, 1 << 0); + try testArgs(u16, u9, 1 << 8); + try testArgs(i32, u9, 0); + try testArgs(i32, u9, 1 << 0); + try testArgs(i32, u9, 1 << 8); + try testArgs(u32, u9, 0); + try testArgs(u32, u9, 1 << 0); + try testArgs(u32, u9, 1 << 8); + try testArgs(i64, u9, 0); + try testArgs(i64, u9, 1 << 0); + try testArgs(i64, u9, 1 << 8); + try testArgs(u64, u9, 0); + try testArgs(u64, u9, 1 << 0); + try testArgs(u64, u9, 1 << 8); + try testArgs(i128, u9, 0); + try testArgs(i128, u9, 1 << 0); + try testArgs(i128, u9, 1 << 8); + try testArgs(u128, u9, 0); + try testArgs(u128, u9, 1 << 0); + try testArgs(u128, u9, 1 << 8); + try testArgs(i256, u9, 0); + try testArgs(i256, u9, 1 << 0); + try testArgs(i256, u9, 1 << 8); + try testArgs(u256, u9, 0); + try testArgs(u256, u9, 1 << 0); + try testArgs(u256, u9, 1 << 8); + try testArgs(i512, u9, 0); + try testArgs(i512, u9, 1 << 0); + try testArgs(i512, u9, 1 << 8); + try testArgs(u512, u9, 0); + try testArgs(u512, u9, 1 << 0); + try testArgs(u512, u9, 1 << 8); + try testArgs(i1024, u9, 0); + try testArgs(i1024, u9, 1 << 0); + try testArgs(i1024, 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(u8, i15, -1 << 14); + try testArgs(u8, i15, -1); + try testArgs(u8, i15, 0); + try testArgs(i16, i15, -1 << 14); + try testArgs(i16, i15, -1); + try testArgs(i16, i15, 0); + try testArgs(u16, i15, -1 << 14); + try testArgs(u16, i15, -1); + try testArgs(u16, i15, 0); + try testArgs(i32, i15, -1 << 14); + try testArgs(i32, i15, -1); + try testArgs(i32, i15, 0); + try testArgs(u32, i15, -1 << 14); + try testArgs(u32, i15, -1); + try testArgs(u32, i15, 0); + try testArgs(i64, i15, -1 << 14); + try testArgs(i64, i15, -1); + try testArgs(i64, i15, 0); + try testArgs(u64, i15, -1 << 14); + try testArgs(u64, i15, -1); + try testArgs(u64, i15, 0); + try testArgs(i128, i15, -1 << 14); + try testArgs(i128, i15, -1); + try testArgs(i128, i15, 0); + try testArgs(u128, i15, -1 << 14); + try testArgs(u128, i15, -1); + try testArgs(u128, i15, 0); + try testArgs(i256, i15, -1 << 14); + try testArgs(i256, i15, -1); + try testArgs(i256, i15, 0); + try testArgs(u256, i15, -1 << 14); + try testArgs(u256, i15, -1); + try testArgs(u256, i15, 0); + try testArgs(i512, i15, -1 << 14); + try testArgs(i512, i15, -1); + try testArgs(i512, i15, 0); + try testArgs(u512, i15, -1 << 14); + try testArgs(u512, i15, -1); + try testArgs(u512, i15, 0); + try testArgs(i1024, i15, -1 << 14); + try testArgs(i1024, i15, -1); + try testArgs(i1024, 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(u8, u15, 0); + try testArgs(u8, u15, 1 << 0); + try testArgs(u8, u15, 1 << 14); + try testArgs(i16, u15, 0); + try testArgs(i16, u15, 1 << 0); + try testArgs(i16, u15, 1 << 14); + try testArgs(u16, u15, 0); + try testArgs(u16, u15, 1 << 0); + try testArgs(u16, u15, 1 << 14); + try testArgs(i32, u15, 0); + try testArgs(i32, u15, 1 << 0); + try testArgs(i32, u15, 1 << 14); + try testArgs(u32, u15, 0); + try testArgs(u32, u15, 1 << 0); + try testArgs(u32, u15, 1 << 14); + try testArgs(i64, u15, 0); + try testArgs(i64, u15, 1 << 0); + try testArgs(i64, u15, 1 << 14); + try testArgs(u64, u15, 0); + try testArgs(u64, u15, 1 << 0); + try testArgs(u64, u15, 1 << 14); + try testArgs(i128, u15, 0); + try testArgs(i128, u15, 1 << 0); + try testArgs(i128, u15, 1 << 14); + try testArgs(u128, u15, 0); + try testArgs(u128, u15, 1 << 0); + try testArgs(u128, u15, 1 << 14); + try testArgs(i256, u15, 0); + try testArgs(i256, u15, 1 << 0); + try testArgs(i256, u15, 1 << 14); + try testArgs(u256, u15, 0); + try testArgs(u256, u15, 1 << 0); + try testArgs(u256, u15, 1 << 14); + try testArgs(i512, u15, 0); + try testArgs(i512, u15, 1 << 0); + try testArgs(i512, u15, 1 << 14); + try testArgs(u512, u15, 0); + try testArgs(u512, u15, 1 << 0); + try testArgs(u512, u15, 1 << 14); + try testArgs(i1024, u15, 0); + try testArgs(i1024, u15, 1 << 0); + try testArgs(i1024, 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(u8, i16, -1 << 15); + try testArgs(u8, i16, -1); + try testArgs(u8, i16, 0); + try testArgs(i16, i16, -1 << 15); + try testArgs(i16, i16, -1); + try testArgs(i16, i16, 0); + try testArgs(u16, i16, -1 << 15); + try testArgs(u16, i16, -1); + try testArgs(u16, i16, 0); + try testArgs(i32, i16, -1 << 15); + try testArgs(i32, i16, -1); + try testArgs(i32, i16, 0); + try testArgs(u32, i16, -1 << 15); + try testArgs(u32, i16, -1); + try testArgs(u32, i16, 0); + try testArgs(i64, i16, -1 << 15); + try testArgs(i64, i16, -1); + try testArgs(i64, i16, 0); + try testArgs(u64, i16, -1 << 15); + try testArgs(u64, i16, -1); + try testArgs(u64, i16, 0); + try testArgs(i128, i16, -1 << 15); + try testArgs(i128, i16, -1); + try testArgs(i128, i16, 0); + try testArgs(u128, i16, -1 << 15); + try testArgs(u128, i16, -1); + try testArgs(u128, i16, 0); + try testArgs(i256, i16, -1 << 15); + try testArgs(i256, i16, -1); + try testArgs(i256, i16, 0); + try testArgs(u256, i16, -1 << 15); + try testArgs(u256, i16, -1); + try testArgs(u256, i16, 0); + try testArgs(i512, i16, -1 << 15); + try testArgs(i512, i16, -1); + try testArgs(i512, i16, 0); + try testArgs(u512, i16, -1 << 15); + try testArgs(u512, i16, -1); + try testArgs(u512, i16, 0); + try testArgs(i1024, i16, -1 << 15); + try testArgs(i1024, i16, -1); + try testArgs(i1024, 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(u8, u16, 0); + try testArgs(u8, u16, 1 << 0); + try testArgs(u8, u16, 1 << 15); + try testArgs(i16, u16, 0); + try testArgs(i16, u16, 1 << 0); + try testArgs(i16, u16, 1 << 15); + try testArgs(u16, u16, 0); + try testArgs(u16, u16, 1 << 0); + try testArgs(u16, u16, 1 << 15); + try testArgs(i32, u16, 0); + try testArgs(i32, u16, 1 << 0); + try testArgs(i32, u16, 1 << 15); + try testArgs(u32, u16, 0); + try testArgs(u32, u16, 1 << 0); + try testArgs(u32, u16, 1 << 15); + try testArgs(i64, u16, 0); + try testArgs(i64, u16, 1 << 0); + try testArgs(i64, u16, 1 << 15); + try testArgs(u64, u16, 0); + try testArgs(u64, u16, 1 << 0); + try testArgs(u64, u16, 1 << 15); + try testArgs(i128, u16, 0); + try testArgs(i128, u16, 1 << 0); + try testArgs(i128, u16, 1 << 15); + try testArgs(u128, u16, 0); + try testArgs(u128, u16, 1 << 0); + try testArgs(u128, u16, 1 << 15); + try testArgs(i256, u16, 0); + try testArgs(i256, u16, 1 << 0); + try testArgs(i256, u16, 1 << 15); + try testArgs(u256, u16, 0); + try testArgs(u256, u16, 1 << 0); + try testArgs(u256, u16, 1 << 15); + try testArgs(i512, u16, 0); + try testArgs(i512, u16, 1 << 0); + try testArgs(i512, u16, 1 << 15); + try testArgs(u512, u16, 0); + try testArgs(u512, u16, 1 << 0); + try testArgs(u512, u16, 1 << 15); + try testArgs(i1024, u16, 0); + try testArgs(i1024, u16, 1 << 0); + try testArgs(i1024, 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(u8, i17, -1 << 16); + try testArgs(u8, i17, -1); + try testArgs(u8, i17, 0); + try testArgs(i16, i17, -1 << 16); + try testArgs(i16, i17, -1); + try testArgs(i16, i17, 0); + try testArgs(u16, i17, -1 << 16); + try testArgs(u16, i17, -1); + try testArgs(u16, i17, 0); + try testArgs(i32, i17, -1 << 16); + try testArgs(i32, i17, -1); + try testArgs(i32, i17, 0); + try testArgs(u32, i17, -1 << 16); + try testArgs(u32, i17, -1); + try testArgs(u32, i17, 0); + try testArgs(i64, i17, -1 << 16); + try testArgs(i64, i17, -1); + try testArgs(i64, i17, 0); + try testArgs(u64, i17, -1 << 16); + try testArgs(u64, i17, -1); + try testArgs(u64, i17, 0); + try testArgs(i128, i17, -1 << 16); + try testArgs(i128, i17, -1); + try testArgs(i128, i17, 0); + try testArgs(u128, i17, -1 << 16); + try testArgs(u128, i17, -1); + try testArgs(u128, i17, 0); + try testArgs(i256, i17, -1 << 16); + try testArgs(i256, i17, -1); + try testArgs(i256, i17, 0); + try testArgs(u256, i17, -1 << 16); + try testArgs(u256, i17, -1); + try testArgs(u256, i17, 0); + try testArgs(i512, i17, -1 << 16); + try testArgs(i512, i17, -1); + try testArgs(i512, i17, 0); + try testArgs(u512, i17, -1 << 16); + try testArgs(u512, i17, -1); + try testArgs(u512, i17, 0); + try testArgs(i1024, i17, -1 << 16); + try testArgs(i1024, i17, -1); + try testArgs(i1024, 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(u8, u17, 0); + try testArgs(u8, u17, 1 << 0); + try testArgs(u8, u17, 1 << 16); + try testArgs(i16, u17, 0); + try testArgs(i16, u17, 1 << 0); + try testArgs(i16, u17, 1 << 16); + try testArgs(u16, u17, 0); + try testArgs(u16, u17, 1 << 0); + try testArgs(u16, u17, 1 << 16); + try testArgs(i32, u17, 0); + try testArgs(i32, u17, 1 << 0); + try testArgs(i32, u17, 1 << 16); + try testArgs(u32, u17, 0); + try testArgs(u32, u17, 1 << 0); + try testArgs(u32, u17, 1 << 16); + try testArgs(i64, u17, 0); + try testArgs(i64, u17, 1 << 0); + try testArgs(i64, u17, 1 << 16); + try testArgs(u64, u17, 0); + try testArgs(u64, u17, 1 << 0); + try testArgs(u64, u17, 1 << 16); + try testArgs(i128, u17, 0); + try testArgs(i128, u17, 1 << 0); + try testArgs(i128, u17, 1 << 16); + try testArgs(u128, u17, 0); + try testArgs(u128, u17, 1 << 0); + try testArgs(u128, u17, 1 << 16); + try testArgs(i256, u17, 0); + try testArgs(i256, u17, 1 << 0); + try testArgs(i256, u17, 1 << 16); + try testArgs(u256, u17, 0); + try testArgs(u256, u17, 1 << 0); + try testArgs(u256, u17, 1 << 16); + try testArgs(i512, u17, 0); + try testArgs(i512, u17, 1 << 0); + try testArgs(i512, u17, 1 << 16); + try testArgs(u512, u17, 0); + try testArgs(u512, u17, 1 << 0); + try testArgs(u512, u17, 1 << 16); + try testArgs(i1024, u17, 0); + try testArgs(i1024, u17, 1 << 0); + try testArgs(i1024, 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(u8, i31, -1 << 30); + try testArgs(u8, i31, -1); + try testArgs(u8, i31, 0); + try testArgs(i16, i31, -1 << 30); + try testArgs(i16, i31, -1); + try testArgs(i16, i31, 0); + try testArgs(u16, i31, -1 << 30); + try testArgs(u16, i31, -1); + try testArgs(u16, i31, 0); + try testArgs(i32, i31, -1 << 30); + try testArgs(i32, i31, -1); + try testArgs(i32, i31, 0); + try testArgs(u32, i31, -1 << 30); + try testArgs(u32, i31, -1); + try testArgs(u32, i31, 0); + try testArgs(i64, i31, -1 << 30); + try testArgs(i64, i31, -1); + try testArgs(i64, i31, 0); + try testArgs(u64, i31, -1 << 30); + try testArgs(u64, i31, -1); + try testArgs(u64, i31, 0); + try testArgs(i128, i31, -1 << 30); + try testArgs(i128, i31, -1); + try testArgs(i128, i31, 0); + try testArgs(u128, i31, -1 << 30); + try testArgs(u128, i31, -1); + try testArgs(u128, i31, 0); + try testArgs(i256, i31, -1 << 30); + try testArgs(i256, i31, -1); + try testArgs(i256, i31, 0); + try testArgs(u256, i31, -1 << 30); + try testArgs(u256, i31, -1); + try testArgs(u256, i31, 0); + try testArgs(i512, i31, -1 << 30); + try testArgs(i512, i31, -1); + try testArgs(i512, i31, 0); + try testArgs(u512, i31, -1 << 30); + try testArgs(u512, i31, -1); + try testArgs(u512, i31, 0); + try testArgs(i1024, i31, -1 << 30); + try testArgs(i1024, i31, -1); + try testArgs(i1024, 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(u8, u31, 0); + try testArgs(u8, u31, 1 << 0); + try testArgs(u8, u31, 1 << 30); + try testArgs(i16, u31, 0); + try testArgs(i16, u31, 1 << 0); + try testArgs(i16, u31, 1 << 30); + try testArgs(u16, u31, 0); + try testArgs(u16, u31, 1 << 0); + try testArgs(u16, u31, 1 << 30); + try testArgs(i32, u31, 0); + try testArgs(i32, u31, 1 << 0); + try testArgs(i32, u31, 1 << 30); + try testArgs(u32, u31, 0); + try testArgs(u32, u31, 1 << 0); + try testArgs(u32, u31, 1 << 30); + try testArgs(i64, u31, 0); + try testArgs(i64, u31, 1 << 0); + try testArgs(i64, u31, 1 << 30); + try testArgs(u64, u31, 0); + try testArgs(u64, u31, 1 << 0); + try testArgs(u64, u31, 1 << 30); + try testArgs(i128, u31, 0); + try testArgs(i128, u31, 1 << 0); + try testArgs(i128, u31, 1 << 30); + try testArgs(u128, u31, 0); + try testArgs(u128, u31, 1 << 0); + try testArgs(u128, u31, 1 << 30); + try testArgs(i256, u31, 0); + try testArgs(i256, u31, 1 << 0); + try testArgs(i256, u31, 1 << 30); + try testArgs(u256, u31, 0); + try testArgs(u256, u31, 1 << 0); + try testArgs(u256, u31, 1 << 30); + try testArgs(i512, u31, 0); + try testArgs(i512, u31, 1 << 0); + try testArgs(i512, u31, 1 << 30); + try testArgs(u512, u31, 0); + try testArgs(u512, u31, 1 << 0); + try testArgs(u512, u31, 1 << 30); + try testArgs(i1024, u31, 0); + try testArgs(i1024, u31, 1 << 0); + try testArgs(i1024, 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(u8, i32, -1 << 31); + try testArgs(u8, i32, -1); + try testArgs(u8, i32, 0); + try testArgs(i16, i32, -1 << 31); + try testArgs(i16, i32, -1); + try testArgs(i16, i32, 0); + try testArgs(u16, i32, -1 << 31); + try testArgs(u16, i32, -1); + try testArgs(u16, i32, 0); + try testArgs(i32, i32, -1 << 31); + try testArgs(i32, i32, -1); + try testArgs(i32, i32, 0); + try testArgs(u32, i32, -1 << 31); + try testArgs(u32, i32, -1); + try testArgs(u32, i32, 0); + try testArgs(i64, i32, -1 << 31); + try testArgs(i64, i32, -1); + try testArgs(i64, i32, 0); + try testArgs(u64, i32, -1 << 31); + try testArgs(u64, i32, -1); + try testArgs(u64, i32, 0); + try testArgs(i128, i32, -1 << 31); + try testArgs(i128, i32, -1); + try testArgs(i128, i32, 0); + try testArgs(u128, i32, -1 << 31); + try testArgs(u128, i32, -1); + try testArgs(u128, i32, 0); + try testArgs(i256, i32, -1 << 31); + try testArgs(i256, i32, -1); + try testArgs(i256, i32, 0); + try testArgs(u256, i32, -1 << 31); + try testArgs(u256, i32, -1); + try testArgs(u256, i32, 0); + try testArgs(i512, i32, -1 << 31); + try testArgs(i512, i32, -1); + try testArgs(i512, i32, 0); + try testArgs(u512, i32, -1 << 31); + try testArgs(u512, i32, -1); + try testArgs(u512, i32, 0); + try testArgs(i1024, i32, -1 << 31); + try testArgs(i1024, i32, -1); + try testArgs(i1024, 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(u8, u32, 0); + try testArgs(u8, u32, 1 << 0); + try testArgs(u8, u32, 1 << 31); + try testArgs(i16, u32, 0); + try testArgs(i16, u32, 1 << 0); + try testArgs(i16, u32, 1 << 31); + try testArgs(u16, u32, 0); + try testArgs(u16, u32, 1 << 0); + try testArgs(u16, u32, 1 << 31); + try testArgs(i32, u32, 0); + try testArgs(i32, u32, 1 << 0); + try testArgs(i32, u32, 1 << 31); + try testArgs(u32, u32, 0); + try testArgs(u32, u32, 1 << 0); + try testArgs(u32, u32, 1 << 31); + try testArgs(i64, u32, 0); + try testArgs(i64, u32, 1 << 0); + try testArgs(i64, u32, 1 << 31); + try testArgs(u64, u32, 0); + try testArgs(u64, u32, 1 << 0); + try testArgs(u64, u32, 1 << 31); + try testArgs(i128, u32, 0); + try testArgs(i128, u32, 1 << 0); + try testArgs(i128, u32, 1 << 31); + try testArgs(u128, u32, 0); + try testArgs(u128, u32, 1 << 0); + try testArgs(u128, u32, 1 << 31); + try testArgs(i256, u32, 0); + try testArgs(i256, u32, 1 << 0); + try testArgs(i256, u32, 1 << 31); + try testArgs(u256, u32, 0); + try testArgs(u256, u32, 1 << 0); + try testArgs(u256, u32, 1 << 31); + try testArgs(i512, u32, 0); + try testArgs(i512, u32, 1 << 0); + try testArgs(i512, u32, 1 << 31); + try testArgs(u512, u32, 0); + try testArgs(u512, u32, 1 << 0); + try testArgs(u512, u32, 1 << 31); + try testArgs(i1024, u32, 0); + try testArgs(i1024, u32, 1 << 0); + try testArgs(i1024, 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(u8, i33, -1 << 32); + try testArgs(u8, i33, -1); + try testArgs(u8, i33, 0); + try testArgs(i16, i33, -1 << 32); + try testArgs(i16, i33, -1); + try testArgs(i16, i33, 0); + try testArgs(u16, i33, -1 << 32); + try testArgs(u16, i33, -1); + try testArgs(u16, i33, 0); + try testArgs(i32, i33, -1 << 32); + try testArgs(i32, i33, -1); + try testArgs(i32, i33, 0); + try testArgs(u32, i33, -1 << 32); + try testArgs(u32, i33, -1); + try testArgs(u32, i33, 0); + try testArgs(i64, i33, -1 << 32); + try testArgs(i64, i33, -1); + try testArgs(i64, i33, 0); + try testArgs(u64, i33, -1 << 32); + try testArgs(u64, i33, -1); + try testArgs(u64, i33, 0); + try testArgs(i128, i33, -1 << 32); + try testArgs(i128, i33, -1); + try testArgs(i128, i33, 0); + try testArgs(u128, i33, -1 << 32); + try testArgs(u128, i33, -1); + try testArgs(u128, i33, 0); + try testArgs(i256, i33, -1 << 32); + try testArgs(i256, i33, -1); + try testArgs(i256, i33, 0); + try testArgs(u256, i33, -1 << 32); + try testArgs(u256, i33, -1); + try testArgs(u256, i33, 0); + try testArgs(i512, i33, -1 << 32); + try testArgs(i512, i33, -1); + try testArgs(i512, i33, 0); + try testArgs(u512, i33, -1 << 32); + try testArgs(u512, i33, -1); + try testArgs(u512, i33, 0); + try testArgs(i1024, i33, -1 << 32); + try testArgs(i1024, i33, -1); + try testArgs(i1024, 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(u8, u33, 0); + try testArgs(u8, u33, 1 << 0); + try testArgs(u8, u33, 1 << 32); + try testArgs(i16, u33, 0); + try testArgs(i16, u33, 1 << 0); + try testArgs(i16, u33, 1 << 32); + try testArgs(u16, u33, 0); + try testArgs(u16, u33, 1 << 0); + try testArgs(u16, u33, 1 << 32); + try testArgs(i32, u33, 0); + try testArgs(i32, u33, 1 << 0); + try testArgs(i32, u33, 1 << 32); + try testArgs(u32, u33, 0); + try testArgs(u32, u33, 1 << 0); + try testArgs(u32, u33, 1 << 32); + try testArgs(i64, u33, 0); + try testArgs(i64, u33, 1 << 0); + try testArgs(i64, u33, 1 << 32); + try testArgs(u64, u33, 0); + try testArgs(u64, u33, 1 << 0); + try testArgs(u64, u33, 1 << 32); + try testArgs(i128, u33, 0); + try testArgs(i128, u33, 1 << 0); + try testArgs(i128, u33, 1 << 32); + try testArgs(u128, u33, 0); + try testArgs(u128, u33, 1 << 0); + try testArgs(u128, u33, 1 << 32); + try testArgs(i256, u33, 0); + try testArgs(i256, u33, 1 << 0); + try testArgs(i256, u33, 1 << 32); + try testArgs(u256, u33, 0); + try testArgs(u256, u33, 1 << 0); + try testArgs(u256, u33, 1 << 32); + try testArgs(i512, u33, 0); + try testArgs(i512, u33, 1 << 0); + try testArgs(i512, u33, 1 << 32); + try testArgs(u512, u33, 0); + try testArgs(u512, u33, 1 << 0); + try testArgs(u512, u33, 1 << 32); + try testArgs(i1024, u33, 0); + try testArgs(i1024, u33, 1 << 0); + try testArgs(i1024, 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(u8, i63, -1 << 62); + try testArgs(u8, i63, -1); + try testArgs(u8, i63, 0); + try testArgs(i16, i63, -1 << 62); + try testArgs(i16, i63, -1); + try testArgs(i16, i63, 0); + try testArgs(u16, i63, -1 << 62); + try testArgs(u16, i63, -1); + try testArgs(u16, i63, 0); + try testArgs(i32, i63, -1 << 62); + try testArgs(i32, i63, -1); + try testArgs(i32, i63, 0); + try testArgs(u32, i63, -1 << 62); + try testArgs(u32, i63, -1); + try testArgs(u32, i63, 0); + try testArgs(i64, i63, -1 << 62); + try testArgs(i64, i63, -1); + try testArgs(i64, i63, 0); + try testArgs(u64, i63, -1 << 62); + try testArgs(u64, i63, -1); + try testArgs(u64, i63, 0); + try testArgs(i128, i63, -1 << 62); + try testArgs(i128, i63, -1); + try testArgs(i128, i63, 0); + try testArgs(u128, i63, -1 << 62); + try testArgs(u128, i63, -1); + try testArgs(u128, i63, 0); + try testArgs(i256, i63, -1 << 62); + try testArgs(i256, i63, -1); + try testArgs(i256, i63, 0); + try testArgs(u256, i63, -1 << 62); + try testArgs(u256, i63, -1); + try testArgs(u256, i63, 0); + try testArgs(i512, i63, -1 << 62); + try testArgs(i512, i63, -1); + try testArgs(i512, i63, 0); + try testArgs(u512, i63, -1 << 62); + try testArgs(u512, i63, -1); + try testArgs(u512, i63, 0); + try testArgs(i1024, i63, -1 << 62); + try testArgs(i1024, i63, -1); + try testArgs(i1024, 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(u8, u63, 0); + try testArgs(u8, u63, 1 << 0); + try testArgs(u8, u63, 1 << 62); + try testArgs(i16, u63, 0); + try testArgs(i16, u63, 1 << 0); + try testArgs(i16, u63, 1 << 62); + try testArgs(u16, u63, 0); + try testArgs(u16, u63, 1 << 0); + try testArgs(u16, u63, 1 << 62); + try testArgs(i32, u63, 0); + try testArgs(i32, u63, 1 << 0); + try testArgs(i32, u63, 1 << 62); + try testArgs(u32, u63, 0); + try testArgs(u32, u63, 1 << 0); + try testArgs(u32, u63, 1 << 62); + try testArgs(i64, u63, 0); + try testArgs(i64, u63, 1 << 0); + try testArgs(i64, u63, 1 << 62); + try testArgs(u64, u63, 0); + try testArgs(u64, u63, 1 << 0); + try testArgs(u64, u63, 1 << 62); + try testArgs(i128, u63, 0); + try testArgs(i128, u63, 1 << 0); + try testArgs(i128, u63, 1 << 62); + try testArgs(u128, u63, 0); + try testArgs(u128, u63, 1 << 0); + try testArgs(u128, u63, 1 << 62); + try testArgs(i256, u63, 0); + try testArgs(i256, u63, 1 << 0); + try testArgs(i256, u63, 1 << 62); + try testArgs(u256, u63, 0); + try testArgs(u256, u63, 1 << 0); + try testArgs(u256, u63, 1 << 62); + try testArgs(i512, u63, 0); + try testArgs(i512, u63, 1 << 0); + try testArgs(i512, u63, 1 << 62); + try testArgs(u512, u63, 0); + try testArgs(u512, u63, 1 << 0); + try testArgs(u512, u63, 1 << 62); + try testArgs(i1024, u63, 0); + try testArgs(i1024, u63, 1 << 0); + try testArgs(i1024, 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(u8, i64, -1 << 63); + try testArgs(u8, i64, -1); + try testArgs(u8, i64, 0); + try testArgs(i16, i64, -1 << 63); + try testArgs(i16, i64, -1); + try testArgs(i16, i64, 0); + try testArgs(u16, i64, -1 << 63); + try testArgs(u16, i64, -1); + try testArgs(u16, i64, 0); + try testArgs(i32, i64, -1 << 63); + try testArgs(i32, i64, -1); + try testArgs(i32, i64, 0); + try testArgs(u32, i64, -1 << 63); + try testArgs(u32, i64, -1); + try testArgs(u32, i64, 0); + try testArgs(i64, i64, -1 << 63); + try testArgs(i64, i64, -1); + try testArgs(i64, i64, 0); + try testArgs(u64, i64, -1 << 63); + try testArgs(u64, i64, -1); + try testArgs(u64, i64, 0); + try testArgs(i128, i64, -1 << 63); + try testArgs(i128, i64, -1); + try testArgs(i128, i64, 0); + try testArgs(u128, i64, -1 << 63); + try testArgs(u128, i64, -1); + try testArgs(u128, i64, 0); + try testArgs(i256, i64, -1 << 63); + try testArgs(i256, i64, -1); + try testArgs(i256, i64, 0); + try testArgs(u256, i64, -1 << 63); + try testArgs(u256, i64, -1); + try testArgs(u256, i64, 0); + try testArgs(i512, i64, -1 << 63); + try testArgs(i512, i64, -1); + try testArgs(i512, i64, 0); + try testArgs(u512, i64, -1 << 63); + try testArgs(u512, i64, -1); + try testArgs(u512, i64, 0); + try testArgs(i1024, i64, -1 << 63); + try testArgs(i1024, i64, -1); + try testArgs(i1024, 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(u8, u64, 0); + try testArgs(u8, u64, 1 << 0); + try testArgs(u8, u64, 1 << 63); + try testArgs(i16, u64, 0); + try testArgs(i16, u64, 1 << 0); + try testArgs(i16, u64, 1 << 63); + try testArgs(u16, u64, 0); + try testArgs(u16, u64, 1 << 0); + try testArgs(u16, u64, 1 << 63); + try testArgs(i32, u64, 0); + try testArgs(i32, u64, 1 << 0); + try testArgs(i32, u64, 1 << 63); + try testArgs(u32, u64, 0); + try testArgs(u32, u64, 1 << 0); + try testArgs(u32, u64, 1 << 63); + try testArgs(i64, u64, 0); + try testArgs(i64, u64, 1 << 0); + try testArgs(i64, u64, 1 << 63); + try testArgs(u64, u64, 0); + try testArgs(u64, u64, 1 << 0); + try testArgs(u64, u64, 1 << 63); + try testArgs(i128, u64, 0); + try testArgs(i128, u64, 1 << 0); + try testArgs(i128, u64, 1 << 63); + try testArgs(u128, u64, 0); + try testArgs(u128, u64, 1 << 0); + try testArgs(u128, u64, 1 << 63); + try testArgs(i256, u64, 0); + try testArgs(i256, u64, 1 << 0); + try testArgs(i256, u64, 1 << 63); + try testArgs(u256, u64, 0); + try testArgs(u256, u64, 1 << 0); + try testArgs(u256, u64, 1 << 63); + try testArgs(i512, u64, 0); + try testArgs(i512, u64, 1 << 0); + try testArgs(i512, u64, 1 << 63); + try testArgs(u512, u64, 0); + try testArgs(u512, u64, 1 << 0); + try testArgs(u512, u64, 1 << 63); + try testArgs(i1024, u64, 0); + try testArgs(i1024, u64, 1 << 0); + try testArgs(i1024, 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(u8, i65, -1 << 64); + try testArgs(u8, i65, -1); + try testArgs(u8, i65, 0); + try testArgs(i16, i65, -1 << 64); + try testArgs(i16, i65, -1); + try testArgs(i16, i65, 0); + try testArgs(u16, i65, -1 << 64); + try testArgs(u16, i65, -1); + try testArgs(u16, i65, 0); + try testArgs(i32, i65, -1 << 64); + try testArgs(i32, i65, -1); + try testArgs(i32, i65, 0); + try testArgs(u32, i65, -1 << 64); + try testArgs(u32, i65, -1); + try testArgs(u32, i65, 0); + try testArgs(i64, i65, -1 << 64); + try testArgs(i64, i65, -1); + try testArgs(i64, i65, 0); + try testArgs(u64, i65, -1 << 64); + try testArgs(u64, i65, -1); + try testArgs(u64, i65, 0); + try testArgs(i128, i65, -1 << 64); + try testArgs(i128, i65, -1); + try testArgs(i128, i65, 0); + try testArgs(u128, i65, -1 << 64); + try testArgs(u128, i65, -1); + try testArgs(u128, i65, 0); + try testArgs(i256, i65, -1 << 64); + try testArgs(i256, i65, -1); + try testArgs(i256, i65, 0); + try testArgs(u256, i65, -1 << 64); + try testArgs(u256, i65, -1); + try testArgs(u256, i65, 0); + try testArgs(i512, i65, -1 << 64); + try testArgs(i512, i65, -1); + try testArgs(i512, i65, 0); + try testArgs(u512, i65, -1 << 64); + try testArgs(u512, i65, -1); + try testArgs(u512, i65, 0); + try testArgs(i1024, i65, -1 << 64); + try testArgs(i1024, i65, -1); + try testArgs(i1024, 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(u8, u65, 0); + try testArgs(u8, u65, 1 << 0); + try testArgs(u8, u65, 1 << 64); + try testArgs(i16, u65, 0); + try testArgs(i16, u65, 1 << 0); + try testArgs(i16, u65, 1 << 64); + try testArgs(u16, u65, 0); + try testArgs(u16, u65, 1 << 0); + try testArgs(u16, u65, 1 << 64); + try testArgs(i32, u65, 0); + try testArgs(i32, u65, 1 << 0); + try testArgs(i32, u65, 1 << 64); + try testArgs(u32, u65, 0); + try testArgs(u32, u65, 1 << 0); + try testArgs(u32, u65, 1 << 64); + try testArgs(i64, u65, 0); + try testArgs(i64, u65, 1 << 0); + try testArgs(i64, u65, 1 << 64); + try testArgs(u64, u65, 0); + try testArgs(u64, u65, 1 << 0); + try testArgs(u64, u65, 1 << 64); + try testArgs(i128, u65, 0); + try testArgs(i128, u65, 1 << 0); + try testArgs(i128, u65, 1 << 64); + try testArgs(u128, u65, 0); + try testArgs(u128, u65, 1 << 0); + try testArgs(u128, u65, 1 << 64); + try testArgs(i256, u65, 0); + try testArgs(i256, u65, 1 << 0); + try testArgs(i256, u65, 1 << 64); + try testArgs(u256, u65, 0); + try testArgs(u256, u65, 1 << 0); + try testArgs(u256, u65, 1 << 64); + try testArgs(i512, u65, 0); + try testArgs(i512, u65, 1 << 0); + try testArgs(i512, u65, 1 << 64); + try testArgs(u512, u65, 0); + try testArgs(u512, u65, 1 << 0); + try testArgs(u512, u65, 1 << 64); + try testArgs(i1024, u65, 0); + try testArgs(i1024, u65, 1 << 0); + try testArgs(i1024, 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(u8, i95, -1 << 94); + try testArgs(u8, i95, -1); + try testArgs(u8, i95, 0); + try testArgs(i16, i95, -1 << 94); + try testArgs(i16, i95, -1); + try testArgs(i16, i95, 0); + try testArgs(u16, i95, -1 << 94); + try testArgs(u16, i95, -1); + try testArgs(u16, i95, 0); + try testArgs(i32, i95, -1 << 94); + try testArgs(i32, i95, -1); + try testArgs(i32, i95, 0); + try testArgs(u32, i95, -1 << 94); + try testArgs(u32, i95, -1); + try testArgs(u32, i95, 0); + try testArgs(i64, i95, -1 << 94); + try testArgs(i64, i95, -1); + try testArgs(i64, i95, 0); + try testArgs(u64, i95, -1 << 94); + try testArgs(u64, i95, -1); + try testArgs(u64, i95, 0); + try testArgs(i128, i95, -1 << 94); + try testArgs(i128, i95, -1); + try testArgs(i128, i95, 0); + try testArgs(u128, i95, -1 << 94); + try testArgs(u128, i95, -1); + try testArgs(u128, i95, 0); + try testArgs(i256, i95, -1 << 94); + try testArgs(i256, i95, -1); + try testArgs(i256, i95, 0); + try testArgs(u256, i95, -1 << 94); + try testArgs(u256, i95, -1); + try testArgs(u256, i95, 0); + try testArgs(i512, i95, -1 << 94); + try testArgs(i512, i95, -1); + try testArgs(i512, i95, 0); + try testArgs(u512, i95, -1 << 94); + try testArgs(u512, i95, -1); + try testArgs(u512, i95, 0); + try testArgs(i1024, i95, -1 << 94); + try testArgs(i1024, i95, -1); + try testArgs(i1024, 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(u8, u95, 0); + try testArgs(u8, u95, 1 << 0); + try testArgs(u8, u95, 1 << 94); + try testArgs(i16, u95, 0); + try testArgs(i16, u95, 1 << 0); + try testArgs(i16, u95, 1 << 94); + try testArgs(u16, u95, 0); + try testArgs(u16, u95, 1 << 0); + try testArgs(u16, u95, 1 << 94); + try testArgs(i32, u95, 0); + try testArgs(i32, u95, 1 << 0); + try testArgs(i32, u95, 1 << 94); + try testArgs(u32, u95, 0); + try testArgs(u32, u95, 1 << 0); + try testArgs(u32, u95, 1 << 94); + try testArgs(i64, u95, 0); + try testArgs(i64, u95, 1 << 0); + try testArgs(i64, u95, 1 << 94); + try testArgs(u64, u95, 0); + try testArgs(u64, u95, 1 << 0); + try testArgs(u64, u95, 1 << 94); + try testArgs(i128, u95, 0); + try testArgs(i128, u95, 1 << 0); + try testArgs(i128, u95, 1 << 94); + try testArgs(u128, u95, 0); + try testArgs(u128, u95, 1 << 0); + try testArgs(u128, u95, 1 << 94); + try testArgs(i256, u95, 0); + try testArgs(i256, u95, 1 << 0); + try testArgs(i256, u95, 1 << 94); + try testArgs(u256, u95, 0); + try testArgs(u256, u95, 1 << 0); + try testArgs(u256, u95, 1 << 94); + try testArgs(i512, u95, 0); + try testArgs(i512, u95, 1 << 0); + try testArgs(i512, u95, 1 << 94); + try testArgs(u512, u95, 0); + try testArgs(u512, u95, 1 << 0); + try testArgs(u512, u95, 1 << 94); + try testArgs(i1024, u95, 0); + try testArgs(i1024, u95, 1 << 0); + try testArgs(i1024, u95, 1 << 94); + try testArgs(u1024, u95, 0); + try testArgs(u1024, u95, 1 << 0); + try testArgs(u1024, u95, 1 << 94); + + try testArgs(i8, i96, -1 << 95); + try testArgs(i8, i96, -1); + try testArgs(i8, i96, 0); + try testArgs(u8, i96, -1 << 95); + try testArgs(u8, i96, -1); + try testArgs(u8, i96, 0); + try testArgs(i16, i96, -1 << 95); + try testArgs(i16, i96, -1); + try testArgs(i16, i96, 0); + try testArgs(u16, i96, -1 << 95); + try testArgs(u16, i96, -1); + try testArgs(u16, i96, 0); + try testArgs(i32, i96, -1 << 95); + try testArgs(i32, i96, -1); + try testArgs(i32, i96, 0); + try testArgs(u32, i96, -1 << 95); + try testArgs(u32, i96, -1); + try testArgs(u32, i96, 0); + try testArgs(i64, i96, -1 << 95); + try testArgs(i64, i96, -1); + try testArgs(i64, i96, 0); + try testArgs(u64, i96, -1 << 95); + try testArgs(u64, i96, -1); + try testArgs(u64, i96, 0); + try testArgs(i128, i96, -1 << 95); + try testArgs(i128, i96, -1); + try testArgs(i128, i96, 0); + try testArgs(u128, i96, -1 << 95); + try testArgs(u128, i96, -1); + try testArgs(u128, i96, 0); + try testArgs(i256, i96, -1 << 95); + try testArgs(i256, i96, -1); + try testArgs(i256, i96, 0); + try testArgs(u256, i96, -1 << 95); + try testArgs(u256, i96, -1); + try testArgs(u256, i96, 0); + try testArgs(i512, i96, -1 << 95); + try testArgs(i512, i96, -1); + try testArgs(i512, i96, 0); + try testArgs(u512, i96, -1 << 95); + try testArgs(u512, i96, -1); + try testArgs(u512, i96, 0); + try testArgs(i1024, i96, -1 << 95); + try testArgs(i1024, i96, -1); + try testArgs(i1024, 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(u8, u96, 0); + try testArgs(u8, u96, 1 << 0); + try testArgs(u8, u96, 1 << 95); + try testArgs(i16, u96, 0); + try testArgs(i16, u96, 1 << 0); + try testArgs(i16, u96, 1 << 95); + try testArgs(u16, u96, 0); + try testArgs(u16, u96, 1 << 0); + try testArgs(u16, u96, 1 << 95); + try testArgs(i32, u96, 0); + try testArgs(i32, u96, 1 << 0); + try testArgs(i32, u96, 1 << 95); + try testArgs(u32, u96, 0); + try testArgs(u32, u96, 1 << 0); + try testArgs(u32, u96, 1 << 95); + try testArgs(i64, u96, 0); + try testArgs(i64, u96, 1 << 0); + try testArgs(i64, u96, 1 << 95); + try testArgs(u64, u96, 0); + try testArgs(u64, u96, 1 << 0); + try testArgs(u64, u96, 1 << 95); + try testArgs(i128, u96, 0); + try testArgs(i128, u96, 1 << 0); + try testArgs(i128, u96, 1 << 95); + try testArgs(u128, u96, 0); + try testArgs(u128, u96, 1 << 0); + try testArgs(u128, u96, 1 << 95); + try testArgs(i256, u96, 0); + try testArgs(i256, u96, 1 << 0); + try testArgs(i256, u96, 1 << 95); + try testArgs(u256, u96, 0); + try testArgs(u256, u96, 1 << 0); + try testArgs(u256, u96, 1 << 95); + try testArgs(i512, u96, 0); + try testArgs(i512, u96, 1 << 0); + try testArgs(i512, u96, 1 << 95); + try testArgs(u512, u96, 0); + try testArgs(u512, u96, 1 << 0); + try testArgs(u512, u96, 1 << 95); + try testArgs(i1024, u96, 0); + try testArgs(i1024, u96, 1 << 0); + try testArgs(i1024, u96, 1 << 95); + try testArgs(u1024, u96, 0); + try testArgs(u1024, u96, 1 << 0); + try testArgs(u1024, u96, 1 << 95); + + try testArgs(i8, i97, -1 << 96); + try testArgs(i8, i97, -1); + try testArgs(i8, i97, 0); + try testArgs(u8, i97, -1 << 96); + try testArgs(u8, i97, -1); + try testArgs(u8, i97, 0); + try testArgs(i16, i97, -1 << 96); + try testArgs(i16, i97, -1); + try testArgs(i16, i97, 0); + try testArgs(u16, i97, -1 << 96); + try testArgs(u16, i97, -1); + try testArgs(u16, i97, 0); + try testArgs(i32, i97, -1 << 96); + try testArgs(i32, i97, -1); + try testArgs(i32, i97, 0); + try testArgs(u32, i97, -1 << 96); + try testArgs(u32, i97, -1); + try testArgs(u32, i97, 0); + try testArgs(i64, i97, -1 << 96); + try testArgs(i64, i97, -1); + try testArgs(i64, i97, 0); + try testArgs(u64, i97, -1 << 96); + try testArgs(u64, i97, -1); + try testArgs(u64, i97, 0); + try testArgs(i128, i97, -1 << 96); + try testArgs(i128, i97, -1); + try testArgs(i128, i97, 0); + try testArgs(u128, i97, -1 << 96); + try testArgs(u128, i97, -1); + try testArgs(u128, i97, 0); + try testArgs(i256, i97, -1 << 96); + try testArgs(i256, i97, -1); + try testArgs(i256, i97, 0); + try testArgs(u256, i97, -1 << 96); + try testArgs(u256, i97, -1); + try testArgs(u256, i97, 0); + try testArgs(i512, i97, -1 << 96); + try testArgs(i512, i97, -1); + try testArgs(i512, i97, 0); + try testArgs(u512, i97, -1 << 96); + try testArgs(u512, i97, -1); + try testArgs(u512, i97, 0); + try testArgs(i1024, i97, -1 << 96); + try testArgs(i1024, i97, -1); + try testArgs(i1024, 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(u8, u97, 0); + try testArgs(u8, u97, 1 << 0); + try testArgs(u8, u97, 1 << 96); + try testArgs(i16, u97, 0); + try testArgs(i16, u97, 1 << 0); + try testArgs(i16, u97, 1 << 96); + try testArgs(u16, u97, 0); + try testArgs(u16, u97, 1 << 0); + try testArgs(u16, u97, 1 << 96); + try testArgs(i32, u97, 0); + try testArgs(i32, u97, 1 << 0); + try testArgs(i32, u97, 1 << 96); + try testArgs(u32, u97, 0); + try testArgs(u32, u97, 1 << 0); + try testArgs(u32, u97, 1 << 96); + try testArgs(i64, u97, 0); + try testArgs(i64, u97, 1 << 0); + try testArgs(i64, u97, 1 << 96); + try testArgs(u64, u97, 0); + try testArgs(u64, u97, 1 << 0); + try testArgs(u64, u97, 1 << 96); + try testArgs(i128, u97, 0); + try testArgs(i128, u97, 1 << 0); + try testArgs(i128, u97, 1 << 96); + try testArgs(u128, u97, 0); + try testArgs(u128, u97, 1 << 0); + try testArgs(u128, u97, 1 << 96); + try testArgs(i256, u97, 0); + try testArgs(i256, u97, 1 << 0); + try testArgs(i256, u97, 1 << 96); + try testArgs(u256, u97, 0); + try testArgs(u256, u97, 1 << 0); + try testArgs(u256, u97, 1 << 96); + try testArgs(i512, u97, 0); + try testArgs(i512, u97, 1 << 0); + try testArgs(i512, u97, 1 << 96); + try testArgs(u512, u97, 0); + try testArgs(u512, u97, 1 << 0); + try testArgs(u512, u97, 1 << 96); + try testArgs(i1024, u97, 0); + try testArgs(i1024, u97, 1 << 0); + try testArgs(i1024, 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(u8, i127, -1 << 126); + try testArgs(u8, i127, -1); + try testArgs(u8, i127, 0); + try testArgs(i16, i127, -1 << 126); + try testArgs(i16, i127, -1); + try testArgs(i16, i127, 0); + try testArgs(u16, i127, -1 << 126); + try testArgs(u16, i127, -1); + try testArgs(u16, i127, 0); + try testArgs(i32, i127, -1 << 126); + try testArgs(i32, i127, -1); + try testArgs(i32, i127, 0); + try testArgs(u32, i127, -1 << 126); + try testArgs(u32, i127, -1); + try testArgs(u32, i127, 0); + try testArgs(i64, i127, -1 << 126); + try testArgs(i64, i127, -1); + try testArgs(i64, i127, 0); + try testArgs(u64, i127, -1 << 126); + try testArgs(u64, i127, -1); + try testArgs(u64, i127, 0); + try testArgs(i128, i127, -1 << 126); + try testArgs(i128, i127, -1); + try testArgs(i128, i127, 0); + try testArgs(u128, i127, -1 << 126); + try testArgs(u128, i127, -1); + try testArgs(u128, i127, 0); + try testArgs(i256, i127, -1 << 126); + try testArgs(i256, i127, -1); + try testArgs(i256, i127, 0); + try testArgs(u256, i127, -1 << 126); + try testArgs(u256, i127, -1); + try testArgs(u256, i127, 0); + try testArgs(i512, i127, -1 << 126); + try testArgs(i512, i127, -1); + try testArgs(i512, i127, 0); + try testArgs(u512, i127, -1 << 126); + try testArgs(u512, i127, -1); + try testArgs(u512, i127, 0); + try testArgs(i1024, i127, -1 << 126); + try testArgs(i1024, i127, -1); + try testArgs(i1024, 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(u8, u127, 0); + try testArgs(u8, u127, 1 << 0); + try testArgs(u8, u127, 1 << 126); + try testArgs(i16, u127, 0); + try testArgs(i16, u127, 1 << 0); + try testArgs(i16, u127, 1 << 126); + try testArgs(u16, u127, 0); + try testArgs(u16, u127, 1 << 0); + try testArgs(u16, u127, 1 << 126); + try testArgs(i32, u127, 0); + try testArgs(i32, u127, 1 << 0); + try testArgs(i32, u127, 1 << 126); + try testArgs(u32, u127, 0); + try testArgs(u32, u127, 1 << 0); + try testArgs(u32, u127, 1 << 126); + try testArgs(i64, u127, 0); + try testArgs(i64, u127, 1 << 0); + try testArgs(i64, u127, 1 << 126); + try testArgs(u64, u127, 0); + try testArgs(u64, u127, 1 << 0); + try testArgs(u64, u127, 1 << 126); + try testArgs(i128, u127, 0); + try testArgs(i128, u127, 1 << 0); + try testArgs(i128, u127, 1 << 126); + try testArgs(u128, u127, 0); + try testArgs(u128, u127, 1 << 0); + try testArgs(u128, u127, 1 << 126); + try testArgs(i256, u127, 0); + try testArgs(i256, u127, 1 << 0); + try testArgs(i256, u127, 1 << 126); + try testArgs(u256, u127, 0); + try testArgs(u256, u127, 1 << 0); + try testArgs(u256, u127, 1 << 126); + try testArgs(i512, u127, 0); + try testArgs(i512, u127, 1 << 0); + try testArgs(i512, u127, 1 << 126); + try testArgs(u512, u127, 0); + try testArgs(u512, u127, 1 << 0); + try testArgs(u512, u127, 1 << 126); + try testArgs(i1024, u127, 0); + try testArgs(i1024, u127, 1 << 0); + try testArgs(i1024, 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(u8, i128, -1 << 127); + try testArgs(u8, i128, -1); + try testArgs(u8, i128, 0); + try testArgs(i16, i128, -1 << 127); + try testArgs(i16, i128, -1); + try testArgs(i16, i128, 0); + try testArgs(u16, i128, -1 << 127); + try testArgs(u16, i128, -1); + try testArgs(u16, i128, 0); + try testArgs(i32, i128, -1 << 127); + try testArgs(i32, i128, -1); + try testArgs(i32, i128, 0); + try testArgs(u32, i128, -1 << 127); + try testArgs(u32, i128, -1); + try testArgs(u32, i128, 0); + try testArgs(i64, i128, -1 << 127); + try testArgs(i64, i128, -1); + try testArgs(i64, i128, 0); + try testArgs(u64, i128, -1 << 127); + try testArgs(u64, i128, -1); + try testArgs(u64, i128, 0); + try testArgs(i128, i128, -1 << 127); + try testArgs(i128, i128, -1); + try testArgs(i128, i128, 0); + try testArgs(u128, i128, -1 << 127); + try testArgs(u128, i128, -1); + try testArgs(u128, i128, 0); + try testArgs(i256, i128, -1 << 127); + try testArgs(i256, i128, -1); + try testArgs(i256, i128, 0); + try testArgs(u256, i128, -1 << 127); + try testArgs(u256, i128, -1); + try testArgs(u256, i128, 0); + try testArgs(i512, i128, -1 << 127); + try testArgs(i512, i128, -1); + try testArgs(i512, i128, 0); + try testArgs(u512, i128, -1 << 127); + try testArgs(u512, i128, -1); + try testArgs(u512, i128, 0); + try testArgs(i1024, i128, -1 << 127); + try testArgs(i1024, i128, -1); + try testArgs(i1024, 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(u8, u128, 0); + try testArgs(u8, u128, 1 << 0); + try testArgs(u8, u128, 1 << 127); + try testArgs(i16, u128, 0); + try testArgs(i16, u128, 1 << 0); + try testArgs(i16, u128, 1 << 127); + try testArgs(u16, u128, 0); + try testArgs(u16, u128, 1 << 0); + try testArgs(u16, u128, 1 << 127); + try testArgs(i32, u128, 0); + try testArgs(i32, u128, 1 << 0); + try testArgs(i32, u128, 1 << 127); + try testArgs(u32, u128, 0); + try testArgs(u32, u128, 1 << 0); + try testArgs(u32, u128, 1 << 127); + try testArgs(i64, u128, 0); + try testArgs(i64, u128, 1 << 0); + try testArgs(i64, u128, 1 << 127); + try testArgs(u64, u128, 0); + try testArgs(u64, u128, 1 << 0); + try testArgs(u64, u128, 1 << 127); + try testArgs(i128, u128, 0); + try testArgs(i128, u128, 1 << 0); + try testArgs(i128, u128, 1 << 127); + try testArgs(u128, u128, 0); + try testArgs(u128, u128, 1 << 0); + try testArgs(u128, u128, 1 << 127); + try testArgs(i256, u128, 0); + try testArgs(i256, u128, 1 << 0); + try testArgs(i256, u128, 1 << 127); + try testArgs(u256, u128, 0); + try testArgs(u256, u128, 1 << 0); + try testArgs(u256, u128, 1 << 127); + try testArgs(i512, u128, 0); + try testArgs(i512, u128, 1 << 0); + try testArgs(i512, u128, 1 << 127); + try testArgs(u512, u128, 0); + try testArgs(u512, u128, 1 << 0); + try testArgs(u512, u128, 1 << 127); + try testArgs(i1024, u128, 0); + try testArgs(i1024, u128, 1 << 0); + try testArgs(i1024, 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(u8, i129, -1 << 128); + try testArgs(u8, i129, -1); + try testArgs(u8, i129, 0); + try testArgs(i16, i129, -1 << 128); + try testArgs(i16, i129, -1); + try testArgs(i16, i129, 0); + try testArgs(u16, i129, -1 << 128); + try testArgs(u16, i129, -1); + try testArgs(u16, i129, 0); + try testArgs(i32, i129, -1 << 128); + try testArgs(i32, i129, -1); + try testArgs(i32, i129, 0); + try testArgs(u32, i129, -1 << 128); + try testArgs(u32, i129, -1); + try testArgs(u32, i129, 0); + try testArgs(i64, i129, -1 << 128); + try testArgs(i64, i129, -1); + try testArgs(i64, i129, 0); + try testArgs(u64, i129, -1 << 128); + try testArgs(u64, i129, -1); + try testArgs(u64, i129, 0); + try testArgs(i128, i129, -1 << 128); + try testArgs(i128, i129, -1); + try testArgs(i128, i129, 0); + try testArgs(u128, i129, -1 << 128); + try testArgs(u128, i129, -1); + try testArgs(u128, i129, 0); + try testArgs(i256, i129, -1 << 128); + try testArgs(i256, i129, -1); + try testArgs(i256, i129, 0); + try testArgs(u256, i129, -1 << 128); + try testArgs(u256, i129, -1); + try testArgs(u256, i129, 0); + try testArgs(i512, i129, -1 << 128); + try testArgs(i512, i129, -1); + try testArgs(i512, i129, 0); + try testArgs(u512, i129, -1 << 128); + try testArgs(u512, i129, -1); + try testArgs(u512, i129, 0); + try testArgs(i1024, i129, -1 << 128); + try testArgs(i1024, i129, -1); + try testArgs(i1024, 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(u8, u129, 0); + try testArgs(u8, u129, 1 << 0); + try testArgs(u8, u129, 1 << 128); + try testArgs(i16, u129, 0); + try testArgs(i16, u129, 1 << 0); + try testArgs(i16, u129, 1 << 128); + try testArgs(u16, u129, 0); + try testArgs(u16, u129, 1 << 0); + try testArgs(u16, u129, 1 << 128); + try testArgs(i32, u129, 0); + try testArgs(i32, u129, 1 << 0); + try testArgs(i32, u129, 1 << 128); + try testArgs(u32, u129, 0); + try testArgs(u32, u129, 1 << 0); + try testArgs(u32, u129, 1 << 128); + try testArgs(i64, u129, 0); + try testArgs(i64, u129, 1 << 0); + try testArgs(i64, u129, 1 << 128); + try testArgs(u64, u129, 0); + try testArgs(u64, u129, 1 << 0); + try testArgs(u64, u129, 1 << 128); + try testArgs(i128, u129, 0); + try testArgs(i128, u129, 1 << 0); + try testArgs(i128, u129, 1 << 128); + try testArgs(u128, u129, 0); + try testArgs(u128, u129, 1 << 0); + try testArgs(u128, u129, 1 << 128); + try testArgs(i256, u129, 0); + try testArgs(i256, u129, 1 << 0); + try testArgs(i256, u129, 1 << 128); + try testArgs(u256, u129, 0); + try testArgs(u256, u129, 1 << 0); + try testArgs(u256, u129, 1 << 128); + try testArgs(i512, u129, 0); + try testArgs(i512, u129, 1 << 0); + try testArgs(i512, u129, 1 << 128); + try testArgs(u512, u129, 0); + try testArgs(u512, u129, 1 << 0); + try testArgs(u512, u129, 1 << 128); + try testArgs(i1024, u129, 0); + try testArgs(i1024, u129, 1 << 0); + try testArgs(i1024, u129, 1 << 128); + try testArgs(u1024, u129, 0); + try testArgs(u1024, u129, 1 << 0); + try testArgs(u1024, u129, 1 << 128); + + try testArgs(i8, i159, -1 << 158); + try testArgs(i8, i159, -1); + try testArgs(i8, i159, 0); + try testArgs(u8, i159, -1 << 158); + try testArgs(u8, i159, -1); + try testArgs(u8, i159, 0); + try testArgs(i16, i159, -1 << 158); + try testArgs(i16, i159, -1); + try testArgs(i16, i159, 0); + try testArgs(u16, i159, -1 << 158); + try testArgs(u16, i159, -1); + try testArgs(u16, i159, 0); + try testArgs(i32, i159, -1 << 158); + try testArgs(i32, i159, -1); + try testArgs(i32, i159, 0); + try testArgs(u32, i159, -1 << 158); + try testArgs(u32, i159, -1); + try testArgs(u32, i159, 0); + try testArgs(i64, i159, -1 << 158); + try testArgs(i64, i159, -1); + try testArgs(i64, i159, 0); + try testArgs(u64, i159, -1 << 158); + try testArgs(u64, i159, -1); + try testArgs(u64, i159, 0); + try testArgs(i128, i159, -1 << 158); + try testArgs(i128, i159, -1); + try testArgs(i128, i159, 0); + try testArgs(u128, i159, -1 << 158); + try testArgs(u128, i159, -1); + try testArgs(u128, i159, 0); + try testArgs(i256, i159, -1 << 158); + try testArgs(i256, i159, -1); + try testArgs(i256, i159, 0); + try testArgs(u256, i159, -1 << 158); + try testArgs(u256, i159, -1); + try testArgs(u256, i159, 0); + try testArgs(i512, i159, -1 << 158); + try testArgs(i512, i159, -1); + try testArgs(i512, i159, 0); + try testArgs(u512, i159, -1 << 158); + try testArgs(u512, i159, -1); + try testArgs(u512, i159, 0); + try testArgs(i1024, i159, -1 << 158); + try testArgs(i1024, i159, -1); + try testArgs(i1024, i159, 0); + try testArgs(u1024, i159, -1 << 158); + try testArgs(u1024, i159, -1); + try testArgs(u1024, i159, 0); + try testArgs(i8, u159, 0); + try testArgs(i8, u159, 1 << 0); + try testArgs(i8, u159, 1 << 158); + try testArgs(u8, u159, 0); + try testArgs(u8, u159, 1 << 0); + try testArgs(u8, u159, 1 << 158); + try testArgs(i16, u159, 0); + try testArgs(i16, u159, 1 << 0); + try testArgs(i16, u159, 1 << 158); + try testArgs(u16, u159, 0); + try testArgs(u16, u159, 1 << 0); + try testArgs(u16, u159, 1 << 158); + try testArgs(i32, u159, 0); + try testArgs(i32, u159, 1 << 0); + try testArgs(i32, u159, 1 << 158); + try testArgs(u32, u159, 0); + try testArgs(u32, u159, 1 << 0); + try testArgs(u32, u159, 1 << 158); + try testArgs(i64, u159, 0); + try testArgs(i64, u159, 1 << 0); + try testArgs(i64, u159, 1 << 158); + try testArgs(u64, u159, 0); + try testArgs(u64, u159, 1 << 0); + try testArgs(u64, u159, 1 << 158); + try testArgs(i128, u159, 0); + try testArgs(i128, u159, 1 << 0); + try testArgs(i128, u159, 1 << 158); + try testArgs(u128, u159, 0); + try testArgs(u128, u159, 1 << 0); + try testArgs(u128, u159, 1 << 158); + try testArgs(i256, u159, 0); + try testArgs(i256, u159, 1 << 0); + try testArgs(i256, u159, 1 << 158); + try testArgs(u256, u159, 0); + try testArgs(u256, u159, 1 << 0); + try testArgs(u256, u159, 1 << 158); + try testArgs(i512, u159, 0); + try testArgs(i512, u159, 1 << 0); + try testArgs(i512, u159, 1 << 158); + try testArgs(u512, u159, 0); + try testArgs(u512, u159, 1 << 0); + try testArgs(u512, u159, 1 << 158); + try testArgs(i1024, u159, 0); + try testArgs(i1024, u159, 1 << 0); + try testArgs(i1024, u159, 1 << 158); + try testArgs(u1024, u159, 0); + try testArgs(u1024, u159, 1 << 0); + try testArgs(u1024, u159, 1 << 158); + + try testArgs(i8, i160, -1 << 159); + try testArgs(i8, i160, -1); + try testArgs(i8, i160, 0); + try testArgs(u8, i160, -1 << 159); + try testArgs(u8, i160, -1); + try testArgs(u8, i160, 0); + try testArgs(i16, i160, -1 << 159); + try testArgs(i16, i160, -1); + try testArgs(i16, i160, 0); + try testArgs(u16, i160, -1 << 159); + try testArgs(u16, i160, -1); + try testArgs(u16, i160, 0); + try testArgs(i32, i160, -1 << 159); + try testArgs(i32, i160, -1); + try testArgs(i32, i160, 0); + try testArgs(u32, i160, -1 << 159); + try testArgs(u32, i160, -1); + try testArgs(u32, i160, 0); + try testArgs(i64, i160, -1 << 159); + try testArgs(i64, i160, -1); + try testArgs(i64, i160, 0); + try testArgs(u64, i160, -1 << 159); + try testArgs(u64, i160, -1); + try testArgs(u64, i160, 0); + try testArgs(i128, i160, -1 << 159); + try testArgs(i128, i160, -1); + try testArgs(i128, i160, 0); + try testArgs(u128, i160, -1 << 159); + try testArgs(u128, i160, -1); + try testArgs(u128, i160, 0); + try testArgs(i256, i160, -1 << 159); + try testArgs(i256, i160, -1); + try testArgs(i256, i160, 0); + try testArgs(u256, i160, -1 << 159); + try testArgs(u256, i160, -1); + try testArgs(u256, i160, 0); + try testArgs(i512, i160, -1 << 159); + try testArgs(i512, i160, -1); + try testArgs(i512, i160, 0); + try testArgs(u512, i160, -1 << 159); + try testArgs(u512, i160, -1); + try testArgs(u512, i160, 0); + try testArgs(i1024, i160, -1 << 159); + try testArgs(i1024, i160, -1); + try testArgs(i1024, i160, 0); + try testArgs(u1024, i160, -1 << 159); + try testArgs(u1024, i160, -1); + try testArgs(u1024, i160, 0); + try testArgs(i8, u160, 0); + try testArgs(i8, u160, 1 << 0); + try testArgs(i8, u160, 1 << 159); + try testArgs(u8, u160, 0); + try testArgs(u8, u160, 1 << 0); + try testArgs(u8, u160, 1 << 159); + try testArgs(i16, u160, 0); + try testArgs(i16, u160, 1 << 0); + try testArgs(i16, u160, 1 << 159); + try testArgs(u16, u160, 0); + try testArgs(u16, u160, 1 << 0); + try testArgs(u16, u160, 1 << 159); + try testArgs(i32, u160, 0); + try testArgs(i32, u160, 1 << 0); + try testArgs(i32, u160, 1 << 159); + try testArgs(u32, u160, 0); + try testArgs(u32, u160, 1 << 0); + try testArgs(u32, u160, 1 << 159); + try testArgs(i64, u160, 0); + try testArgs(i64, u160, 1 << 0); + try testArgs(i64, u160, 1 << 159); + try testArgs(u64, u160, 0); + try testArgs(u64, u160, 1 << 0); + try testArgs(u64, u160, 1 << 159); + try testArgs(i128, u160, 0); + try testArgs(i128, u160, 1 << 0); + try testArgs(i128, u160, 1 << 159); + try testArgs(u128, u160, 0); + try testArgs(u128, u160, 1 << 0); + try testArgs(u128, u160, 1 << 159); + try testArgs(i256, u160, 0); + try testArgs(i256, u160, 1 << 0); + try testArgs(i256, u160, 1 << 159); + try testArgs(u256, u160, 0); + try testArgs(u256, u160, 1 << 0); + try testArgs(u256, u160, 1 << 159); + try testArgs(i512, u160, 0); + try testArgs(i512, u160, 1 << 0); + try testArgs(i512, u160, 1 << 159); + try testArgs(u512, u160, 0); + try testArgs(u512, u160, 1 << 0); + try testArgs(u512, u160, 1 << 159); + try testArgs(i1024, u160, 0); + try testArgs(i1024, u160, 1 << 0); + try testArgs(i1024, u160, 1 << 159); + try testArgs(u1024, u160, 0); + try testArgs(u1024, u160, 1 << 0); + try testArgs(u1024, u160, 1 << 159); + + try testArgs(i8, i161, -1 << 160); + try testArgs(i8, i161, -1); + try testArgs(i8, i161, 0); + try testArgs(u8, i161, -1 << 160); + try testArgs(u8, i161, -1); + try testArgs(u8, i161, 0); + try testArgs(i16, i161, -1 << 160); + try testArgs(i16, i161, -1); + try testArgs(i16, i161, 0); + try testArgs(u16, i161, -1 << 160); + try testArgs(u16, i161, -1); + try testArgs(u16, i161, 0); + try testArgs(i32, i161, -1 << 160); + try testArgs(i32, i161, -1); + try testArgs(i32, i161, 0); + try testArgs(u32, i161, -1 << 160); + try testArgs(u32, i161, -1); + try testArgs(u32, i161, 0); + try testArgs(i64, i161, -1 << 160); + try testArgs(i64, i161, -1); + try testArgs(i64, i161, 0); + try testArgs(u64, i161, -1 << 160); + try testArgs(u64, i161, -1); + try testArgs(u64, i161, 0); + try testArgs(i128, i161, -1 << 160); + try testArgs(i128, i161, -1); + try testArgs(i128, i161, 0); + try testArgs(u128, i161, -1 << 160); + try testArgs(u128, i161, -1); + try testArgs(u128, i161, 0); + try testArgs(i256, i161, -1 << 160); + try testArgs(i256, i161, -1); + try testArgs(i256, i161, 0); + try testArgs(u256, i161, -1 << 160); + try testArgs(u256, i161, -1); + try testArgs(u256, i161, 0); + try testArgs(i512, i161, -1 << 160); + try testArgs(i512, i161, -1); + try testArgs(i512, i161, 0); + try testArgs(u512, i161, -1 << 160); + try testArgs(u512, i161, -1); + try testArgs(u512, i161, 0); + try testArgs(i1024, i161, -1 << 160); + try testArgs(i1024, i161, -1); + try testArgs(i1024, i161, 0); + try testArgs(u1024, i161, -1 << 160); + try testArgs(u1024, i161, -1); + try testArgs(u1024, i161, 0); + try testArgs(i8, u161, 0); + try testArgs(i8, u161, 1 << 0); + try testArgs(i8, u161, 1 << 160); + try testArgs(u8, u161, 0); + try testArgs(u8, u161, 1 << 0); + try testArgs(u8, u161, 1 << 160); + try testArgs(i16, u161, 0); + try testArgs(i16, u161, 1 << 0); + try testArgs(i16, u161, 1 << 160); + try testArgs(u16, u161, 0); + try testArgs(u16, u161, 1 << 0); + try testArgs(u16, u161, 1 << 160); + try testArgs(i32, u161, 0); + try testArgs(i32, u161, 1 << 0); + try testArgs(i32, u161, 1 << 160); + try testArgs(u32, u161, 0); + try testArgs(u32, u161, 1 << 0); + try testArgs(u32, u161, 1 << 160); + try testArgs(i64, u161, 0); + try testArgs(i64, u161, 1 << 0); + try testArgs(i64, u161, 1 << 160); + try testArgs(u64, u161, 0); + try testArgs(u64, u161, 1 << 0); + try testArgs(u64, u161, 1 << 160); + try testArgs(i128, u161, 0); + try testArgs(i128, u161, 1 << 0); + try testArgs(i128, u161, 1 << 160); + try testArgs(u128, u161, 0); + try testArgs(u128, u161, 1 << 0); + try testArgs(u128, u161, 1 << 160); + try testArgs(i256, u161, 0); + try testArgs(i256, u161, 1 << 0); + try testArgs(i256, u161, 1 << 160); + try testArgs(u256, u161, 0); + try testArgs(u256, u161, 1 << 0); + try testArgs(u256, u161, 1 << 160); + try testArgs(i512, u161, 0); + try testArgs(i512, u161, 1 << 0); + try testArgs(i512, u161, 1 << 160); + try testArgs(u512, u161, 0); + try testArgs(u512, u161, 1 << 0); + try testArgs(u512, u161, 1 << 160); + try testArgs(i1024, u161, 0); + try testArgs(i1024, u161, 1 << 0); + try testArgs(i1024, u161, 1 << 160); + try testArgs(u1024, u161, 0); + try testArgs(u1024, u161, 1 << 0); + try testArgs(u1024, u161, 1 << 160); + + try testArgs(i8, i191, -1 << 190); + try testArgs(i8, i191, -1); + try testArgs(i8, i191, 0); + try testArgs(u8, i191, -1 << 190); + try testArgs(u8, i191, -1); + try testArgs(u8, i191, 0); + try testArgs(i16, i191, -1 << 190); + try testArgs(i16, i191, -1); + try testArgs(i16, i191, 0); + try testArgs(u16, i191, -1 << 190); + try testArgs(u16, i191, -1); + try testArgs(u16, i191, 0); + try testArgs(i32, i191, -1 << 190); + try testArgs(i32, i191, -1); + try testArgs(i32, i191, 0); + try testArgs(u32, i191, -1 << 190); + try testArgs(u32, i191, -1); + try testArgs(u32, i191, 0); + try testArgs(i64, i191, -1 << 190); + try testArgs(i64, i191, -1); + try testArgs(i64, i191, 0); + try testArgs(u64, i191, -1 << 190); + try testArgs(u64, i191, -1); + try testArgs(u64, i191, 0); + try testArgs(i128, i191, -1 << 190); + try testArgs(i128, i191, -1); + try testArgs(i128, i191, 0); + try testArgs(u128, i191, -1 << 190); + try testArgs(u128, i191, -1); + try testArgs(u128, i191, 0); + try testArgs(i256, i191, -1 << 190); + try testArgs(i256, i191, -1); + try testArgs(i256, i191, 0); + try testArgs(u256, i191, -1 << 190); + try testArgs(u256, i191, -1); + try testArgs(u256, i191, 0); + try testArgs(i512, i191, -1 << 190); + try testArgs(i512, i191, -1); + try testArgs(i512, i191, 0); + try testArgs(u512, i191, -1 << 190); + try testArgs(u512, i191, -1); + try testArgs(u512, i191, 0); + try testArgs(i1024, i191, -1 << 190); + try testArgs(i1024, i191, -1); + try testArgs(i1024, i191, 0); + try testArgs(u1024, i191, -1 << 190); + try testArgs(u1024, i191, -1); + try testArgs(u1024, i191, 0); + try testArgs(i8, u191, 0); + try testArgs(i8, u191, 1 << 0); + try testArgs(i8, u191, 1 << 190); + try testArgs(u8, u191, 0); + try testArgs(u8, u191, 1 << 0); + try testArgs(u8, u191, 1 << 190); + try testArgs(i16, u191, 0); + try testArgs(i16, u191, 1 << 0); + try testArgs(i16, u191, 1 << 190); + try testArgs(u16, u191, 0); + try testArgs(u16, u191, 1 << 0); + try testArgs(u16, u191, 1 << 190); + try testArgs(i32, u191, 0); + try testArgs(i32, u191, 1 << 0); + try testArgs(i32, u191, 1 << 190); + try testArgs(u32, u191, 0); + try testArgs(u32, u191, 1 << 0); + try testArgs(u32, u191, 1 << 190); + try testArgs(i64, u191, 0); + try testArgs(i64, u191, 1 << 0); + try testArgs(i64, u191, 1 << 190); + try testArgs(u64, u191, 0); + try testArgs(u64, u191, 1 << 0); + try testArgs(u64, u191, 1 << 190); + try testArgs(i128, u191, 0); + try testArgs(i128, u191, 1 << 0); + try testArgs(i128, u191, 1 << 190); + try testArgs(u128, u191, 0); + try testArgs(u128, u191, 1 << 0); + try testArgs(u128, u191, 1 << 190); + try testArgs(i256, u191, 0); + try testArgs(i256, u191, 1 << 0); + try testArgs(i256, u191, 1 << 190); + try testArgs(u256, u191, 0); + try testArgs(u256, u191, 1 << 0); + try testArgs(u256, u191, 1 << 190); + try testArgs(i512, u191, 0); + try testArgs(i512, u191, 1 << 0); + try testArgs(i512, u191, 1 << 190); + try testArgs(u512, u191, 0); + try testArgs(u512, u191, 1 << 0); + try testArgs(u512, u191, 1 << 190); + try testArgs(i1024, u191, 0); + try testArgs(i1024, u191, 1 << 0); + try testArgs(i1024, u191, 1 << 190); + try testArgs(u1024, u191, 0); + try testArgs(u1024, u191, 1 << 0); + try testArgs(u1024, u191, 1 << 190); + + try testArgs(i8, i192, -1 << 191); + try testArgs(i8, i192, -1); + try testArgs(i8, i192, 0); + try testArgs(u8, i192, -1 << 191); + try testArgs(u8, i192, -1); + try testArgs(u8, i192, 0); + try testArgs(i16, i192, -1 << 191); + try testArgs(i16, i192, -1); + try testArgs(i16, i192, 0); + try testArgs(u16, i192, -1 << 191); + try testArgs(u16, i192, -1); + try testArgs(u16, i192, 0); + try testArgs(i32, i192, -1 << 191); + try testArgs(i32, i192, -1); + try testArgs(i32, i192, 0); + try testArgs(u32, i192, -1 << 191); + try testArgs(u32, i192, -1); + try testArgs(u32, i192, 0); + try testArgs(i64, i192, -1 << 191); + try testArgs(i64, i192, -1); + try testArgs(i64, i192, 0); + try testArgs(u64, i192, -1 << 191); + try testArgs(u64, i192, -1); + try testArgs(u64, i192, 0); + try testArgs(i128, i192, -1 << 191); + try testArgs(i128, i192, -1); + try testArgs(i128, i192, 0); + try testArgs(u128, i192, -1 << 191); + try testArgs(u128, i192, -1); + try testArgs(u128, i192, 0); + try testArgs(i256, i192, -1 << 191); + try testArgs(i256, i192, -1); + try testArgs(i256, i192, 0); + try testArgs(u256, i192, -1 << 191); + try testArgs(u256, i192, -1); + try testArgs(u256, i192, 0); + try testArgs(i512, i192, -1 << 191); + try testArgs(i512, i192, -1); + try testArgs(i512, i192, 0); + try testArgs(u512, i192, -1 << 191); + try testArgs(u512, i192, -1); + try testArgs(u512, i192, 0); + try testArgs(i1024, i192, -1 << 191); + try testArgs(i1024, i192, -1); + try testArgs(i1024, i192, 0); + try testArgs(u1024, i192, -1 << 191); + try testArgs(u1024, i192, -1); + try testArgs(u1024, i192, 0); + try testArgs(i8, u192, 0); + try testArgs(i8, u192, 1 << 0); + try testArgs(i8, u192, 1 << 191); + try testArgs(u8, u192, 0); + try testArgs(u8, u192, 1 << 0); + try testArgs(u8, u192, 1 << 191); + try testArgs(i16, u192, 0); + try testArgs(i16, u192, 1 << 0); + try testArgs(i16, u192, 1 << 191); + try testArgs(u16, u192, 0); + try testArgs(u16, u192, 1 << 0); + try testArgs(u16, u192, 1 << 191); + try testArgs(i32, u192, 0); + try testArgs(i32, u192, 1 << 0); + try testArgs(i32, u192, 1 << 191); + try testArgs(u32, u192, 0); + try testArgs(u32, u192, 1 << 0); + try testArgs(u32, u192, 1 << 191); + try testArgs(i64, u192, 0); + try testArgs(i64, u192, 1 << 0); + try testArgs(i64, u192, 1 << 191); + try testArgs(u64, u192, 0); + try testArgs(u64, u192, 1 << 0); + try testArgs(u64, u192, 1 << 191); + try testArgs(i128, u192, 0); + try testArgs(i128, u192, 1 << 0); + try testArgs(i128, u192, 1 << 191); + try testArgs(u128, u192, 0); + try testArgs(u128, u192, 1 << 0); + try testArgs(u128, u192, 1 << 191); + try testArgs(i256, u192, 0); + try testArgs(i256, u192, 1 << 0); + try testArgs(i256, u192, 1 << 191); + try testArgs(u256, u192, 0); + try testArgs(u256, u192, 1 << 0); + try testArgs(u256, u192, 1 << 191); + try testArgs(i512, u192, 0); + try testArgs(i512, u192, 1 << 0); + try testArgs(i512, u192, 1 << 191); + try testArgs(u512, u192, 0); + try testArgs(u512, u192, 1 << 0); + try testArgs(u512, u192, 1 << 191); + try testArgs(i1024, u192, 0); + try testArgs(i1024, u192, 1 << 0); + try testArgs(i1024, u192, 1 << 191); + try testArgs(u1024, u192, 0); + try testArgs(u1024, u192, 1 << 0); + try testArgs(u1024, u192, 1 << 191); + + try testArgs(i8, i193, -1 << 192); + try testArgs(i8, i193, -1); + try testArgs(i8, i193, 0); + try testArgs(u8, i193, -1 << 192); + try testArgs(u8, i193, -1); + try testArgs(u8, i193, 0); + try testArgs(i16, i193, -1 << 192); + try testArgs(i16, i193, -1); + try testArgs(i16, i193, 0); + try testArgs(u16, i193, -1 << 192); + try testArgs(u16, i193, -1); + try testArgs(u16, i193, 0); + try testArgs(i32, i193, -1 << 192); + try testArgs(i32, i193, -1); + try testArgs(i32, i193, 0); + try testArgs(u32, i193, -1 << 192); + try testArgs(u32, i193, -1); + try testArgs(u32, i193, 0); + try testArgs(i64, i193, -1 << 192); + try testArgs(i64, i193, -1); + try testArgs(i64, i193, 0); + try testArgs(u64, i193, -1 << 192); + try testArgs(u64, i193, -1); + try testArgs(u64, i193, 0); + try testArgs(i128, i193, -1 << 192); + try testArgs(i128, i193, -1); + try testArgs(i128, i193, 0); + try testArgs(u128, i193, -1 << 192); + try testArgs(u128, i193, -1); + try testArgs(u128, i193, 0); + try testArgs(i256, i193, -1 << 192); + try testArgs(i256, i193, -1); + try testArgs(i256, i193, 0); + try testArgs(u256, i193, -1 << 192); + try testArgs(u256, i193, -1); + try testArgs(u256, i193, 0); + try testArgs(i512, i193, -1 << 192); + try testArgs(i512, i193, -1); + try testArgs(i512, i193, 0); + try testArgs(u512, i193, -1 << 192); + try testArgs(u512, i193, -1); + try testArgs(u512, i193, 0); + try testArgs(i1024, i193, -1 << 192); + try testArgs(i1024, i193, -1); + try testArgs(i1024, i193, 0); + try testArgs(u1024, i193, -1 << 192); + try testArgs(u1024, i193, -1); + try testArgs(u1024, i193, 0); + try testArgs(i8, u193, 0); + try testArgs(i8, u193, 1 << 0); + try testArgs(i8, u193, 1 << 192); + try testArgs(u8, u193, 0); + try testArgs(u8, u193, 1 << 0); + try testArgs(u8, u193, 1 << 192); + try testArgs(i16, u193, 0); + try testArgs(i16, u193, 1 << 0); + try testArgs(i16, u193, 1 << 192); + try testArgs(u16, u193, 0); + try testArgs(u16, u193, 1 << 0); + try testArgs(u16, u193, 1 << 192); + try testArgs(i32, u193, 0); + try testArgs(i32, u193, 1 << 0); + try testArgs(i32, u193, 1 << 192); + try testArgs(u32, u193, 0); + try testArgs(u32, u193, 1 << 0); + try testArgs(u32, u193, 1 << 192); + try testArgs(i64, u193, 0); + try testArgs(i64, u193, 1 << 0); + try testArgs(i64, u193, 1 << 192); + try testArgs(u64, u193, 0); + try testArgs(u64, u193, 1 << 0); + try testArgs(u64, u193, 1 << 192); + try testArgs(i128, u193, 0); + try testArgs(i128, u193, 1 << 0); + try testArgs(i128, u193, 1 << 192); + try testArgs(u128, u193, 0); + try testArgs(u128, u193, 1 << 0); + try testArgs(u128, u193, 1 << 192); + try testArgs(i256, u193, 0); + try testArgs(i256, u193, 1 << 0); + try testArgs(i256, u193, 1 << 192); + try testArgs(u256, u193, 0); + try testArgs(u256, u193, 1 << 0); + try testArgs(u256, u193, 1 << 192); + try testArgs(i512, u193, 0); + try testArgs(i512, u193, 1 << 0); + try testArgs(i512, u193, 1 << 192); + try testArgs(u512, u193, 0); + try testArgs(u512, u193, 1 << 0); + try testArgs(u512, u193, 1 << 192); + try testArgs(i1024, u193, 0); + try testArgs(i1024, u193, 1 << 0); + try testArgs(i1024, u193, 1 << 192); + try testArgs(u1024, u193, 0); + try testArgs(u1024, u193, 1 << 0); + try testArgs(u1024, u193, 1 << 192); + + try testArgs(i8, i223, -1 << 222); + try testArgs(i8, i223, -1); + try testArgs(i8, i223, 0); + try testArgs(u8, i223, -1 << 222); + try testArgs(u8, i223, -1); + try testArgs(u8, i223, 0); + try testArgs(i16, i223, -1 << 222); + try testArgs(i16, i223, -1); + try testArgs(i16, i223, 0); + try testArgs(u16, i223, -1 << 222); + try testArgs(u16, i223, -1); + try testArgs(u16, i223, 0); + try testArgs(i32, i223, -1 << 222); + try testArgs(i32, i223, -1); + try testArgs(i32, i223, 0); + try testArgs(u32, i223, -1 << 222); + try testArgs(u32, i223, -1); + try testArgs(u32, i223, 0); + try testArgs(i64, i223, -1 << 222); + try testArgs(i64, i223, -1); + try testArgs(i64, i223, 0); + try testArgs(u64, i223, -1 << 222); + try testArgs(u64, i223, -1); + try testArgs(u64, i223, 0); + try testArgs(i128, i223, -1 << 222); + try testArgs(i128, i223, -1); + try testArgs(i128, i223, 0); + try testArgs(u128, i223, -1 << 222); + try testArgs(u128, i223, -1); + try testArgs(u128, i223, 0); + try testArgs(i256, i223, -1 << 222); + try testArgs(i256, i223, -1); + try testArgs(i256, i223, 0); + try testArgs(u256, i223, -1 << 222); + try testArgs(u256, i223, -1); + try testArgs(u256, i223, 0); + try testArgs(i512, i223, -1 << 222); + try testArgs(i512, i223, -1); + try testArgs(i512, i223, 0); + try testArgs(u512, i223, -1 << 222); + try testArgs(u512, i223, -1); + try testArgs(u512, i223, 0); + try testArgs(i1024, i223, -1 << 222); + try testArgs(i1024, i223, -1); + try testArgs(i1024, i223, 0); + try testArgs(u1024, i223, -1 << 222); + try testArgs(u1024, i223, -1); + try testArgs(u1024, i223, 0); + try testArgs(i8, u223, 0); + try testArgs(i8, u223, 1 << 0); + try testArgs(i8, u223, 1 << 222); + try testArgs(u8, u223, 0); + try testArgs(u8, u223, 1 << 0); + try testArgs(u8, u223, 1 << 222); + try testArgs(i16, u223, 0); + try testArgs(i16, u223, 1 << 0); + try testArgs(i16, u223, 1 << 222); + try testArgs(u16, u223, 0); + try testArgs(u16, u223, 1 << 0); + try testArgs(u16, u223, 1 << 222); + try testArgs(i32, u223, 0); + try testArgs(i32, u223, 1 << 0); + try testArgs(i32, u223, 1 << 222); + try testArgs(u32, u223, 0); + try testArgs(u32, u223, 1 << 0); + try testArgs(u32, u223, 1 << 222); + try testArgs(i64, u223, 0); + try testArgs(i64, u223, 1 << 0); + try testArgs(i64, u223, 1 << 222); + try testArgs(u64, u223, 0); + try testArgs(u64, u223, 1 << 0); + try testArgs(u64, u223, 1 << 222); + try testArgs(i128, u223, 0); + try testArgs(i128, u223, 1 << 0); + try testArgs(i128, u223, 1 << 222); + try testArgs(u128, u223, 0); + try testArgs(u128, u223, 1 << 0); + try testArgs(u128, u223, 1 << 222); + try testArgs(i256, u223, 0); + try testArgs(i256, u223, 1 << 0); + try testArgs(i256, u223, 1 << 222); + try testArgs(u256, u223, 0); + try testArgs(u256, u223, 1 << 0); + try testArgs(u256, u223, 1 << 222); + try testArgs(i512, u223, 0); + try testArgs(i512, u223, 1 << 0); + try testArgs(i512, u223, 1 << 222); + try testArgs(u512, u223, 0); + try testArgs(u512, u223, 1 << 0); + try testArgs(u512, u223, 1 << 222); + try testArgs(i1024, u223, 0); + try testArgs(i1024, u223, 1 << 0); + try testArgs(i1024, u223, 1 << 222); + try testArgs(u1024, u223, 0); + try testArgs(u1024, u223, 1 << 0); + try testArgs(u1024, u223, 1 << 222); + + try testArgs(i8, i224, -1 << 223); + try testArgs(i8, i224, -1); + try testArgs(i8, i224, 0); + try testArgs(u8, i224, -1 << 223); + try testArgs(u8, i224, -1); + try testArgs(u8, i224, 0); + try testArgs(i16, i224, -1 << 223); + try testArgs(i16, i224, -1); + try testArgs(i16, i224, 0); + try testArgs(u16, i224, -1 << 223); + try testArgs(u16, i224, -1); + try testArgs(u16, i224, 0); + try testArgs(i32, i224, -1 << 223); + try testArgs(i32, i224, -1); + try testArgs(i32, i224, 0); + try testArgs(u32, i224, -1 << 223); + try testArgs(u32, i224, -1); + try testArgs(u32, i224, 0); + try testArgs(i64, i224, -1 << 223); + try testArgs(i64, i224, -1); + try testArgs(i64, i224, 0); + try testArgs(u64, i224, -1 << 223); + try testArgs(u64, i224, -1); + try testArgs(u64, i224, 0); + try testArgs(i128, i224, -1 << 223); + try testArgs(i128, i224, -1); + try testArgs(i128, i224, 0); + try testArgs(u128, i224, -1 << 223); + try testArgs(u128, i224, -1); + try testArgs(u128, i224, 0); + try testArgs(i256, i224, -1 << 223); + try testArgs(i256, i224, -1); + try testArgs(i256, i224, 0); + try testArgs(u256, i224, -1 << 223); + try testArgs(u256, i224, -1); + try testArgs(u256, i224, 0); + try testArgs(i512, i224, -1 << 223); + try testArgs(i512, i224, -1); + try testArgs(i512, i224, 0); + try testArgs(u512, i224, -1 << 223); + try testArgs(u512, i224, -1); + try testArgs(u512, i224, 0); + try testArgs(i1024, i224, -1 << 223); + try testArgs(i1024, i224, -1); + try testArgs(i1024, i224, 0); + try testArgs(u1024, i224, -1 << 223); + try testArgs(u1024, i224, -1); + try testArgs(u1024, i224, 0); + try testArgs(i8, u224, 0); + try testArgs(i8, u224, 1 << 0); + try testArgs(i8, u224, 1 << 223); + try testArgs(u8, u224, 0); + try testArgs(u8, u224, 1 << 0); + try testArgs(u8, u224, 1 << 223); + try testArgs(i16, u224, 0); + try testArgs(i16, u224, 1 << 0); + try testArgs(i16, u224, 1 << 223); + try testArgs(u16, u224, 0); + try testArgs(u16, u224, 1 << 0); + try testArgs(u16, u224, 1 << 223); + try testArgs(i32, u224, 0); + try testArgs(i32, u224, 1 << 0); + try testArgs(i32, u224, 1 << 223); + try testArgs(u32, u224, 0); + try testArgs(u32, u224, 1 << 0); + try testArgs(u32, u224, 1 << 223); + try testArgs(i64, u224, 0); + try testArgs(i64, u224, 1 << 0); + try testArgs(i64, u224, 1 << 223); + try testArgs(u64, u224, 0); + try testArgs(u64, u224, 1 << 0); + try testArgs(u64, u224, 1 << 223); + try testArgs(i128, u224, 0); + try testArgs(i128, u224, 1 << 0); + try testArgs(i128, u224, 1 << 223); + try testArgs(u128, u224, 0); + try testArgs(u128, u224, 1 << 0); + try testArgs(u128, u224, 1 << 223); + try testArgs(i256, u224, 0); + try testArgs(i256, u224, 1 << 0); + try testArgs(i256, u224, 1 << 223); + try testArgs(u256, u224, 0); + try testArgs(u256, u224, 1 << 0); + try testArgs(u256, u224, 1 << 223); + try testArgs(i512, u224, 0); + try testArgs(i512, u224, 1 << 0); + try testArgs(i512, u224, 1 << 223); + try testArgs(u512, u224, 0); + try testArgs(u512, u224, 1 << 0); + try testArgs(u512, u224, 1 << 223); + try testArgs(i1024, u224, 0); + try testArgs(i1024, u224, 1 << 0); + try testArgs(i1024, u224, 1 << 223); + try testArgs(u1024, u224, 0); + try testArgs(u1024, u224, 1 << 0); + try testArgs(u1024, u224, 1 << 223); + + try testArgs(i8, i225, -1 << 224); + try testArgs(i8, i225, -1); + try testArgs(i8, i225, 0); + try testArgs(u8, i225, -1 << 224); + try testArgs(u8, i225, -1); + try testArgs(u8, i225, 0); + try testArgs(i16, i225, -1 << 224); + try testArgs(i16, i225, -1); + try testArgs(i16, i225, 0); + try testArgs(u16, i225, -1 << 224); + try testArgs(u16, i225, -1); + try testArgs(u16, i225, 0); + try testArgs(i32, i225, -1 << 224); + try testArgs(i32, i225, -1); + try testArgs(i32, i225, 0); + try testArgs(u32, i225, -1 << 224); + try testArgs(u32, i225, -1); + try testArgs(u32, i225, 0); + try testArgs(i64, i225, -1 << 224); + try testArgs(i64, i225, -1); + try testArgs(i64, i225, 0); + try testArgs(u64, i225, -1 << 224); + try testArgs(u64, i225, -1); + try testArgs(u64, i225, 0); + try testArgs(i128, i225, -1 << 224); + try testArgs(i128, i225, -1); + try testArgs(i128, i225, 0); + try testArgs(u128, i225, -1 << 224); + try testArgs(u128, i225, -1); + try testArgs(u128, i225, 0); + try testArgs(i256, i225, -1 << 224); + try testArgs(i256, i225, -1); + try testArgs(i256, i225, 0); + try testArgs(u256, i225, -1 << 224); + try testArgs(u256, i225, -1); + try testArgs(u256, i225, 0); + try testArgs(i512, i225, -1 << 224); + try testArgs(i512, i225, -1); + try testArgs(i512, i225, 0); + try testArgs(u512, i225, -1 << 224); + try testArgs(u512, i225, -1); + try testArgs(u512, i225, 0); + try testArgs(i1024, i225, -1 << 224); + try testArgs(i1024, i225, -1); + try testArgs(i1024, i225, 0); + try testArgs(u1024, i225, -1 << 224); + try testArgs(u1024, i225, -1); + try testArgs(u1024, i225, 0); + try testArgs(i8, u225, 0); + try testArgs(i8, u225, 1 << 0); + try testArgs(i8, u225, 1 << 224); + try testArgs(u8, u225, 0); + try testArgs(u8, u225, 1 << 0); + try testArgs(u8, u225, 1 << 224); + try testArgs(i16, u225, 0); + try testArgs(i16, u225, 1 << 0); + try testArgs(i16, u225, 1 << 224); + try testArgs(u16, u225, 0); + try testArgs(u16, u225, 1 << 0); + try testArgs(u16, u225, 1 << 224); + try testArgs(i32, u225, 0); + try testArgs(i32, u225, 1 << 0); + try testArgs(i32, u225, 1 << 224); + try testArgs(u32, u225, 0); + try testArgs(u32, u225, 1 << 0); + try testArgs(u32, u225, 1 << 224); + try testArgs(i64, u225, 0); + try testArgs(i64, u225, 1 << 0); + try testArgs(i64, u225, 1 << 224); + try testArgs(u64, u225, 0); + try testArgs(u64, u225, 1 << 0); + try testArgs(u64, u225, 1 << 224); + try testArgs(i128, u225, 0); + try testArgs(i128, u225, 1 << 0); + try testArgs(i128, u225, 1 << 224); + try testArgs(u128, u225, 0); + try testArgs(u128, u225, 1 << 0); + try testArgs(u128, u225, 1 << 224); + try testArgs(i256, u225, 0); + try testArgs(i256, u225, 1 << 0); + try testArgs(i256, u225, 1 << 224); + try testArgs(u256, u225, 0); + try testArgs(u256, u225, 1 << 0); + try testArgs(u256, u225, 1 << 224); + try testArgs(i512, u225, 0); + try testArgs(i512, u225, 1 << 0); + try testArgs(i512, u225, 1 << 224); + try testArgs(u512, u225, 0); + try testArgs(u512, u225, 1 << 0); + try testArgs(u512, u225, 1 << 224); + try testArgs(i1024, u225, 0); + try testArgs(i1024, u225, 1 << 0); + try testArgs(i1024, u225, 1 << 224); + try testArgs(u1024, u225, 0); + try testArgs(u1024, u225, 1 << 0); + try testArgs(u1024, u225, 1 << 224); + + try testArgs(i8, i255, -1 << 254); + try testArgs(i8, i255, -1); + try testArgs(i8, i255, 0); + try testArgs(u8, i255, -1 << 254); + try testArgs(u8, i255, -1); + try testArgs(u8, i255, 0); + try testArgs(i16, i255, -1 << 254); + try testArgs(i16, i255, -1); + try testArgs(i16, i255, 0); + try testArgs(u16, i255, -1 << 254); + try testArgs(u16, i255, -1); + try testArgs(u16, i255, 0); + try testArgs(i32, i255, -1 << 254); + try testArgs(i32, i255, -1); + try testArgs(i32, i255, 0); + try testArgs(u32, i255, -1 << 254); + try testArgs(u32, i255, -1); + try testArgs(u32, i255, 0); + try testArgs(i64, i255, -1 << 254); + try testArgs(i64, i255, -1); + try testArgs(i64, i255, 0); + try testArgs(u64, i255, -1 << 254); + try testArgs(u64, i255, -1); + try testArgs(u64, i255, 0); + try testArgs(i128, i255, -1 << 254); + try testArgs(i128, i255, -1); + try testArgs(i128, i255, 0); + try testArgs(u128, i255, -1 << 254); + try testArgs(u128, i255, -1); + try testArgs(u128, i255, 0); + try testArgs(i256, i255, -1 << 254); + try testArgs(i256, i255, -1); + try testArgs(i256, i255, 0); + try testArgs(u256, i255, -1 << 254); + try testArgs(u256, i255, -1); + try testArgs(u256, i255, 0); + try testArgs(i512, i255, -1 << 254); + try testArgs(i512, i255, -1); + try testArgs(i512, i255, 0); + try testArgs(u512, i255, -1 << 254); + try testArgs(u512, i255, -1); + try testArgs(u512, i255, 0); + try testArgs(i1024, i255, -1 << 254); + try testArgs(i1024, i255, -1); + try testArgs(i1024, 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(u8, u255, 0); + try testArgs(u8, u255, 1 << 0); + try testArgs(u8, u255, 1 << 254); + try testArgs(i16, u255, 0); + try testArgs(i16, u255, 1 << 0); + try testArgs(i16, u255, 1 << 254); + try testArgs(u16, u255, 0); + try testArgs(u16, u255, 1 << 0); + try testArgs(u16, u255, 1 << 254); + try testArgs(i32, u255, 0); + try testArgs(i32, u255, 1 << 0); + try testArgs(i32, u255, 1 << 254); + try testArgs(u32, u255, 0); + try testArgs(u32, u255, 1 << 0); + try testArgs(u32, u255, 1 << 254); + try testArgs(i64, u255, 0); + try testArgs(i64, u255, 1 << 0); + try testArgs(i64, u255, 1 << 254); + try testArgs(u64, u255, 0); + try testArgs(u64, u255, 1 << 0); + try testArgs(u64, u255, 1 << 254); + try testArgs(i128, u255, 0); + try testArgs(i128, u255, 1 << 0); + try testArgs(i128, u255, 1 << 254); + try testArgs(u128, u255, 0); + try testArgs(u128, u255, 1 << 0); + try testArgs(u128, u255, 1 << 254); + try testArgs(i256, u255, 0); + try testArgs(i256, u255, 1 << 0); + try testArgs(i256, u255, 1 << 254); + try testArgs(u256, u255, 0); + try testArgs(u256, u255, 1 << 0); + try testArgs(u256, u255, 1 << 254); + try testArgs(i512, u255, 0); + try testArgs(i512, u255, 1 << 0); + try testArgs(i512, u255, 1 << 254); + try testArgs(u512, u255, 0); + try testArgs(u512, u255, 1 << 0); + try testArgs(u512, u255, 1 << 254); + try testArgs(i1024, u255, 0); + try testArgs(i1024, u255, 1 << 0); + try testArgs(i1024, 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(u8, i256, -1 << 255); + try testArgs(u8, i256, -1); + try testArgs(u8, i256, 0); + try testArgs(i16, i256, -1 << 255); + try testArgs(i16, i256, -1); + try testArgs(i16, i256, 0); + try testArgs(u16, i256, -1 << 255); + try testArgs(u16, i256, -1); + try testArgs(u16, i256, 0); + try testArgs(i32, i256, -1 << 255); + try testArgs(i32, i256, -1); + try testArgs(i32, i256, 0); + try testArgs(u32, i256, -1 << 255); + try testArgs(u32, i256, -1); + try testArgs(u32, i256, 0); + try testArgs(i64, i256, -1 << 255); + try testArgs(i64, i256, -1); + try testArgs(i64, i256, 0); + try testArgs(u64, i256, -1 << 255); + try testArgs(u64, i256, -1); + try testArgs(u64, i256, 0); + try testArgs(i128, i256, -1 << 255); + try testArgs(i128, i256, -1); + try testArgs(i128, i256, 0); + try testArgs(u128, i256, -1 << 255); + try testArgs(u128, i256, -1); + try testArgs(u128, i256, 0); + try testArgs(i256, i256, -1 << 255); + try testArgs(i256, i256, -1); + try testArgs(i256, i256, 0); + try testArgs(u256, i256, -1 << 255); + try testArgs(u256, i256, -1); + try testArgs(u256, i256, 0); + try testArgs(i512, i256, -1 << 255); + try testArgs(i512, i256, -1); + try testArgs(i512, i256, 0); + try testArgs(u512, i256, -1 << 255); + try testArgs(u512, i256, -1); + try testArgs(u512, i256, 0); + try testArgs(i1024, i256, -1 << 255); + try testArgs(i1024, i256, -1); + try testArgs(i1024, 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(u8, u256, 0); + try testArgs(u8, u256, 1 << 0); + try testArgs(u8, u256, 1 << 255); + try testArgs(i16, u256, 0); + try testArgs(i16, u256, 1 << 0); + try testArgs(i16, u256, 1 << 255); + try testArgs(u16, u256, 0); + try testArgs(u16, u256, 1 << 0); + try testArgs(u16, u256, 1 << 255); + try testArgs(i32, u256, 0); + try testArgs(i32, u256, 1 << 0); + try testArgs(i32, u256, 1 << 255); + try testArgs(u32, u256, 0); + try testArgs(u32, u256, 1 << 0); + try testArgs(u32, u256, 1 << 255); + try testArgs(i64, u256, 0); + try testArgs(i64, u256, 1 << 0); + try testArgs(i64, u256, 1 << 255); + try testArgs(u64, u256, 0); + try testArgs(u64, u256, 1 << 0); + try testArgs(u64, u256, 1 << 255); + try testArgs(i128, u256, 0); + try testArgs(i128, u256, 1 << 0); + try testArgs(i128, u256, 1 << 255); + try testArgs(u128, u256, 0); + try testArgs(u128, u256, 1 << 0); + try testArgs(u128, u256, 1 << 255); + try testArgs(i256, u256, 0); + try testArgs(i256, u256, 1 << 0); + try testArgs(i256, u256, 1 << 255); + try testArgs(u256, u256, 0); + try testArgs(u256, u256, 1 << 0); + try testArgs(u256, u256, 1 << 255); + try testArgs(i512, u256, 0); + try testArgs(i512, u256, 1 << 0); + try testArgs(i512, u256, 1 << 255); + try testArgs(u512, u256, 0); + try testArgs(u512, u256, 1 << 0); + try testArgs(u512, u256, 1 << 255); + try testArgs(i1024, u256, 0); + try testArgs(i1024, u256, 1 << 0); + try testArgs(i1024, 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(u8, i257, -1 << 256); + try testArgs(u8, i257, -1); + try testArgs(u8, i257, 0); + try testArgs(i16, i257, -1 << 256); + try testArgs(i16, i257, -1); + try testArgs(i16, i257, 0); + try testArgs(u16, i257, -1 << 256); + try testArgs(u16, i257, -1); + try testArgs(u16, i257, 0); + try testArgs(i32, i257, -1 << 256); + try testArgs(i32, i257, -1); + try testArgs(i32, i257, 0); + try testArgs(u32, i257, -1 << 256); + try testArgs(u32, i257, -1); + try testArgs(u32, i257, 0); + try testArgs(i64, i257, -1 << 256); + try testArgs(i64, i257, -1); + try testArgs(i64, i257, 0); + try testArgs(u64, i257, -1 << 256); + try testArgs(u64, i257, -1); + try testArgs(u64, i257, 0); + try testArgs(i128, i257, -1 << 256); + try testArgs(i128, i257, -1); + try testArgs(i128, i257, 0); + try testArgs(u128, i257, -1 << 256); + try testArgs(u128, i257, -1); + try testArgs(u128, i257, 0); + try testArgs(i256, i257, -1 << 256); + try testArgs(i256, i257, -1); + try testArgs(i256, i257, 0); + try testArgs(u256, i257, -1 << 256); + try testArgs(u256, i257, -1); + try testArgs(u256, i257, 0); + try testArgs(i512, i257, -1 << 256); + try testArgs(i512, i257, -1); + try testArgs(i512, i257, 0); + try testArgs(u512, i257, -1 << 256); + try testArgs(u512, i257, -1); + try testArgs(u512, i257, 0); + try testArgs(i1024, i257, -1 << 256); + try testArgs(i1024, i257, -1); + try testArgs(i1024, 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(u8, u257, 0); + try testArgs(u8, u257, 1 << 0); + try testArgs(u8, u257, 1 << 256); + try testArgs(i16, u257, 0); + try testArgs(i16, u257, 1 << 0); + try testArgs(i16, u257, 1 << 256); + try testArgs(u16, u257, 0); + try testArgs(u16, u257, 1 << 0); + try testArgs(u16, u257, 1 << 256); + try testArgs(i32, u257, 0); + try testArgs(i32, u257, 1 << 0); + try testArgs(i32, u257, 1 << 256); + try testArgs(u32, u257, 0); + try testArgs(u32, u257, 1 << 0); + try testArgs(u32, u257, 1 << 256); + try testArgs(i64, u257, 0); + try testArgs(i64, u257, 1 << 0); + try testArgs(i64, u257, 1 << 256); + try testArgs(u64, u257, 0); + try testArgs(u64, u257, 1 << 0); + try testArgs(u64, u257, 1 << 256); + try testArgs(i128, u257, 0); + try testArgs(i128, u257, 1 << 0); + try testArgs(i128, u257, 1 << 256); + try testArgs(u128, u257, 0); + try testArgs(u128, u257, 1 << 0); + try testArgs(u128, u257, 1 << 256); + try testArgs(i256, u257, 0); + try testArgs(i256, u257, 1 << 0); + try testArgs(i256, u257, 1 << 256); + try testArgs(u256, u257, 0); + try testArgs(u256, u257, 1 << 0); + try testArgs(u256, u257, 1 << 256); + try testArgs(i512, u257, 0); + try testArgs(i512, u257, 1 << 0); + try testArgs(i512, u257, 1 << 256); + try testArgs(u512, u257, 0); + try testArgs(u512, u257, 1 << 0); + try testArgs(u512, u257, 1 << 256); + try testArgs(i1024, u257, 0); + try testArgs(i1024, u257, 1 << 0); + try testArgs(i1024, 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(u8, i511, -1 << 510); + try testArgs(u8, i511, -1); + try testArgs(u8, i511, 0); + try testArgs(i16, i511, -1 << 510); + try testArgs(i16, i511, -1); + try testArgs(i16, i511, 0); + try testArgs(u16, i511, -1 << 510); + try testArgs(u16, i511, -1); + try testArgs(u16, i511, 0); + try testArgs(i32, i511, -1 << 510); + try testArgs(i32, i511, -1); + try testArgs(i32, i511, 0); + try testArgs(u32, i511, -1 << 510); + try testArgs(u32, i511, -1); + try testArgs(u32, i511, 0); + try testArgs(i64, i511, -1 << 510); + try testArgs(i64, i511, -1); + try testArgs(i64, i511, 0); + try testArgs(u64, i511, -1 << 510); + try testArgs(u64, i511, -1); + try testArgs(u64, i511, 0); + try testArgs(i128, i511, -1 << 510); + try testArgs(i128, i511, -1); + try testArgs(i128, i511, 0); + try testArgs(u128, i511, -1 << 510); + try testArgs(u128, i511, -1); + try testArgs(u128, i511, 0); + try testArgs(i256, i511, -1 << 510); + try testArgs(i256, i511, -1); + try testArgs(i256, i511, 0); + try testArgs(u256, i511, -1 << 510); + try testArgs(u256, i511, -1); + try testArgs(u256, i511, 0); + try testArgs(i512, i511, -1 << 510); + try testArgs(i512, i511, -1); + try testArgs(i512, i511, 0); + try testArgs(u512, i511, -1 << 510); + try testArgs(u512, i511, -1); + try testArgs(u512, i511, 0); + try testArgs(i1024, i511, -1 << 510); + try testArgs(i1024, i511, -1); + try testArgs(i1024, 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(u8, u511, 0); + try testArgs(u8, u511, 1 << 0); + try testArgs(u8, u511, 1 << 510); + try testArgs(i16, u511, 0); + try testArgs(i16, u511, 1 << 0); + try testArgs(i16, u511, 1 << 510); + try testArgs(u16, u511, 0); + try testArgs(u16, u511, 1 << 0); + try testArgs(u16, u511, 1 << 510); + try testArgs(i32, u511, 0); + try testArgs(i32, u511, 1 << 0); + try testArgs(i32, u511, 1 << 510); + try testArgs(u32, u511, 0); + try testArgs(u32, u511, 1 << 0); + try testArgs(u32, u511, 1 << 510); + try testArgs(i64, u511, 0); + try testArgs(i64, u511, 1 << 0); + try testArgs(i64, u511, 1 << 510); + try testArgs(u64, u511, 0); + try testArgs(u64, u511, 1 << 0); + try testArgs(u64, u511, 1 << 510); + try testArgs(i128, u511, 0); + try testArgs(i128, u511, 1 << 0); + try testArgs(i128, u511, 1 << 510); + try testArgs(u128, u511, 0); + try testArgs(u128, u511, 1 << 0); + try testArgs(u128, u511, 1 << 510); + try testArgs(i256, u511, 0); + try testArgs(i256, u511, 1 << 0); + try testArgs(i256, u511, 1 << 510); + try testArgs(u256, u511, 0); + try testArgs(u256, u511, 1 << 0); + try testArgs(u256, u511, 1 << 510); + try testArgs(i512, u511, 0); + try testArgs(i512, u511, 1 << 0); + try testArgs(i512, u511, 1 << 510); + try testArgs(u512, u511, 0); + try testArgs(u512, u511, 1 << 0); + try testArgs(u512, u511, 1 << 510); + try testArgs(i1024, u511, 0); + try testArgs(i1024, u511, 1 << 0); + try testArgs(i1024, 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(u8, i512, -1 << 511); + try testArgs(u8, i512, -1); + try testArgs(u8, i512, 0); + try testArgs(i16, i512, -1 << 511); + try testArgs(i16, i512, -1); + try testArgs(i16, i512, 0); + try testArgs(u16, i512, -1 << 511); + try testArgs(u16, i512, -1); + try testArgs(u16, i512, 0); + try testArgs(i32, i512, -1 << 511); + try testArgs(i32, i512, -1); + try testArgs(i32, i512, 0); + try testArgs(u32, i512, -1 << 511); + try testArgs(u32, i512, -1); + try testArgs(u32, i512, 0); + try testArgs(i64, i512, -1 << 511); + try testArgs(i64, i512, -1); + try testArgs(i64, i512, 0); + try testArgs(u64, i512, -1 << 511); + try testArgs(u64, i512, -1); + try testArgs(u64, i512, 0); + try testArgs(i128, i512, -1 << 511); + try testArgs(i128, i512, -1); + try testArgs(i128, i512, 0); + try testArgs(u128, i512, -1 << 511); + try testArgs(u128, i512, -1); + try testArgs(u128, i512, 0); + try testArgs(i256, i512, -1 << 511); + try testArgs(i256, i512, -1); + try testArgs(i256, i512, 0); + try testArgs(u256, i512, -1 << 511); + try testArgs(u256, i512, -1); + try testArgs(u256, i512, 0); + try testArgs(i512, i512, -1 << 511); + try testArgs(i512, i512, -1); + try testArgs(i512, i512, 0); + try testArgs(u512, i512, -1 << 511); + try testArgs(u512, i512, -1); + try testArgs(u512, i512, 0); + try testArgs(i1024, i512, -1 << 511); + try testArgs(i1024, i512, -1); + try testArgs(i1024, 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(u8, u512, 0); + try testArgs(u8, u512, 1 << 0); + try testArgs(u8, u512, 1 << 511); + try testArgs(i16, u512, 0); + try testArgs(i16, u512, 1 << 0); + try testArgs(i16, u512, 1 << 511); + try testArgs(u16, u512, 0); + try testArgs(u16, u512, 1 << 0); + try testArgs(u16, u512, 1 << 511); + try testArgs(i32, u512, 0); + try testArgs(i32, u512, 1 << 0); + try testArgs(i32, u512, 1 << 511); + try testArgs(u32, u512, 0); + try testArgs(u32, u512, 1 << 0); + try testArgs(u32, u512, 1 << 511); + try testArgs(i64, u512, 0); + try testArgs(i64, u512, 1 << 0); + try testArgs(i64, u512, 1 << 511); + try testArgs(u64, u512, 0); + try testArgs(u64, u512, 1 << 0); + try testArgs(u64, u512, 1 << 511); + try testArgs(i128, u512, 0); + try testArgs(i128, u512, 1 << 0); + try testArgs(i128, u512, 1 << 511); + try testArgs(u128, u512, 0); + try testArgs(u128, u512, 1 << 0); + try testArgs(u128, u512, 1 << 511); + try testArgs(i256, u512, 0); + try testArgs(i256, u512, 1 << 0); + try testArgs(i256, u512, 1 << 511); + try testArgs(u256, u512, 0); + try testArgs(u256, u512, 1 << 0); + try testArgs(u256, u512, 1 << 511); + try testArgs(i512, u512, 0); + try testArgs(i512, u512, 1 << 0); + try testArgs(i512, u512, 1 << 511); + try testArgs(u512, u512, 0); + try testArgs(u512, u512, 1 << 0); + try testArgs(u512, u512, 1 << 511); + try testArgs(i1024, u512, 0); + try testArgs(i1024, u512, 1 << 0); + try testArgs(i1024, 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(u8, i513, -1 << 512); + try testArgs(u8, i513, -1); + try testArgs(u8, i513, 0); + try testArgs(i16, i513, -1 << 512); + try testArgs(i16, i513, -1); + try testArgs(i16, i513, 0); + try testArgs(u16, i513, -1 << 512); + try testArgs(u16, i513, -1); + try testArgs(u16, i513, 0); + try testArgs(i32, i513, -1 << 512); + try testArgs(i32, i513, -1); + try testArgs(i32, i513, 0); + try testArgs(u32, i513, -1 << 512); + try testArgs(u32, i513, -1); + try testArgs(u32, i513, 0); + try testArgs(i64, i513, -1 << 512); + try testArgs(i64, i513, -1); + try testArgs(i64, i513, 0); + try testArgs(u64, i513, -1 << 512); + try testArgs(u64, i513, -1); + try testArgs(u64, i513, 0); + try testArgs(i128, i513, -1 << 512); + try testArgs(i128, i513, -1); + try testArgs(i128, i513, 0); + try testArgs(u128, i513, -1 << 512); + try testArgs(u128, i513, -1); + try testArgs(u128, i513, 0); + try testArgs(i256, i513, -1 << 512); + try testArgs(i256, i513, -1); + try testArgs(i256, i513, 0); + try testArgs(u256, i513, -1 << 512); + try testArgs(u256, i513, -1); + try testArgs(u256, i513, 0); + try testArgs(i512, i513, -1 << 512); + try testArgs(i512, i513, -1); + try testArgs(i512, i513, 0); + try testArgs(u512, i513, -1 << 512); + try testArgs(u512, i513, -1); + try testArgs(u512, i513, 0); + try testArgs(i1024, i513, -1 << 512); + try testArgs(i1024, i513, -1); + try testArgs(i1024, 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(u8, u513, 0); + try testArgs(u8, u513, 1 << 0); + try testArgs(u8, u513, 1 << 512); + try testArgs(i16, u513, 0); + try testArgs(i16, u513, 1 << 0); + try testArgs(i16, u513, 1 << 512); + try testArgs(u16, u513, 0); + try testArgs(u16, u513, 1 << 0); + try testArgs(u16, u513, 1 << 512); + try testArgs(i32, u513, 0); + try testArgs(i32, u513, 1 << 0); + try testArgs(i32, u513, 1 << 512); + try testArgs(u32, u513, 0); + try testArgs(u32, u513, 1 << 0); + try testArgs(u32, u513, 1 << 512); + try testArgs(i64, u513, 0); + try testArgs(i64, u513, 1 << 0); + try testArgs(i64, u513, 1 << 512); + try testArgs(u64, u513, 0); + try testArgs(u64, u513, 1 << 0); + try testArgs(u64, u513, 1 << 512); + try testArgs(i128, u513, 0); + try testArgs(i128, u513, 1 << 0); + try testArgs(i128, u513, 1 << 512); + try testArgs(u128, u513, 0); + try testArgs(u128, u513, 1 << 0); + try testArgs(u128, u513, 1 << 512); + try testArgs(i256, u513, 0); + try testArgs(i256, u513, 1 << 0); + try testArgs(i256, u513, 1 << 512); + try testArgs(u256, u513, 0); + try testArgs(u256, u513, 1 << 0); + try testArgs(u256, u513, 1 << 512); + try testArgs(i512, u513, 0); + try testArgs(i512, u513, 1 << 0); + try testArgs(i512, u513, 1 << 512); + try testArgs(u512, u513, 0); + try testArgs(u512, u513, 1 << 0); + try testArgs(u512, u513, 1 << 512); + try testArgs(i1024, u513, 0); + try testArgs(i1024, u513, 1 << 0); + try testArgs(i1024, 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(u8, i1023, -1 << 1022); + try testArgs(u8, i1023, -1); + try testArgs(u8, i1023, 0); + try testArgs(i16, i1023, -1 << 1022); + try testArgs(i16, i1023, -1); + try testArgs(i16, i1023, 0); + try testArgs(u16, i1023, -1 << 1022); + try testArgs(u16, i1023, -1); + try testArgs(u16, i1023, 0); + try testArgs(i32, i1023, -1 << 1022); + try testArgs(i32, i1023, -1); + try testArgs(i32, i1023, 0); + try testArgs(u32, i1023, -1 << 1022); + try testArgs(u32, i1023, -1); + try testArgs(u32, i1023, 0); + try testArgs(i64, i1023, -1 << 1022); + try testArgs(i64, i1023, -1); + try testArgs(i64, i1023, 0); + try testArgs(u64, i1023, -1 << 1022); + try testArgs(u64, i1023, -1); + try testArgs(u64, i1023, 0); + try testArgs(i128, i1023, -1 << 1022); + try testArgs(i128, i1023, -1); + try testArgs(i128, i1023, 0); + try testArgs(u128, i1023, -1 << 1022); + try testArgs(u128, i1023, -1); + try testArgs(u128, i1023, 0); + try testArgs(i256, i1023, -1 << 1022); + try testArgs(i256, i1023, -1); + try testArgs(i256, i1023, 0); + try testArgs(u256, i1023, -1 << 1022); + try testArgs(u256, i1023, -1); + try testArgs(u256, i1023, 0); + try testArgs(i512, i1023, -1 << 1022); + try testArgs(i512, i1023, -1); + try testArgs(i512, i1023, 0); + try testArgs(u512, i1023, -1 << 1022); + try testArgs(u512, i1023, -1); + try testArgs(u512, i1023, 0); + try testArgs(i1024, i1023, -1 << 1022); + try testArgs(i1024, i1023, -1); + try testArgs(i1024, 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(u8, u1023, 0); + try testArgs(u8, u1023, 1 << 0); + try testArgs(u8, u1023, 1 << 1022); + try testArgs(i16, u1023, 0); + try testArgs(i16, u1023, 1 << 0); + try testArgs(i16, u1023, 1 << 1022); + try testArgs(u16, u1023, 0); + try testArgs(u16, u1023, 1 << 0); + try testArgs(u16, u1023, 1 << 1022); + try testArgs(i32, u1023, 0); + try testArgs(i32, u1023, 1 << 0); + try testArgs(i32, u1023, 1 << 1022); + try testArgs(u32, u1023, 0); + try testArgs(u32, u1023, 1 << 0); + try testArgs(u32, u1023, 1 << 1022); + try testArgs(i64, u1023, 0); + try testArgs(i64, u1023, 1 << 0); + try testArgs(i64, u1023, 1 << 1022); + try testArgs(u64, u1023, 0); + try testArgs(u64, u1023, 1 << 0); + try testArgs(u64, u1023, 1 << 1022); + try testArgs(i128, u1023, 0); + try testArgs(i128, u1023, 1 << 0); + try testArgs(i128, u1023, 1 << 1022); + try testArgs(u128, u1023, 0); + try testArgs(u128, u1023, 1 << 0); + try testArgs(u128, u1023, 1 << 1022); + try testArgs(i256, u1023, 0); + try testArgs(i256, u1023, 1 << 0); + try testArgs(i256, u1023, 1 << 1022); + try testArgs(u256, u1023, 0); + try testArgs(u256, u1023, 1 << 0); + try testArgs(u256, u1023, 1 << 1022); + try testArgs(i512, u1023, 0); + try testArgs(i512, u1023, 1 << 0); + try testArgs(i512, u1023, 1 << 1022); + try testArgs(u512, u1023, 0); + try testArgs(u512, u1023, 1 << 0); + try testArgs(u512, u1023, 1 << 1022); + try testArgs(i1024, u1023, 0); + try testArgs(i1024, u1023, 1 << 0); + try testArgs(i1024, 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(u8, i1024, -1 << 1023); + try testArgs(u8, i1024, -1); + try testArgs(u8, i1024, 0); + try testArgs(i16, i1024, -1 << 1023); + try testArgs(i16, i1024, -1); + try testArgs(i16, i1024, 0); + try testArgs(u16, i1024, -1 << 1023); + try testArgs(u16, i1024, -1); + try testArgs(u16, i1024, 0); + try testArgs(i32, i1024, -1 << 1023); + try testArgs(i32, i1024, -1); + try testArgs(i32, i1024, 0); + try testArgs(u32, i1024, -1 << 1023); + try testArgs(u32, i1024, -1); + try testArgs(u32, i1024, 0); + try testArgs(i64, i1024, -1 << 1023); + try testArgs(i64, i1024, -1); + try testArgs(i64, i1024, 0); + try testArgs(u64, i1024, -1 << 1023); + try testArgs(u64, i1024, -1); + try testArgs(u64, i1024, 0); + try testArgs(i128, i1024, -1 << 1023); + try testArgs(i128, i1024, -1); + try testArgs(i128, i1024, 0); + try testArgs(u128, i1024, -1 << 1023); + try testArgs(u128, i1024, -1); + try testArgs(u128, i1024, 0); + try testArgs(i256, i1024, -1 << 1023); + try testArgs(i256, i1024, -1); + try testArgs(i256, i1024, 0); + try testArgs(u256, i1024, -1 << 1023); + try testArgs(u256, i1024, -1); + try testArgs(u256, i1024, 0); + try testArgs(i512, i1024, -1 << 1023); + try testArgs(i512, i1024, -1); + try testArgs(i512, i1024, 0); + try testArgs(u512, i1024, -1 << 1023); + try testArgs(u512, i1024, -1); + try testArgs(u512, i1024, 0); + try testArgs(i1024, i1024, -1 << 1023); + try testArgs(i1024, i1024, -1); + try testArgs(i1024, 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(u8, u1024, 0); + try testArgs(u8, u1024, 1 << 0); + try testArgs(u8, u1024, 1 << 1023); + try testArgs(i16, u1024, 0); + try testArgs(i16, u1024, 1 << 0); + try testArgs(i16, u1024, 1 << 1023); + try testArgs(u16, u1024, 0); + try testArgs(u16, u1024, 1 << 0); + try testArgs(u16, u1024, 1 << 1023); + try testArgs(i32, u1024, 0); + try testArgs(i32, u1024, 1 << 0); + try testArgs(i32, u1024, 1 << 1023); + try testArgs(u32, u1024, 0); + try testArgs(u32, u1024, 1 << 0); + try testArgs(u32, u1024, 1 << 1023); + try testArgs(i64, u1024, 0); + try testArgs(i64, u1024, 1 << 0); + try testArgs(i64, u1024, 1 << 1023); + try testArgs(u64, u1024, 0); + try testArgs(u64, u1024, 1 << 0); + try testArgs(u64, u1024, 1 << 1023); + try testArgs(i128, u1024, 0); + try testArgs(i128, u1024, 1 << 0); + try testArgs(i128, u1024, 1 << 1023); + try testArgs(u128, u1024, 0); + try testArgs(u128, u1024, 1 << 0); + try testArgs(u128, u1024, 1 << 1023); + try testArgs(i256, u1024, 0); + try testArgs(i256, u1024, 1 << 0); + try testArgs(i256, u1024, 1 << 1023); + try testArgs(u256, u1024, 0); + try testArgs(u256, u1024, 1 << 0); + try testArgs(u256, u1024, 1 << 1023); + try testArgs(i512, u1024, 0); + try testArgs(i512, u1024, 1 << 0); + try testArgs(i512, u1024, 1 << 1023); + try testArgs(u512, u1024, 0); + try testArgs(u512, u1024, 1 << 0); + try testArgs(u512, u1024, 1 << 1023); + try testArgs(i1024, u1024, 0); + try testArgs(i1024, u1024, 1 << 0); + try testArgs(i1024, 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(u8, i1025, -1 << 1024); + try testArgs(u8, i1025, -1); + try testArgs(u8, i1025, 0); + try testArgs(i16, i1025, -1 << 1024); + try testArgs(i16, i1025, -1); + try testArgs(i16, i1025, 0); + try testArgs(u16, i1025, -1 << 1024); + try testArgs(u16, i1025, -1); + try testArgs(u16, i1025, 0); + try testArgs(i32, i1025, -1 << 1024); + try testArgs(i32, i1025, -1); + try testArgs(i32, i1025, 0); + try testArgs(u32, i1025, -1 << 1024); + try testArgs(u32, i1025, -1); + try testArgs(u32, i1025, 0); + try testArgs(i64, i1025, -1 << 1024); + try testArgs(i64, i1025, -1); + try testArgs(i64, i1025, 0); + try testArgs(u64, i1025, -1 << 1024); + try testArgs(u64, i1025, -1); + try testArgs(u64, i1025, 0); + try testArgs(i128, i1025, -1 << 1024); + try testArgs(i128, i1025, -1); + try testArgs(i128, i1025, 0); + try testArgs(u128, i1025, -1 << 1024); + try testArgs(u128, i1025, -1); + try testArgs(u128, i1025, 0); + try testArgs(i256, i1025, -1 << 1024); + try testArgs(i256, i1025, -1); + try testArgs(i256, i1025, 0); + try testArgs(u256, i1025, -1 << 1024); + try testArgs(u256, i1025, -1); + try testArgs(u256, i1025, 0); + try testArgs(i512, i1025, -1 << 1024); + try testArgs(i512, i1025, -1); + try testArgs(i512, i1025, 0); + try testArgs(u512, i1025, -1 << 1024); + try testArgs(u512, i1025, -1); + try testArgs(u512, i1025, 0); + try testArgs(i1024, i1025, -1 << 1024); + try testArgs(i1024, i1025, -1); + try testArgs(i1024, 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(u8, u1025, 0); + try testArgs(u8, u1025, 1 << 0); + try testArgs(u8, u1025, 1 << 1024); + try testArgs(i16, u1025, 0); + try testArgs(i16, u1025, 1 << 0); + try testArgs(i16, u1025, 1 << 1024); + try testArgs(u16, u1025, 0); + try testArgs(u16, u1025, 1 << 0); + try testArgs(u16, u1025, 1 << 1024); + try testArgs(i32, u1025, 0); + try testArgs(i32, u1025, 1 << 0); + try testArgs(i32, u1025, 1 << 1024); + try testArgs(u32, u1025, 0); + try testArgs(u32, u1025, 1 << 0); + try testArgs(u32, u1025, 1 << 1024); + try testArgs(i64, u1025, 0); + try testArgs(i64, u1025, 1 << 0); + try testArgs(i64, u1025, 1 << 1024); + try testArgs(u64, u1025, 0); + try testArgs(u64, u1025, 1 << 0); + try testArgs(u64, u1025, 1 << 1024); + try testArgs(i128, u1025, 0); + try testArgs(i128, u1025, 1 << 0); + try testArgs(i128, u1025, 1 << 1024); + try testArgs(u128, u1025, 0); + try testArgs(u128, u1025, 1 << 0); + try testArgs(u128, u1025, 1 << 1024); + try testArgs(i256, u1025, 0); + try testArgs(i256, u1025, 1 << 0); + try testArgs(i256, u1025, 1 << 1024); + try testArgs(u256, u1025, 0); + try testArgs(u256, u1025, 1 << 0); + try testArgs(u256, u1025, 1 << 1024); + try testArgs(i512, u1025, 0); + try testArgs(i512, u1025, 1 << 0); + try testArgs(i512, u1025, 1 << 1024); + try testArgs(u512, u1025, 0); + try testArgs(u512, u1025, 1 << 0); + try testArgs(u512, u1025, 1 << 1024); + try testArgs(i1024, u1025, 0); + try testArgs(i1024, u1025, 1 << 0); + try testArgs(i1024, u1025, 1 << 1024); + try testArgs(u1024, u1025, 0); + try testArgs(u1024, u1025, 1 << 0); + try testArgs(u1024, 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(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 +8055,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 +8074,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 +8093,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 +8188,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 +8207,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 +8226,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 +8245,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 +8264,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 +8359,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 +8378,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 +8397,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 +8416,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 +8435,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 +8530,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 +8549,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 +8568,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 +8587,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 +8606,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 +8701,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 +8720,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 +8739,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 +8758,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 +8777,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 +8872,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 +8891,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 +8910,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 +8929,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 +8948,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 +9043,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 +9062,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 +9081,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 +9100,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 +9119,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 +9214,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 +9233,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 +9252,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 +9271,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 +9290,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 +9385,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 +9404,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 +9423,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 +9442,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 +9461,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 +9556,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 +9575,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 +9594,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 +9613,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 +9632,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 +9727,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 +9746,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 +10391,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 +10467,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 +10700,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 +10804,14 @@ test clz { try test_clz.testIntVectors(); } +inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type) Result { + return @floatCast(rhs); +} +test floatCast { + const test_float_cast = cast(floatCast, .{ .strict = true }); + try test_float_cast.testFloats(); +} + inline fn equal(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs == rhs) { return lhs == rhs; } From afa74c6b213efb1ff85b86ce4a9edd5cc03e5a9b Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Thu, 30 Jan 2025 11:58:32 -0500 Subject: [PATCH 2/5] Sema: introduce all_vector_instructions backend feature Sema is arbitrarily scalarizing some operations, which means that when I try to implement vectorized versions of those operations in a backend, they are impossible to test due to Sema not producing them. Now, I can implement them and then temporarily enable the new feature for that backend in order to test them. Once the backend supports all of them, the feature can be permanently enabled. This also deletes the Air instructions `int_from_bool` and `int_from_ptr`, which are just bitcasts with a fixed result type, since changing `un_op` to `ty_op` takes up the same amount of memory. --- src/Air.zig | 16 +----- src/Air/types_resolved.zig | 2 - src/Liveness.zig | 4 -- src/Liveness/Verify.zig | 2 - src/Sema.zig | 103 ++++++++++++++++++++++++----------- src/Zcu.zig | 9 +++ src/arch/aarch64/CodeGen.zig | 15 ----- src/arch/arm/CodeGen.zig | 15 ----- src/arch/riscv64/CodeGen.zig | 27 +-------- src/arch/sparc64/CodeGen.zig | 15 ----- src/arch/wasm/CodeGen.zig | 31 ++--------- src/arch/x86_64/CodeGen.zig | 39 ------------- src/codegen/c.zig | 44 +-------------- src/codegen/llvm.zig | 22 ++------ src/codegen/spirv.zig | 22 ++------ src/print_air.zig | 2 - src/target.zig | 3 + 17 files changed, 102 insertions(+), 269 deletions(-) diff --git a/src/Air.zig b/src/Air.zig index 30ea7b0abc..f6ca6edb03 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. @@ -1542,7 +1535,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 +1544,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 +1805,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/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 bc9d5ea55f..4a11dd4544 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -10054,6 +10054,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)) { @@ -10064,8 +10066,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); @@ -10089,16 +10089,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); } @@ -10585,7 +10583,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); @@ -14762,7 +14760,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()); @@ -14812,7 +14810,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; @@ -14845,7 +14843,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); @@ -16612,8 +16610,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)); } @@ -21231,14 +21229,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| { @@ -21256,16 +21254,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); } @@ -22858,14 +22854,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; @@ -22917,7 +22926,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); @@ -22996,17 +23005,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); } } @@ -23559,7 +23588,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); @@ -23575,7 +23608,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: { @@ -31403,7 +31440,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); 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 b0f2776a82..5b56cc4c02 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -21853,17 +21853,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), @@ -24493,19 +24482,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; @@ -37205,21 +37181,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; 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/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, + }, }; } From b9531f5de6a36d016a551be68080a314b90eb154 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Wed, 29 Jan 2025 23:55:55 -0500 Subject: [PATCH 3/5] x86_64: rewrite float vector conversions --- lib/std/zig/Zir.zig | 3 +- src/Air.zig | 1 + src/InternPool.zig | 5 + src/Sema.zig | 1 + src/Type.zig | 1 + src/arch/x86_64/CodeGen.zig | 2121 +++++++++++++++-- src/codegen/c/Type.zig | 15 + test/behavior/x86_64/math.zig | 1 + .../anytype_param_requires_comptime.zig | 2 +- .../bogus_method_call_on_slice.zig | 2 +- .../compile_errors/coerce_anon_struct.zig | 2 +- 11 files changed, 1951 insertions(+), 203 deletions(-) diff --git a/lib/std/zig/Zir.zig b/lib/std/zig/Zir.zig index f26bc288f4..34888e1661 100644 --- a/lib/std/zig/Zir.zig +++ b/lib/std/zig/Zir.zig @@ -2128,7 +2128,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)); @@ -2229,6 +2229,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 f6ca6edb03..22727adbd9 100644 --- a/src/Air.zig +++ b/src/Air.zig @@ -1001,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), 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/Sema.zig b/src/Sema.zig index 4a11dd4544..8c7962fbde 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -36733,6 +36733,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 e6fc9c7d6a..8b9690e76c 100644 --- a/src/Type.zig +++ b/src/Type.zig @@ -4209,6 +4209,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/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 5b56cc4c02..24fcf31064 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -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_100); const pt = cg.pt; const zcu = pt.zcu; const ip = &zcu.intern_pool; @@ -5567,13 +5567,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", ._, ._, ._ }, } }, }, .{ @@ -5600,14 +5600,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", ._, ._, ._ }, } }, }, .{ @@ -5634,7 +5634,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), ._ }, @@ -5642,7 +5642,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", ._, ._, ._ }, } }, }, .{ @@ -5657,7 +5657,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 } }, @@ -5669,7 +5669,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), ._, ._ }, @@ -5680,7 +5680,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", ._, ._, ._ }, } }, }, .{ @@ -5878,14 +5878,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", ._, ._, ._ }, } }, }, .{ @@ -5911,7 +5911,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, ._, ._ }, @@ -5919,7 +5919,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", ._, ._, ._ }, } }, }, .{ @@ -5945,7 +5945,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, ._, ._ }, @@ -5955,7 +5955,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", ._, ._, ._ }, } }, }, .{ @@ -6179,14 +6179,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", ._, ._, ._ }, } }, }, .{ @@ -6212,7 +6212,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, ._, ._ }, @@ -6220,7 +6220,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", ._, ._, ._ }, } }, }, .{ @@ -6246,7 +6246,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, ._, ._ }, @@ -6256,7 +6256,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", ._, ._, ._ }, } }, }, .{ @@ -6283,14 +6283,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", ._, ._, ._ }, } }, }, .{ @@ -6580,12 +6580,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", ._, ._, ._ }, } }, }, .{ @@ -6612,12 +6612,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", ._, ._, ._ }, } }, }, .{ @@ -6644,12 +6644,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) { @@ -9411,13 +9411,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", ._, ._, ._ }, } }, }, .{ @@ -9444,14 +9444,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", ._, ._, ._ }, } }, }, .{ @@ -9478,7 +9478,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), ._ }, @@ -9486,7 +9486,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", ._, ._, ._ }, } }, }, .{ @@ -9501,7 +9501,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 } }, @@ -9513,7 +9513,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), ._, ._ }, @@ -9524,7 +9524,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", ._, ._, ._ }, } }, }, .{ @@ -9722,14 +9722,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", ._, ._, ._ }, } }, }, .{ @@ -9755,7 +9755,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, ._, ._ }, @@ -9763,7 +9763,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", ._, ._, ._ }, } }, }, .{ @@ -9789,7 +9789,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, ._, ._ }, @@ -9799,7 +9799,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", ._, ._, ._ }, } }, }, .{ @@ -10023,14 +10023,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", ._, ._, ._ }, } }, }, .{ @@ -10056,7 +10056,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, ._, ._ }, @@ -10064,7 +10064,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", ._, ._, ._ }, } }, }, .{ @@ -10090,7 +10090,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, ._, ._ }, @@ -10100,7 +10100,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", ._, ._, ._ }, } }, }, .{ @@ -10127,14 +10127,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", ._, ._, ._ }, } }, }, .{ @@ -10412,12 +10412,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", ._, ._, ._ }, } }, }, .{ @@ -10444,12 +10444,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", ._, ._, ._ }, } }, }, .{ @@ -10476,12 +10476,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) { @@ -11990,13 +11990,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(.qword, .tmp1, .tmp0), ._, ._ }, + .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, + .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, }, .{ .patterns = &.{ @@ -12015,13 +12016,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(.dword, .tmp1, .tmp0), ._, ._ }, + .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.none, .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} {} {}", .{ @@ -20246,7 +20248,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .lea, .tmp0d, .lead(.none, .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", ._, ._, ._ }, } }, }, .{ @@ -21899,7 +21901,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ }, } }, @@ -21910,7 +21912,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ }, } }, @@ -21921,7 +21923,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_, .cvtps2ph, .dst0x, .src0y, .rm(.{}), ._ }, } }, @@ -21949,6 +21951,152 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -21973,6 +22121,126 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -21992,45 +22260,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .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 = .{ .mut_sse, .none } }, - }, - .dst_temps = .{.{ .ref = .src0 }}, - .each = .{ .once = &.{ - .{ ._, ._ss, .cvtsd2, .dst0x, .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 = .{ .sse, .none } }, + .{ .src = .{ .to_sse, .none } }, }, .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._ps, .xor, .dst0x, .dst0x, ._, ._ }, .{ ._, ._ss, .cvtsd2, .dst0x, .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 = .{ .to_mut_sse, .none } }, - }, - .dst_temps = .{.{ .ref = .src0 }}, - .each = .{ .once = &.{ - .{ ._, ._ss, .cvtsd2, .dst0x, .src0q, ._, ._ }, - } }, }, .{ .required_features = .{ .x87, null, null, null }, .src_constraints = .{ .{ .scalar_float = .{ .of = .qword, .is = .qword } }, .any }, @@ -22062,9 +22308,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ - .{ ._, .v_ps, .cvtpd2, .dst0x, .src0q, ._, ._ }, + .{ ._, .v_ps, .cvtpd2, .dst0x, .src0x, ._, ._ }, } }, }, .{ .required_features = .{ .sse2, null, null, null }, @@ -22074,9 +22320,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ - .{ ._, ._ps, .cvtpd2, .dst0x, .src0q, ._, ._ }, + .{ ._, ._ps, .cvtpd2, .dst0x, .src0x, ._, ._ }, } }, }, .{ .required_features = .{ .avx, null, null, null }, @@ -22086,12 +22332,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ - .{ ._, .v_ps, .cvtpd2, .dst0y, .src0x, ._, ._ }, + .{ ._, .v_ps, .cvtpd2, .dst0x, .src0y, ._, ._ }, } }, }, .{ - .required_features = .{ .@"64bit", .avx, null, null }, + .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 = &.{ @@ -22117,7 +22444,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, } }, }, .{ - .required_features = .{ .@"64bit", .sse2, null, null }, + .required_features = .{ .sse2, null, null, null }, .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, .patterns = &.{ @@ -22143,7 +22470,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, } }, }, .{ - .required_features = .{ .@"64bit", .sse, null, null }, + .required_features = .{ .sse, null, null, null }, .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, .dst_constraints = .{.{ .scalar_float = .{ .of = .word, .is = .word } }}, .patterns = &.{ @@ -22168,6 +22495,129 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._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 }, @@ -22192,6 +22642,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .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 }, @@ -22216,6 +22693,33 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .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 }, @@ -22240,6 +22744,125 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -22264,6 +22887,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -22288,6 +22998,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -22312,6 +23109,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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), @@ -22334,7 +23221,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, } }, @@ -22346,7 +23233,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, } }, @@ -22358,7 +23245,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, } }, @@ -22386,6 +23273,124 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -22393,7 +23398,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .dst0d, ._ }, @@ -22406,7 +23411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, .{ ._, .v_pd, .cvtps2, .dst0x, .dst0q, ._, ._ }, @@ -22419,11 +23424,39 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .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 }, @@ -22448,6 +23481,128 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -22456,7 +23611,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .to_sse, .none } }, }, .extra_temps = .{ - .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } }, + .{ .type = .f32, .kind = .{ .rc = .sse } }, .{ .type = .f32, .kind = .mem }, .{ .type = .f80, .kind = .{ .reg = .st7 } }, .unused, @@ -22497,6 +23652,100 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -22521,6 +23770,97 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -22540,45 +23880,23 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .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 = .{ .mut_sse, .none } }, - }, - .dst_temps = .{.{ .ref = .src0 }}, - .each = .{ .once = &.{ - .{ ._, ._sd, .cvtss2, .dst0x, .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 = .{ .sse, .none } }, + .{ .src = .{ .to_sse, .none } }, }, .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._pd, .xor, .dst0x, .dst0x, ._, ._ }, .{ ._, ._sd, .cvtss2, .dst0x, .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 = .{ .to_mut_sse, .none } }, - }, - .dst_temps = .{.{ .ref = .src0 }}, - .each = .{ .once = &.{ - .{ ._, ._sd, .cvtss2, .dst0x, .src0d, ._, ._ }, - } }, }, .{ .required_features = .{ .x87, null, null, null }, .src_constraints = .{ .{ .scalar_float = .{ .of = .dword, .is = .dword } }, .any }, @@ -22610,7 +23928,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, .v_pd, .cvtps2, .dst0x, .src0q, ._, ._ }, } }, @@ -22622,7 +23940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .rc = .sse }}, .each = .{ .once = &.{ .{ ._, ._pd, .cvtps2, .dst0x, .src0q, ._, ._ }, } }, @@ -22634,10 +23952,91 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, + .dst_temps = .{.{ .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 }, @@ -22661,6 +24060,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .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 }, @@ -22685,6 +24110,93 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .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 }, @@ -22708,6 +24220,32 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, .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 }, @@ -22733,7 +24271,95 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .call, .tmp0d, ._, ._, ._ }, } }, }, .{ - .required_features = .{ .@"64bit", .avx, null, null }, + .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 = &.{ @@ -22759,7 +24385,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, } }, }, .{ - .required_features = .{ .@"64bit", .sse2, null, null }, + .required_features = .{ .sse2, null, null, null }, .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }}, .patterns = &.{ @@ -22785,7 +24411,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .call, .tmp1d, ._, ._, ._ }, } }, }, .{ - .required_features = .{ .@"64bit", .sse, null, null }, + .required_features = .{ .sse, null, null, null }, .src_constraints = .{ .{ .scalar_float = .{ .of = .xword, .is = .tbyte } }, .any }, .dst_constraints = .{.{ .scalar_float = .{ .of = .xword, .is = .xword } }}, .patterns = &.{ @@ -22810,6 +24436,96 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._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), @@ -30715,6 +32431,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; @@ -43508,7 +45225,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); @@ -43518,29 +45235,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", @@ -43594,32 +45317,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, @@ -43646,6 +45343,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 => {}, @@ -44199,7 +45922,7 @@ 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, base: Ref.Sized = .none, @@ -44228,7 +45951,7 @@ const Select = struct { ptr_bit_size, size, size_sub_elem_size, - src0_unaligned_size, + unaligned_size, bit_size, src0_bit_size, len, @@ -44252,8 +45975,8 @@ const Select = struct { 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_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" }; @@ -44744,7 +46467,7 @@ const Select = struct { 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)), 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/test/behavior/x86_64/math.zig b/test/behavior/x86_64/math.zig index 5c5e440035..4642f822a3 100644 --- a/test/behavior/x86_64/math.zig +++ b/test/behavior/x86_64/math.zig @@ -10810,6 +10810,7 @@ inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type) Resul 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) { 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 From f0ac14ce97c4fa7f10ddd0d74a6dfade0a04cbc1 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Thu, 30 Jan 2025 22:06:18 -0500 Subject: [PATCH 4/5] x86_64: rewrite scalar `@intCast` --- src/arch/x86_64/CodeGen.zig | 1444 ++++++++---- test/behavior/x86_64/math.zig | 4033 +++++++++++++-------------------- 2 files changed, 2654 insertions(+), 2823 deletions(-) diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 24fcf31064..b1b4b68df9 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -2499,7 +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), - .intcast => try cg.airIntCast(inst), .trunc => try cg.airTrunc(inst), .is_non_null => try cg.airIsNonNull(inst), .is_null => try cg.airIsNull(inst), @@ -2589,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 }}, @@ -2598,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 }}, @@ -2607,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 }}, @@ -2616,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 }}, @@ -2626,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 }}, @@ -2635,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 }, @@ -2646,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 }, @@ -2656,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}, @@ -2668,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 = &.{ @@ -2678,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} {} {} {}", .{ @@ -2705,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 }}, @@ -2716,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 }}, @@ -2727,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 }}, @@ -2737,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 }}, @@ -2750,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 }}, @@ -2760,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 }, @@ -2774,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 }, @@ -2785,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}, @@ -2799,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 = &.{ @@ -2809,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} {} {} {}", .{ @@ -4540,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, ._, ._ }, @@ -4678,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), ._, ._ }, @@ -4997,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, ._ }, @@ -5028,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, ._, ._ }, @@ -5060,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, ._ }, @@ -5090,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), ._, ._ }, @@ -5126,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), ._, ._ }, @@ -5162,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, ._, ._ }, @@ -5264,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), ._, ._ }, @@ -5303,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), ._, ._ }, @@ -5342,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), ._, ._ }, @@ -5379,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), ._, ._ }, @@ -8380,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, ._, ._ }, @@ -8518,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), ._, ._ }, @@ -8841,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, ._ }, @@ -8872,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, ._, ._ }, @@ -8904,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, ._ }, @@ -8934,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), ._, ._ }, @@ -8970,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), ._, ._ }, @@ -9006,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, ._, ._ }, @@ -9108,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), ._, ._ }, @@ -9147,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), ._, ._ }, @@ -9186,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), ._, ._ }, @@ -9223,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), ._, ._ }, @@ -10997,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 }, @@ -11031,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 }, @@ -11065,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 }, @@ -11087,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 }, @@ -11121,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 }, @@ -11155,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 }, @@ -11812,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 }, @@ -11846,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 }, @@ -11880,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 }, @@ -11902,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 }, @@ -11936,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 }, @@ -11970,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 }, @@ -11993,9 +11992,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2q, .memi(.src0q, .tmp0), ._, ._ }, - .{ ._, ._, .xor, .tmp2q, .leai(.qword, .tmp1, .tmp0), ._, ._ }, + .{ ._, ._, .xor, .tmp2q, .leai(.tmp1q, .tmp0), ._, ._ }, .{ ._, ._, .mov, .memi(.dst0q, .tmp0), .tmp2q, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 8), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 8), ._, ._ }, .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, @@ -12019,9 +12018,9 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .xor, .tmp0d, .tmp0d, ._, ._ }, .{ ._, ._, .lea, .tmp1p, .mem(.tmp3), ._, ._ }, .{ .@"0:", ._, .mov, .tmp2d, .memi(.src0d, .tmp0), ._, ._ }, - .{ ._, ._, .xor, .tmp2d, .leai(.dword, .tmp1, .tmp0), ._, ._ }, + .{ ._, ._, .xor, .tmp2d, .leai(.tmp1d, .tmp0), ._, ._ }, .{ ._, ._, .mov, .memi(.dst0d, .tmp0), .tmp2d, ._, ._ }, - .{ ._, ._, .lea, .tmp0d, .lead(.none, .tmp0, 4), ._, ._ }, + .{ ._, ._, .lea, .tmp0d, .lead(.tmp0, 4), ._, ._ }, .{ ._, ._, .cmp, .tmp0d, .sa(.src0, .add_unaligned_size), ._, ._ }, .{ ._, ._b, .j, .@"0b", ._, ._, ._ }, } }, @@ -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, ._, ._, ._ }, } }, }, .{ @@ -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,9 +14589,9 @@ 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", ._, ._, ._ }, } }, @@ -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,9 +14628,9 @@ 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", ._, ._, ._ }, } }, @@ -14660,17 +14659,17 @@ 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", ._, ._, ._ }, } }, @@ -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,9 +14707,9 @@ 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", ._, ._, ._ }, } }, @@ -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,9 +14746,9 @@ 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", ._, ._, ._ }, } }, @@ -14778,17 +14777,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, .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", ._, ._, ._ }, } }, @@ -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,9 +14825,9 @@ 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", ._, ._, ._ }, } }, @@ -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,9 +14864,9 @@ 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", ._, ._, ._ }, } }, @@ -14896,17 +14895,17 @@ 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", ._, ._, ._ }, } }, @@ -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,9 +14943,9 @@ 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", ._, ._, ._ }, } }, @@ -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,9 +14982,9 @@ 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", ._, ._, ._ }, } }, @@ -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, ._, ._ }, @@ -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,7 +17318,7 @@ 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", ._, ._, ._ }, @@ -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, ._, ._ }, @@ -18714,7 +18713,7 @@ 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", ._, ._, ._ }, } }, @@ -18804,7 +18803,7 @@ 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", ._, ._, ._ }, } }, @@ -18894,7 +18893,7 @@ 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", ._, ._, ._ }, } }, @@ -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,7 +20244,7 @@ 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(.src0, .add_unaligned_size), ._, ._ }, @@ -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), ._, ._ }, @@ -24537,6 +24536,683 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }; try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); }, + .intcast => |air_tag| if (use_old) try cg.airIntCast(inst) else fallback: { + const ty_op = air_datas[@intFromEnum(inst)].ty_op; + const dst_ty = ty_op.ty.toType(); + if (dst_ty.isVector(zcu)) break :fallback try cg.airIntCast(inst); + 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 = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, + } }, + }, .{ + .required_features = .{ .@"64bit", null, null, null }, + .dst_constraints = .{.{ .int = .qword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .rc = .general_purpose }}, + .each = .{ .once = &.{ + .{ ._, ._, .mov, .dst0q, .src0q, ._, ._ }, + } }, + }, .{ + .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}, + .clobbers = .{ .eflags = true }, + .each = .{ .once = &.{ + .{ ._, ._, .lea, .tmp0p, .mem(.src0), ._, ._ }, + .{ ._, ._, .lea, .tmp1p, .mem(.dst0), ._, ._ }, + .{ ._, ._, .mov, .tmp2d, .sa(.dst0, .add_size_div_8), ._, ._ }, + .{ ._, .@"rep _sq", .mov, ._, ._, ._, ._ }, + } }, + } } else comptime &.{ .{ + .src_constraints = .{ .{ .signed_int = .byte }, .any }, + .dst_constraints = .{.{ .signed_int = .dword }}, + .patterns = &.{ + .{ .src = .{ .mem, .none } }, + .{ .src = .{ .to_gpr, .none } }, + }, + .dst_temps = .{.{ .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 = .{.{ .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 = .{.{ .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 = .{.{ .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 = .{.{ .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 = .{.{ .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 = .{.{ .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 = .{.{ .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 = .{.{ .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 = .{.{ .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, ._, ._, ._, ._ }, + } }, + } }) 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}); @@ -24716,7 +25392,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 }}, @@ -24725,7 +25401,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 }}, @@ -24734,7 +25410,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 }}, @@ -24743,7 +25419,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 }}, @@ -24752,7 +25428,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 }}, @@ -24761,7 +25437,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 }}, @@ -24770,7 +25446,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 }, @@ -24780,7 +25456,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 => { @@ -45924,16 +46600,19 @@ const Select = struct { }; 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, @@ -45943,13 +46622,14 @@ 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, size_sub_elem_size, unaligned_size, bit_size, @@ -45970,10 +46650,12 @@ 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_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .size_sub_elem_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" }; @@ -46147,298 +46829,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, @@ -46446,10 +47123,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, }; } @@ -46458,11 +47134,13 @@ 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)))), .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)); @@ -46489,8 +47167,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); @@ -46498,14 +47176,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| { diff --git a/test/behavior/x86_64/math.zig b/test/behavior/x86_64/math.zig index 4642f822a3..9cc957614c 100644 --- a/test/behavior/x86_64/math.zig +++ b/test/behavior/x86_64/math.zig @@ -1680,165 +1680,85 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty imm_arg, ); } - fn testInts() !void { + fn testSameSignednessInts() !void { try testArgs(i8, i1, -1); try testArgs(i8, i1, 0); - try testArgs(u8, i1, -1); - try testArgs(u8, i1, 0); try testArgs(i16, i1, -1); try testArgs(i16, i1, 0); - try testArgs(u16, i1, -1); - try testArgs(u16, i1, 0); try testArgs(i32, i1, -1); try testArgs(i32, i1, 0); - try testArgs(u32, i1, -1); - try testArgs(u32, i1, 0); try testArgs(i64, i1, -1); try testArgs(i64, i1, 0); - try testArgs(u64, i1, -1); - try testArgs(u64, i1, 0); try testArgs(i128, i1, -1); try testArgs(i128, i1, 0); - try testArgs(u128, i1, -1); - try testArgs(u128, i1, 0); try testArgs(i256, i1, -1); try testArgs(i256, i1, 0); - try testArgs(u256, i1, -1); - try testArgs(u256, i1, 0); try testArgs(i512, i1, -1); try testArgs(i512, i1, 0); - try testArgs(u512, i1, -1); - try testArgs(u512, i1, 0); try testArgs(i1024, i1, -1); try testArgs(i1024, 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(u8, u1, 0); try testArgs(u8, u1, 1 << 0); - try testArgs(i16, u1, 0); - try testArgs(i16, u1, 1 << 0); try testArgs(u16, u1, 0); try testArgs(u16, u1, 1 << 0); - try testArgs(i32, u1, 0); - try testArgs(i32, u1, 1 << 0); try testArgs(u32, u1, 0); try testArgs(u32, u1, 1 << 0); - try testArgs(i64, u1, 0); - try testArgs(i64, u1, 1 << 0); try testArgs(u64, u1, 0); try testArgs(u64, u1, 1 << 0); - try testArgs(i128, u1, 0); - try testArgs(i128, u1, 1 << 0); try testArgs(u128, u1, 0); try testArgs(u128, u1, 1 << 0); - try testArgs(i256, u1, 0); - try testArgs(i256, u1, 1 << 0); try testArgs(u256, u1, 0); try testArgs(u256, u1, 1 << 0); - try testArgs(i512, u1, 0); - try testArgs(i512, u1, 1 << 0); try testArgs(u512, u1, 0); try testArgs(u512, u1, 1 << 0); - try testArgs(i1024, u1, 0); - try testArgs(i1024, 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(u8, i2, -1 << 1); - try testArgs(u8, i2, -1); - try testArgs(u8, i2, 0); try testArgs(i16, i2, -1 << 1); try testArgs(i16, i2, -1); try testArgs(i16, i2, 0); - try testArgs(u16, i2, -1 << 1); - try testArgs(u16, i2, -1); - try testArgs(u16, i2, 0); try testArgs(i32, i2, -1 << 1); try testArgs(i32, i2, -1); try testArgs(i32, i2, 0); - try testArgs(u32, i2, -1 << 1); - try testArgs(u32, i2, -1); - try testArgs(u32, i2, 0); try testArgs(i64, i2, -1 << 1); try testArgs(i64, i2, -1); try testArgs(i64, i2, 0); - try testArgs(u64, i2, -1 << 1); - try testArgs(u64, i2, -1); - try testArgs(u64, i2, 0); try testArgs(i128, i2, -1 << 1); try testArgs(i128, i2, -1); try testArgs(i128, i2, 0); - try testArgs(u128, i2, -1 << 1); - try testArgs(u128, i2, -1); - try testArgs(u128, i2, 0); try testArgs(i256, i2, -1 << 1); try testArgs(i256, i2, -1); try testArgs(i256, i2, 0); - try testArgs(u256, i2, -1 << 1); - try testArgs(u256, i2, -1); - try testArgs(u256, i2, 0); try testArgs(i512, i2, -1 << 1); try testArgs(i512, i2, -1); try testArgs(i512, i2, 0); - try testArgs(u512, i2, -1 << 1); - try testArgs(u512, i2, -1); - try testArgs(u512, i2, 0); try testArgs(i1024, i2, -1 << 1); try testArgs(i1024, i2, -1); try testArgs(i1024, 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(u8, u2, 0); try testArgs(u8, u2, 1 << 0); try testArgs(u8, u2, 1 << 1); - try testArgs(i16, u2, 0); - try testArgs(i16, u2, 1 << 0); - try testArgs(i16, u2, 1 << 1); try testArgs(u16, u2, 0); try testArgs(u16, u2, 1 << 0); try testArgs(u16, u2, 1 << 1); - try testArgs(i32, u2, 0); - try testArgs(i32, u2, 1 << 0); - try testArgs(i32, u2, 1 << 1); try testArgs(u32, u2, 0); try testArgs(u32, u2, 1 << 0); try testArgs(u32, u2, 1 << 1); - try testArgs(i64, u2, 0); - try testArgs(i64, u2, 1 << 0); - try testArgs(i64, u2, 1 << 1); try testArgs(u64, u2, 0); try testArgs(u64, u2, 1 << 0); try testArgs(u64, u2, 1 << 1); - try testArgs(i128, u2, 0); - try testArgs(i128, u2, 1 << 0); - try testArgs(i128, u2, 1 << 1); try testArgs(u128, u2, 0); try testArgs(u128, u2, 1 << 0); try testArgs(u128, u2, 1 << 1); - try testArgs(i256, u2, 0); - try testArgs(i256, u2, 1 << 0); - try testArgs(i256, u2, 1 << 1); try testArgs(u256, u2, 0); try testArgs(u256, u2, 1 << 0); try testArgs(u256, u2, 1 << 1); - try testArgs(i512, u2, 0); - try testArgs(i512, u2, 1 << 0); - try testArgs(i512, u2, 1 << 1); try testArgs(u512, u2, 0); try testArgs(u512, u2, 1 << 0); try testArgs(u512, u2, 1 << 1); - try testArgs(i1024, u2, 0); - try testArgs(i1024, u2, 1 << 0); - try testArgs(i1024, u2, 1 << 1); try testArgs(u1024, u2, 0); try testArgs(u1024, u2, 1 << 0); try testArgs(u1024, u2, 1 << 1); @@ -1846,96 +1766,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i3, -1 << 2); try testArgs(i8, i3, -1); try testArgs(i8, i3, 0); - try testArgs(u8, i3, -1 << 2); - try testArgs(u8, i3, -1); - try testArgs(u8, i3, 0); try testArgs(i16, i3, -1 << 2); try testArgs(i16, i3, -1); try testArgs(i16, i3, 0); - try testArgs(u16, i3, -1 << 2); - try testArgs(u16, i3, -1); - try testArgs(u16, i3, 0); try testArgs(i32, i3, -1 << 2); try testArgs(i32, i3, -1); try testArgs(i32, i3, 0); - try testArgs(u32, i3, -1 << 2); - try testArgs(u32, i3, -1); - try testArgs(u32, i3, 0); try testArgs(i64, i3, -1 << 2); try testArgs(i64, i3, -1); try testArgs(i64, i3, 0); - try testArgs(u64, i3, -1 << 2); - try testArgs(u64, i3, -1); - try testArgs(u64, i3, 0); try testArgs(i128, i3, -1 << 2); try testArgs(i128, i3, -1); try testArgs(i128, i3, 0); - try testArgs(u128, i3, -1 << 2); - try testArgs(u128, i3, -1); - try testArgs(u128, i3, 0); try testArgs(i256, i3, -1 << 2); try testArgs(i256, i3, -1); try testArgs(i256, i3, 0); - try testArgs(u256, i3, -1 << 2); - try testArgs(u256, i3, -1); - try testArgs(u256, i3, 0); try testArgs(i512, i3, -1 << 2); try testArgs(i512, i3, -1); try testArgs(i512, i3, 0); - try testArgs(u512, i3, -1 << 2); - try testArgs(u512, i3, -1); - try testArgs(u512, i3, 0); try testArgs(i1024, i3, -1 << 2); try testArgs(i1024, i3, -1); try testArgs(i1024, 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(u8, u3, 0); try testArgs(u8, u3, 1 << 0); try testArgs(u8, u3, 1 << 2); - try testArgs(i16, u3, 0); - try testArgs(i16, u3, 1 << 0); - try testArgs(i16, u3, 1 << 2); try testArgs(u16, u3, 0); try testArgs(u16, u3, 1 << 0); try testArgs(u16, u3, 1 << 2); - try testArgs(i32, u3, 0); - try testArgs(i32, u3, 1 << 0); - try testArgs(i32, u3, 1 << 2); try testArgs(u32, u3, 0); try testArgs(u32, u3, 1 << 0); try testArgs(u32, u3, 1 << 2); - try testArgs(i64, u3, 0); - try testArgs(i64, u3, 1 << 0); - try testArgs(i64, u3, 1 << 2); try testArgs(u64, u3, 0); try testArgs(u64, u3, 1 << 0); try testArgs(u64, u3, 1 << 2); - try testArgs(i128, u3, 0); - try testArgs(i128, u3, 1 << 0); - try testArgs(i128, u3, 1 << 2); try testArgs(u128, u3, 0); try testArgs(u128, u3, 1 << 0); try testArgs(u128, u3, 1 << 2); - try testArgs(i256, u3, 0); - try testArgs(i256, u3, 1 << 0); - try testArgs(i256, u3, 1 << 2); try testArgs(u256, u3, 0); try testArgs(u256, u3, 1 << 0); try testArgs(u256, u3, 1 << 2); - try testArgs(i512, u3, 0); - try testArgs(i512, u3, 1 << 0); - try testArgs(i512, u3, 1 << 2); try testArgs(u512, u3, 0); try testArgs(u512, u3, 1 << 0); try testArgs(u512, u3, 1 << 2); - try testArgs(i1024, u3, 0); - try testArgs(i1024, u3, 1 << 0); - try testArgs(i1024, u3, 1 << 2); try testArgs(u1024, u3, 0); try testArgs(u1024, u3, 1 << 0); try testArgs(u1024, u3, 1 << 2); @@ -1943,96 +1815,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i4, -1 << 3); try testArgs(i8, i4, -1); try testArgs(i8, i4, 0); - try testArgs(u8, i4, -1 << 3); - try testArgs(u8, i4, -1); - try testArgs(u8, i4, 0); try testArgs(i16, i4, -1 << 3); try testArgs(i16, i4, -1); try testArgs(i16, i4, 0); - try testArgs(u16, i4, -1 << 3); - try testArgs(u16, i4, -1); - try testArgs(u16, i4, 0); try testArgs(i32, i4, -1 << 3); try testArgs(i32, i4, -1); try testArgs(i32, i4, 0); - try testArgs(u32, i4, -1 << 3); - try testArgs(u32, i4, -1); - try testArgs(u32, i4, 0); try testArgs(i64, i4, -1 << 3); try testArgs(i64, i4, -1); try testArgs(i64, i4, 0); - try testArgs(u64, i4, -1 << 3); - try testArgs(u64, i4, -1); - try testArgs(u64, i4, 0); try testArgs(i128, i4, -1 << 3); try testArgs(i128, i4, -1); try testArgs(i128, i4, 0); - try testArgs(u128, i4, -1 << 3); - try testArgs(u128, i4, -1); - try testArgs(u128, i4, 0); try testArgs(i256, i4, -1 << 3); try testArgs(i256, i4, -1); try testArgs(i256, i4, 0); - try testArgs(u256, i4, -1 << 3); - try testArgs(u256, i4, -1); - try testArgs(u256, i4, 0); try testArgs(i512, i4, -1 << 3); try testArgs(i512, i4, -1); try testArgs(i512, i4, 0); - try testArgs(u512, i4, -1 << 3); - try testArgs(u512, i4, -1); - try testArgs(u512, i4, 0); try testArgs(i1024, i4, -1 << 3); try testArgs(i1024, i4, -1); try testArgs(i1024, 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(u8, u4, 0); try testArgs(u8, u4, 1 << 0); try testArgs(u8, u4, 1 << 3); - try testArgs(i16, u4, 0); - try testArgs(i16, u4, 1 << 0); - try testArgs(i16, u4, 1 << 3); try testArgs(u16, u4, 0); try testArgs(u16, u4, 1 << 0); try testArgs(u16, u4, 1 << 3); - try testArgs(i32, u4, 0); - try testArgs(i32, u4, 1 << 0); - try testArgs(i32, u4, 1 << 3); try testArgs(u32, u4, 0); try testArgs(u32, u4, 1 << 0); try testArgs(u32, u4, 1 << 3); - try testArgs(i64, u4, 0); - try testArgs(i64, u4, 1 << 0); - try testArgs(i64, u4, 1 << 3); try testArgs(u64, u4, 0); try testArgs(u64, u4, 1 << 0); try testArgs(u64, u4, 1 << 3); - try testArgs(i128, u4, 0); - try testArgs(i128, u4, 1 << 0); - try testArgs(i128, u4, 1 << 3); try testArgs(u128, u4, 0); try testArgs(u128, u4, 1 << 0); try testArgs(u128, u4, 1 << 3); - try testArgs(i256, u4, 0); - try testArgs(i256, u4, 1 << 0); - try testArgs(i256, u4, 1 << 3); try testArgs(u256, u4, 0); try testArgs(u256, u4, 1 << 0); try testArgs(u256, u4, 1 << 3); - try testArgs(i512, u4, 0); - try testArgs(i512, u4, 1 << 0); - try testArgs(i512, u4, 1 << 3); try testArgs(u512, u4, 0); try testArgs(u512, u4, 1 << 0); try testArgs(u512, u4, 1 << 3); - try testArgs(i1024, u4, 0); - try testArgs(i1024, u4, 1 << 0); - try testArgs(i1024, u4, 1 << 3); try testArgs(u1024, u4, 0); try testArgs(u1024, u4, 1 << 0); try testArgs(u1024, u4, 1 << 3); @@ -2040,96 +1864,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i5, -1 << 4); try testArgs(i8, i5, -1); try testArgs(i8, i5, 0); - try testArgs(u8, i5, -1 << 4); - try testArgs(u8, i5, -1); - try testArgs(u8, i5, 0); try testArgs(i16, i5, -1 << 4); try testArgs(i16, i5, -1); try testArgs(i16, i5, 0); - try testArgs(u16, i5, -1 << 4); - try testArgs(u16, i5, -1); - try testArgs(u16, i5, 0); try testArgs(i32, i5, -1 << 4); try testArgs(i32, i5, -1); try testArgs(i32, i5, 0); - try testArgs(u32, i5, -1 << 4); - try testArgs(u32, i5, -1); - try testArgs(u32, i5, 0); try testArgs(i64, i5, -1 << 4); try testArgs(i64, i5, -1); try testArgs(i64, i5, 0); - try testArgs(u64, i5, -1 << 4); - try testArgs(u64, i5, -1); - try testArgs(u64, i5, 0); try testArgs(i128, i5, -1 << 4); try testArgs(i128, i5, -1); try testArgs(i128, i5, 0); - try testArgs(u128, i5, -1 << 4); - try testArgs(u128, i5, -1); - try testArgs(u128, i5, 0); try testArgs(i256, i5, -1 << 4); try testArgs(i256, i5, -1); try testArgs(i256, i5, 0); - try testArgs(u256, i5, -1 << 4); - try testArgs(u256, i5, -1); - try testArgs(u256, i5, 0); try testArgs(i512, i5, -1 << 4); try testArgs(i512, i5, -1); try testArgs(i512, i5, 0); - try testArgs(u512, i5, -1 << 4); - try testArgs(u512, i5, -1); - try testArgs(u512, i5, 0); try testArgs(i1024, i5, -1 << 4); try testArgs(i1024, i5, -1); try testArgs(i1024, 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(u8, u5, 0); try testArgs(u8, u5, 1 << 0); try testArgs(u8, u5, 1 << 4); - try testArgs(i16, u5, 0); - try testArgs(i16, u5, 1 << 0); - try testArgs(i16, u5, 1 << 4); try testArgs(u16, u5, 0); try testArgs(u16, u5, 1 << 0); try testArgs(u16, u5, 1 << 4); - try testArgs(i32, u5, 0); - try testArgs(i32, u5, 1 << 0); - try testArgs(i32, u5, 1 << 4); try testArgs(u32, u5, 0); try testArgs(u32, u5, 1 << 0); try testArgs(u32, u5, 1 << 4); - try testArgs(i64, u5, 0); - try testArgs(i64, u5, 1 << 0); - try testArgs(i64, u5, 1 << 4); try testArgs(u64, u5, 0); try testArgs(u64, u5, 1 << 0); try testArgs(u64, u5, 1 << 4); - try testArgs(i128, u5, 0); - try testArgs(i128, u5, 1 << 0); - try testArgs(i128, u5, 1 << 4); try testArgs(u128, u5, 0); try testArgs(u128, u5, 1 << 0); try testArgs(u128, u5, 1 << 4); - try testArgs(i256, u5, 0); - try testArgs(i256, u5, 1 << 0); - try testArgs(i256, u5, 1 << 4); try testArgs(u256, u5, 0); try testArgs(u256, u5, 1 << 0); try testArgs(u256, u5, 1 << 4); - try testArgs(i512, u5, 0); - try testArgs(i512, u5, 1 << 0); - try testArgs(i512, u5, 1 << 4); try testArgs(u512, u5, 0); try testArgs(u512, u5, 1 << 0); try testArgs(u512, u5, 1 << 4); - try testArgs(i1024, u5, 0); - try testArgs(i1024, u5, 1 << 0); - try testArgs(i1024, u5, 1 << 4); try testArgs(u1024, u5, 0); try testArgs(u1024, u5, 1 << 0); try testArgs(u1024, u5, 1 << 4); @@ -2137,96 +1913,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i7, -1 << 6); try testArgs(i8, i7, -1); try testArgs(i8, i7, 0); - try testArgs(u8, i7, -1 << 6); - try testArgs(u8, i7, -1); - try testArgs(u8, i7, 0); try testArgs(i16, i7, -1 << 6); try testArgs(i16, i7, -1); try testArgs(i16, i7, 0); - try testArgs(u16, i7, -1 << 6); - try testArgs(u16, i7, -1); - try testArgs(u16, i7, 0); try testArgs(i32, i7, -1 << 6); try testArgs(i32, i7, -1); try testArgs(i32, i7, 0); - try testArgs(u32, i7, -1 << 6); - try testArgs(u32, i7, -1); - try testArgs(u32, i7, 0); try testArgs(i64, i7, -1 << 6); try testArgs(i64, i7, -1); try testArgs(i64, i7, 0); - try testArgs(u64, i7, -1 << 6); - try testArgs(u64, i7, -1); - try testArgs(u64, i7, 0); try testArgs(i128, i7, -1 << 6); try testArgs(i128, i7, -1); try testArgs(i128, i7, 0); - try testArgs(u128, i7, -1 << 6); - try testArgs(u128, i7, -1); - try testArgs(u128, i7, 0); try testArgs(i256, i7, -1 << 6); try testArgs(i256, i7, -1); try testArgs(i256, i7, 0); - try testArgs(u256, i7, -1 << 6); - try testArgs(u256, i7, -1); - try testArgs(u256, i7, 0); try testArgs(i512, i7, -1 << 6); try testArgs(i512, i7, -1); try testArgs(i512, i7, 0); - try testArgs(u512, i7, -1 << 6); - try testArgs(u512, i7, -1); - try testArgs(u512, i7, 0); try testArgs(i1024, i7, -1 << 6); try testArgs(i1024, i7, -1); try testArgs(i1024, 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(u8, u7, 0); try testArgs(u8, u7, 1 << 0); try testArgs(u8, u7, 1 << 6); - try testArgs(i16, u7, 0); - try testArgs(i16, u7, 1 << 0); - try testArgs(i16, u7, 1 << 6); try testArgs(u16, u7, 0); try testArgs(u16, u7, 1 << 0); try testArgs(u16, u7, 1 << 6); - try testArgs(i32, u7, 0); - try testArgs(i32, u7, 1 << 0); - try testArgs(i32, u7, 1 << 6); try testArgs(u32, u7, 0); try testArgs(u32, u7, 1 << 0); try testArgs(u32, u7, 1 << 6); - try testArgs(i64, u7, 0); - try testArgs(i64, u7, 1 << 0); - try testArgs(i64, u7, 1 << 6); try testArgs(u64, u7, 0); try testArgs(u64, u7, 1 << 0); try testArgs(u64, u7, 1 << 6); - try testArgs(i128, u7, 0); - try testArgs(i128, u7, 1 << 0); - try testArgs(i128, u7, 1 << 6); try testArgs(u128, u7, 0); try testArgs(u128, u7, 1 << 0); try testArgs(u128, u7, 1 << 6); - try testArgs(i256, u7, 0); - try testArgs(i256, u7, 1 << 0); - try testArgs(i256, u7, 1 << 6); try testArgs(u256, u7, 0); try testArgs(u256, u7, 1 << 0); try testArgs(u256, u7, 1 << 6); - try testArgs(i512, u7, 0); - try testArgs(i512, u7, 1 << 0); - try testArgs(i512, u7, 1 << 6); try testArgs(u512, u7, 0); try testArgs(u512, u7, 1 << 0); try testArgs(u512, u7, 1 << 6); - try testArgs(i1024, u7, 0); - try testArgs(i1024, u7, 1 << 0); - try testArgs(i1024, u7, 1 << 6); try testArgs(u1024, u7, 0); try testArgs(u1024, u7, 1 << 0); try testArgs(u1024, u7, 1 << 6); @@ -2234,96 +1962,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i8, -1 << 7); try testArgs(i8, i8, -1); try testArgs(i8, i8, 0); - try testArgs(u8, i8, -1 << 7); - try testArgs(u8, i8, -1); - try testArgs(u8, i8, 0); try testArgs(i16, i8, -1 << 7); try testArgs(i16, i8, -1); try testArgs(i16, i8, 0); - try testArgs(u16, i8, -1 << 7); - try testArgs(u16, i8, -1); - try testArgs(u16, i8, 0); try testArgs(i32, i8, -1 << 7); try testArgs(i32, i8, -1); try testArgs(i32, i8, 0); - try testArgs(u32, i8, -1 << 7); - try testArgs(u32, i8, -1); - try testArgs(u32, i8, 0); try testArgs(i64, i8, -1 << 7); try testArgs(i64, i8, -1); try testArgs(i64, i8, 0); - try testArgs(u64, i8, -1 << 7); - try testArgs(u64, i8, -1); - try testArgs(u64, i8, 0); try testArgs(i128, i8, -1 << 7); try testArgs(i128, i8, -1); try testArgs(i128, i8, 0); - try testArgs(u128, i8, -1 << 7); - try testArgs(u128, i8, -1); - try testArgs(u128, i8, 0); try testArgs(i256, i8, -1 << 7); try testArgs(i256, i8, -1); try testArgs(i256, i8, 0); - try testArgs(u256, i8, -1 << 7); - try testArgs(u256, i8, -1); - try testArgs(u256, i8, 0); try testArgs(i512, i8, -1 << 7); try testArgs(i512, i8, -1); try testArgs(i512, i8, 0); - try testArgs(u512, i8, -1 << 7); - try testArgs(u512, i8, -1); - try testArgs(u512, i8, 0); try testArgs(i1024, i8, -1 << 7); try testArgs(i1024, i8, -1); try testArgs(i1024, 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(u8, u8, 0); try testArgs(u8, u8, 1 << 0); try testArgs(u8, u8, 1 << 7); - try testArgs(i16, u8, 0); - try testArgs(i16, u8, 1 << 0); - try testArgs(i16, u8, 1 << 7); try testArgs(u16, u8, 0); try testArgs(u16, u8, 1 << 0); try testArgs(u16, u8, 1 << 7); - try testArgs(i32, u8, 0); - try testArgs(i32, u8, 1 << 0); - try testArgs(i32, u8, 1 << 7); try testArgs(u32, u8, 0); try testArgs(u32, u8, 1 << 0); try testArgs(u32, u8, 1 << 7); - try testArgs(i64, u8, 0); - try testArgs(i64, u8, 1 << 0); - try testArgs(i64, u8, 1 << 7); try testArgs(u64, u8, 0); try testArgs(u64, u8, 1 << 0); try testArgs(u64, u8, 1 << 7); - try testArgs(i128, u8, 0); - try testArgs(i128, u8, 1 << 0); - try testArgs(i128, u8, 1 << 7); try testArgs(u128, u8, 0); try testArgs(u128, u8, 1 << 0); try testArgs(u128, u8, 1 << 7); - try testArgs(i256, u8, 0); - try testArgs(i256, u8, 1 << 0); - try testArgs(i256, u8, 1 << 7); try testArgs(u256, u8, 0); try testArgs(u256, u8, 1 << 0); try testArgs(u256, u8, 1 << 7); - try testArgs(i512, u8, 0); - try testArgs(i512, u8, 1 << 0); - try testArgs(i512, u8, 1 << 7); try testArgs(u512, u8, 0); try testArgs(u512, u8, 1 << 0); try testArgs(u512, u8, 1 << 7); - try testArgs(i1024, u8, 0); - try testArgs(i1024, u8, 1 << 0); - try testArgs(i1024, u8, 1 << 7); try testArgs(u1024, u8, 0); try testArgs(u1024, u8, 1 << 0); try testArgs(u1024, u8, 1 << 7); @@ -2331,96 +2011,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i9, -1 << 8); try testArgs(i8, i9, -1); try testArgs(i8, i9, 0); - try testArgs(u8, i9, -1 << 8); - try testArgs(u8, i9, -1); - try testArgs(u8, i9, 0); try testArgs(i16, i9, -1 << 8); try testArgs(i16, i9, -1); try testArgs(i16, i9, 0); - try testArgs(u16, i9, -1 << 8); - try testArgs(u16, i9, -1); - try testArgs(u16, i9, 0); try testArgs(i32, i9, -1 << 8); try testArgs(i32, i9, -1); try testArgs(i32, i9, 0); - try testArgs(u32, i9, -1 << 8); - try testArgs(u32, i9, -1); - try testArgs(u32, i9, 0); try testArgs(i64, i9, -1 << 8); try testArgs(i64, i9, -1); try testArgs(i64, i9, 0); - try testArgs(u64, i9, -1 << 8); - try testArgs(u64, i9, -1); - try testArgs(u64, i9, 0); try testArgs(i128, i9, -1 << 8); try testArgs(i128, i9, -1); try testArgs(i128, i9, 0); - try testArgs(u128, i9, -1 << 8); - try testArgs(u128, i9, -1); - try testArgs(u128, i9, 0); try testArgs(i256, i9, -1 << 8); try testArgs(i256, i9, -1); try testArgs(i256, i9, 0); - try testArgs(u256, i9, -1 << 8); - try testArgs(u256, i9, -1); - try testArgs(u256, i9, 0); try testArgs(i512, i9, -1 << 8); try testArgs(i512, i9, -1); try testArgs(i512, i9, 0); - try testArgs(u512, i9, -1 << 8); - try testArgs(u512, i9, -1); - try testArgs(u512, i9, 0); try testArgs(i1024, i9, -1 << 8); try testArgs(i1024, i9, -1); try testArgs(i1024, 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(u8, u9, 0); try testArgs(u8, u9, 1 << 0); try testArgs(u8, u9, 1 << 8); - try testArgs(i16, u9, 0); - try testArgs(i16, u9, 1 << 0); - try testArgs(i16, u9, 1 << 8); try testArgs(u16, u9, 0); try testArgs(u16, u9, 1 << 0); try testArgs(u16, u9, 1 << 8); - try testArgs(i32, u9, 0); - try testArgs(i32, u9, 1 << 0); - try testArgs(i32, u9, 1 << 8); try testArgs(u32, u9, 0); try testArgs(u32, u9, 1 << 0); try testArgs(u32, u9, 1 << 8); - try testArgs(i64, u9, 0); - try testArgs(i64, u9, 1 << 0); - try testArgs(i64, u9, 1 << 8); try testArgs(u64, u9, 0); try testArgs(u64, u9, 1 << 0); try testArgs(u64, u9, 1 << 8); - try testArgs(i128, u9, 0); - try testArgs(i128, u9, 1 << 0); - try testArgs(i128, u9, 1 << 8); try testArgs(u128, u9, 0); try testArgs(u128, u9, 1 << 0); try testArgs(u128, u9, 1 << 8); - try testArgs(i256, u9, 0); - try testArgs(i256, u9, 1 << 0); - try testArgs(i256, u9, 1 << 8); try testArgs(u256, u9, 0); try testArgs(u256, u9, 1 << 0); try testArgs(u256, u9, 1 << 8); - try testArgs(i512, u9, 0); - try testArgs(i512, u9, 1 << 0); - try testArgs(i512, u9, 1 << 8); try testArgs(u512, u9, 0); try testArgs(u512, u9, 1 << 0); try testArgs(u512, u9, 1 << 8); - try testArgs(i1024, u9, 0); - try testArgs(i1024, u9, 1 << 0); - try testArgs(i1024, u9, 1 << 8); try testArgs(u1024, u9, 0); try testArgs(u1024, u9, 1 << 0); try testArgs(u1024, u9, 1 << 8); @@ -2428,96 +2060,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i15, -1 << 14); try testArgs(i8, i15, -1); try testArgs(i8, i15, 0); - try testArgs(u8, i15, -1 << 14); - try testArgs(u8, i15, -1); - try testArgs(u8, i15, 0); try testArgs(i16, i15, -1 << 14); try testArgs(i16, i15, -1); try testArgs(i16, i15, 0); - try testArgs(u16, i15, -1 << 14); - try testArgs(u16, i15, -1); - try testArgs(u16, i15, 0); try testArgs(i32, i15, -1 << 14); try testArgs(i32, i15, -1); try testArgs(i32, i15, 0); - try testArgs(u32, i15, -1 << 14); - try testArgs(u32, i15, -1); - try testArgs(u32, i15, 0); try testArgs(i64, i15, -1 << 14); try testArgs(i64, i15, -1); try testArgs(i64, i15, 0); - try testArgs(u64, i15, -1 << 14); - try testArgs(u64, i15, -1); - try testArgs(u64, i15, 0); try testArgs(i128, i15, -1 << 14); try testArgs(i128, i15, -1); try testArgs(i128, i15, 0); - try testArgs(u128, i15, -1 << 14); - try testArgs(u128, i15, -1); - try testArgs(u128, i15, 0); try testArgs(i256, i15, -1 << 14); try testArgs(i256, i15, -1); try testArgs(i256, i15, 0); - try testArgs(u256, i15, -1 << 14); - try testArgs(u256, i15, -1); - try testArgs(u256, i15, 0); try testArgs(i512, i15, -1 << 14); try testArgs(i512, i15, -1); try testArgs(i512, i15, 0); - try testArgs(u512, i15, -1 << 14); - try testArgs(u512, i15, -1); - try testArgs(u512, i15, 0); try testArgs(i1024, i15, -1 << 14); try testArgs(i1024, i15, -1); try testArgs(i1024, 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(u8, u15, 0); try testArgs(u8, u15, 1 << 0); try testArgs(u8, u15, 1 << 14); - try testArgs(i16, u15, 0); - try testArgs(i16, u15, 1 << 0); - try testArgs(i16, u15, 1 << 14); try testArgs(u16, u15, 0); try testArgs(u16, u15, 1 << 0); try testArgs(u16, u15, 1 << 14); - try testArgs(i32, u15, 0); - try testArgs(i32, u15, 1 << 0); - try testArgs(i32, u15, 1 << 14); try testArgs(u32, u15, 0); try testArgs(u32, u15, 1 << 0); try testArgs(u32, u15, 1 << 14); - try testArgs(i64, u15, 0); - try testArgs(i64, u15, 1 << 0); - try testArgs(i64, u15, 1 << 14); try testArgs(u64, u15, 0); try testArgs(u64, u15, 1 << 0); try testArgs(u64, u15, 1 << 14); - try testArgs(i128, u15, 0); - try testArgs(i128, u15, 1 << 0); - try testArgs(i128, u15, 1 << 14); try testArgs(u128, u15, 0); try testArgs(u128, u15, 1 << 0); try testArgs(u128, u15, 1 << 14); - try testArgs(i256, u15, 0); - try testArgs(i256, u15, 1 << 0); - try testArgs(i256, u15, 1 << 14); try testArgs(u256, u15, 0); try testArgs(u256, u15, 1 << 0); try testArgs(u256, u15, 1 << 14); - try testArgs(i512, u15, 0); - try testArgs(i512, u15, 1 << 0); - try testArgs(i512, u15, 1 << 14); try testArgs(u512, u15, 0); try testArgs(u512, u15, 1 << 0); try testArgs(u512, u15, 1 << 14); - try testArgs(i1024, u15, 0); - try testArgs(i1024, u15, 1 << 0); - try testArgs(i1024, u15, 1 << 14); try testArgs(u1024, u15, 0); try testArgs(u1024, u15, 1 << 0); try testArgs(u1024, u15, 1 << 14); @@ -2525,96 +2109,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i16, -1 << 15); try testArgs(i8, i16, -1); try testArgs(i8, i16, 0); - try testArgs(u8, i16, -1 << 15); - try testArgs(u8, i16, -1); - try testArgs(u8, i16, 0); try testArgs(i16, i16, -1 << 15); try testArgs(i16, i16, -1); try testArgs(i16, i16, 0); - try testArgs(u16, i16, -1 << 15); - try testArgs(u16, i16, -1); - try testArgs(u16, i16, 0); try testArgs(i32, i16, -1 << 15); try testArgs(i32, i16, -1); try testArgs(i32, i16, 0); - try testArgs(u32, i16, -1 << 15); - try testArgs(u32, i16, -1); - try testArgs(u32, i16, 0); try testArgs(i64, i16, -1 << 15); try testArgs(i64, i16, -1); try testArgs(i64, i16, 0); - try testArgs(u64, i16, -1 << 15); - try testArgs(u64, i16, -1); - try testArgs(u64, i16, 0); try testArgs(i128, i16, -1 << 15); try testArgs(i128, i16, -1); try testArgs(i128, i16, 0); - try testArgs(u128, i16, -1 << 15); - try testArgs(u128, i16, -1); - try testArgs(u128, i16, 0); try testArgs(i256, i16, -1 << 15); try testArgs(i256, i16, -1); try testArgs(i256, i16, 0); - try testArgs(u256, i16, -1 << 15); - try testArgs(u256, i16, -1); - try testArgs(u256, i16, 0); try testArgs(i512, i16, -1 << 15); try testArgs(i512, i16, -1); try testArgs(i512, i16, 0); - try testArgs(u512, i16, -1 << 15); - try testArgs(u512, i16, -1); - try testArgs(u512, i16, 0); try testArgs(i1024, i16, -1 << 15); try testArgs(i1024, i16, -1); try testArgs(i1024, 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(u8, u16, 0); try testArgs(u8, u16, 1 << 0); try testArgs(u8, u16, 1 << 15); - try testArgs(i16, u16, 0); - try testArgs(i16, u16, 1 << 0); - try testArgs(i16, u16, 1 << 15); try testArgs(u16, u16, 0); try testArgs(u16, u16, 1 << 0); try testArgs(u16, u16, 1 << 15); - try testArgs(i32, u16, 0); - try testArgs(i32, u16, 1 << 0); - try testArgs(i32, u16, 1 << 15); try testArgs(u32, u16, 0); try testArgs(u32, u16, 1 << 0); try testArgs(u32, u16, 1 << 15); - try testArgs(i64, u16, 0); - try testArgs(i64, u16, 1 << 0); - try testArgs(i64, u16, 1 << 15); try testArgs(u64, u16, 0); try testArgs(u64, u16, 1 << 0); try testArgs(u64, u16, 1 << 15); - try testArgs(i128, u16, 0); - try testArgs(i128, u16, 1 << 0); - try testArgs(i128, u16, 1 << 15); try testArgs(u128, u16, 0); try testArgs(u128, u16, 1 << 0); try testArgs(u128, u16, 1 << 15); - try testArgs(i256, u16, 0); - try testArgs(i256, u16, 1 << 0); - try testArgs(i256, u16, 1 << 15); try testArgs(u256, u16, 0); try testArgs(u256, u16, 1 << 0); try testArgs(u256, u16, 1 << 15); - try testArgs(i512, u16, 0); - try testArgs(i512, u16, 1 << 0); - try testArgs(i512, u16, 1 << 15); try testArgs(u512, u16, 0); try testArgs(u512, u16, 1 << 0); try testArgs(u512, u16, 1 << 15); - try testArgs(i1024, u16, 0); - try testArgs(i1024, u16, 1 << 0); - try testArgs(i1024, u16, 1 << 15); try testArgs(u1024, u16, 0); try testArgs(u1024, u16, 1 << 0); try testArgs(u1024, u16, 1 << 15); @@ -2622,96 +2158,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i17, -1 << 16); try testArgs(i8, i17, -1); try testArgs(i8, i17, 0); - try testArgs(u8, i17, -1 << 16); - try testArgs(u8, i17, -1); - try testArgs(u8, i17, 0); try testArgs(i16, i17, -1 << 16); try testArgs(i16, i17, -1); try testArgs(i16, i17, 0); - try testArgs(u16, i17, -1 << 16); - try testArgs(u16, i17, -1); - try testArgs(u16, i17, 0); try testArgs(i32, i17, -1 << 16); try testArgs(i32, i17, -1); try testArgs(i32, i17, 0); - try testArgs(u32, i17, -1 << 16); - try testArgs(u32, i17, -1); - try testArgs(u32, i17, 0); try testArgs(i64, i17, -1 << 16); try testArgs(i64, i17, -1); try testArgs(i64, i17, 0); - try testArgs(u64, i17, -1 << 16); - try testArgs(u64, i17, -1); - try testArgs(u64, i17, 0); try testArgs(i128, i17, -1 << 16); try testArgs(i128, i17, -1); try testArgs(i128, i17, 0); - try testArgs(u128, i17, -1 << 16); - try testArgs(u128, i17, -1); - try testArgs(u128, i17, 0); try testArgs(i256, i17, -1 << 16); try testArgs(i256, i17, -1); try testArgs(i256, i17, 0); - try testArgs(u256, i17, -1 << 16); - try testArgs(u256, i17, -1); - try testArgs(u256, i17, 0); try testArgs(i512, i17, -1 << 16); try testArgs(i512, i17, -1); try testArgs(i512, i17, 0); - try testArgs(u512, i17, -1 << 16); - try testArgs(u512, i17, -1); - try testArgs(u512, i17, 0); try testArgs(i1024, i17, -1 << 16); try testArgs(i1024, i17, -1); try testArgs(i1024, 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(u8, u17, 0); try testArgs(u8, u17, 1 << 0); try testArgs(u8, u17, 1 << 16); - try testArgs(i16, u17, 0); - try testArgs(i16, u17, 1 << 0); - try testArgs(i16, u17, 1 << 16); try testArgs(u16, u17, 0); try testArgs(u16, u17, 1 << 0); try testArgs(u16, u17, 1 << 16); - try testArgs(i32, u17, 0); - try testArgs(i32, u17, 1 << 0); - try testArgs(i32, u17, 1 << 16); try testArgs(u32, u17, 0); try testArgs(u32, u17, 1 << 0); try testArgs(u32, u17, 1 << 16); - try testArgs(i64, u17, 0); - try testArgs(i64, u17, 1 << 0); - try testArgs(i64, u17, 1 << 16); try testArgs(u64, u17, 0); try testArgs(u64, u17, 1 << 0); try testArgs(u64, u17, 1 << 16); - try testArgs(i128, u17, 0); - try testArgs(i128, u17, 1 << 0); - try testArgs(i128, u17, 1 << 16); try testArgs(u128, u17, 0); try testArgs(u128, u17, 1 << 0); try testArgs(u128, u17, 1 << 16); - try testArgs(i256, u17, 0); - try testArgs(i256, u17, 1 << 0); - try testArgs(i256, u17, 1 << 16); try testArgs(u256, u17, 0); try testArgs(u256, u17, 1 << 0); try testArgs(u256, u17, 1 << 16); - try testArgs(i512, u17, 0); - try testArgs(i512, u17, 1 << 0); - try testArgs(i512, u17, 1 << 16); try testArgs(u512, u17, 0); try testArgs(u512, u17, 1 << 0); try testArgs(u512, u17, 1 << 16); - try testArgs(i1024, u17, 0); - try testArgs(i1024, u17, 1 << 0); - try testArgs(i1024, u17, 1 << 16); try testArgs(u1024, u17, 0); try testArgs(u1024, u17, 1 << 0); try testArgs(u1024, u17, 1 << 16); @@ -2719,96 +2207,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i31, -1 << 30); try testArgs(i8, i31, -1); try testArgs(i8, i31, 0); - try testArgs(u8, i31, -1 << 30); - try testArgs(u8, i31, -1); - try testArgs(u8, i31, 0); try testArgs(i16, i31, -1 << 30); try testArgs(i16, i31, -1); try testArgs(i16, i31, 0); - try testArgs(u16, i31, -1 << 30); - try testArgs(u16, i31, -1); - try testArgs(u16, i31, 0); try testArgs(i32, i31, -1 << 30); try testArgs(i32, i31, -1); try testArgs(i32, i31, 0); - try testArgs(u32, i31, -1 << 30); - try testArgs(u32, i31, -1); - try testArgs(u32, i31, 0); try testArgs(i64, i31, -1 << 30); try testArgs(i64, i31, -1); try testArgs(i64, i31, 0); - try testArgs(u64, i31, -1 << 30); - try testArgs(u64, i31, -1); - try testArgs(u64, i31, 0); try testArgs(i128, i31, -1 << 30); try testArgs(i128, i31, -1); try testArgs(i128, i31, 0); - try testArgs(u128, i31, -1 << 30); - try testArgs(u128, i31, -1); - try testArgs(u128, i31, 0); try testArgs(i256, i31, -1 << 30); try testArgs(i256, i31, -1); try testArgs(i256, i31, 0); - try testArgs(u256, i31, -1 << 30); - try testArgs(u256, i31, -1); - try testArgs(u256, i31, 0); try testArgs(i512, i31, -1 << 30); try testArgs(i512, i31, -1); try testArgs(i512, i31, 0); - try testArgs(u512, i31, -1 << 30); - try testArgs(u512, i31, -1); - try testArgs(u512, i31, 0); try testArgs(i1024, i31, -1 << 30); try testArgs(i1024, i31, -1); try testArgs(i1024, 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(u8, u31, 0); try testArgs(u8, u31, 1 << 0); try testArgs(u8, u31, 1 << 30); - try testArgs(i16, u31, 0); - try testArgs(i16, u31, 1 << 0); - try testArgs(i16, u31, 1 << 30); try testArgs(u16, u31, 0); try testArgs(u16, u31, 1 << 0); try testArgs(u16, u31, 1 << 30); - try testArgs(i32, u31, 0); - try testArgs(i32, u31, 1 << 0); - try testArgs(i32, u31, 1 << 30); try testArgs(u32, u31, 0); try testArgs(u32, u31, 1 << 0); try testArgs(u32, u31, 1 << 30); - try testArgs(i64, u31, 0); - try testArgs(i64, u31, 1 << 0); - try testArgs(i64, u31, 1 << 30); try testArgs(u64, u31, 0); try testArgs(u64, u31, 1 << 0); try testArgs(u64, u31, 1 << 30); - try testArgs(i128, u31, 0); - try testArgs(i128, u31, 1 << 0); - try testArgs(i128, u31, 1 << 30); try testArgs(u128, u31, 0); try testArgs(u128, u31, 1 << 0); try testArgs(u128, u31, 1 << 30); - try testArgs(i256, u31, 0); - try testArgs(i256, u31, 1 << 0); - try testArgs(i256, u31, 1 << 30); try testArgs(u256, u31, 0); try testArgs(u256, u31, 1 << 0); try testArgs(u256, u31, 1 << 30); - try testArgs(i512, u31, 0); - try testArgs(i512, u31, 1 << 0); - try testArgs(i512, u31, 1 << 30); try testArgs(u512, u31, 0); try testArgs(u512, u31, 1 << 0); try testArgs(u512, u31, 1 << 30); - try testArgs(i1024, u31, 0); - try testArgs(i1024, u31, 1 << 0); - try testArgs(i1024, u31, 1 << 30); try testArgs(u1024, u31, 0); try testArgs(u1024, u31, 1 << 0); try testArgs(u1024, u31, 1 << 30); @@ -2816,96 +2256,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i32, -1 << 31); try testArgs(i8, i32, -1); try testArgs(i8, i32, 0); - try testArgs(u8, i32, -1 << 31); - try testArgs(u8, i32, -1); - try testArgs(u8, i32, 0); try testArgs(i16, i32, -1 << 31); try testArgs(i16, i32, -1); try testArgs(i16, i32, 0); - try testArgs(u16, i32, -1 << 31); - try testArgs(u16, i32, -1); - try testArgs(u16, i32, 0); try testArgs(i32, i32, -1 << 31); try testArgs(i32, i32, -1); try testArgs(i32, i32, 0); - try testArgs(u32, i32, -1 << 31); - try testArgs(u32, i32, -1); - try testArgs(u32, i32, 0); try testArgs(i64, i32, -1 << 31); try testArgs(i64, i32, -1); try testArgs(i64, i32, 0); - try testArgs(u64, i32, -1 << 31); - try testArgs(u64, i32, -1); - try testArgs(u64, i32, 0); try testArgs(i128, i32, -1 << 31); try testArgs(i128, i32, -1); try testArgs(i128, i32, 0); - try testArgs(u128, i32, -1 << 31); - try testArgs(u128, i32, -1); - try testArgs(u128, i32, 0); try testArgs(i256, i32, -1 << 31); try testArgs(i256, i32, -1); try testArgs(i256, i32, 0); - try testArgs(u256, i32, -1 << 31); - try testArgs(u256, i32, -1); - try testArgs(u256, i32, 0); try testArgs(i512, i32, -1 << 31); try testArgs(i512, i32, -1); try testArgs(i512, i32, 0); - try testArgs(u512, i32, -1 << 31); - try testArgs(u512, i32, -1); - try testArgs(u512, i32, 0); try testArgs(i1024, i32, -1 << 31); try testArgs(i1024, i32, -1); try testArgs(i1024, 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(u8, u32, 0); try testArgs(u8, u32, 1 << 0); try testArgs(u8, u32, 1 << 31); - try testArgs(i16, u32, 0); - try testArgs(i16, u32, 1 << 0); - try testArgs(i16, u32, 1 << 31); try testArgs(u16, u32, 0); try testArgs(u16, u32, 1 << 0); try testArgs(u16, u32, 1 << 31); - try testArgs(i32, u32, 0); - try testArgs(i32, u32, 1 << 0); - try testArgs(i32, u32, 1 << 31); try testArgs(u32, u32, 0); try testArgs(u32, u32, 1 << 0); try testArgs(u32, u32, 1 << 31); - try testArgs(i64, u32, 0); - try testArgs(i64, u32, 1 << 0); - try testArgs(i64, u32, 1 << 31); try testArgs(u64, u32, 0); try testArgs(u64, u32, 1 << 0); try testArgs(u64, u32, 1 << 31); - try testArgs(i128, u32, 0); - try testArgs(i128, u32, 1 << 0); - try testArgs(i128, u32, 1 << 31); try testArgs(u128, u32, 0); try testArgs(u128, u32, 1 << 0); try testArgs(u128, u32, 1 << 31); - try testArgs(i256, u32, 0); - try testArgs(i256, u32, 1 << 0); - try testArgs(i256, u32, 1 << 31); try testArgs(u256, u32, 0); try testArgs(u256, u32, 1 << 0); try testArgs(u256, u32, 1 << 31); - try testArgs(i512, u32, 0); - try testArgs(i512, u32, 1 << 0); - try testArgs(i512, u32, 1 << 31); try testArgs(u512, u32, 0); try testArgs(u512, u32, 1 << 0); try testArgs(u512, u32, 1 << 31); - try testArgs(i1024, u32, 0); - try testArgs(i1024, u32, 1 << 0); - try testArgs(i1024, u32, 1 << 31); try testArgs(u1024, u32, 0); try testArgs(u1024, u32, 1 << 0); try testArgs(u1024, u32, 1 << 31); @@ -2913,96 +2305,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i33, -1 << 32); try testArgs(i8, i33, -1); try testArgs(i8, i33, 0); - try testArgs(u8, i33, -1 << 32); - try testArgs(u8, i33, -1); - try testArgs(u8, i33, 0); try testArgs(i16, i33, -1 << 32); try testArgs(i16, i33, -1); try testArgs(i16, i33, 0); - try testArgs(u16, i33, -1 << 32); - try testArgs(u16, i33, -1); - try testArgs(u16, i33, 0); try testArgs(i32, i33, -1 << 32); try testArgs(i32, i33, -1); try testArgs(i32, i33, 0); - try testArgs(u32, i33, -1 << 32); - try testArgs(u32, i33, -1); - try testArgs(u32, i33, 0); try testArgs(i64, i33, -1 << 32); try testArgs(i64, i33, -1); try testArgs(i64, i33, 0); - try testArgs(u64, i33, -1 << 32); - try testArgs(u64, i33, -1); - try testArgs(u64, i33, 0); try testArgs(i128, i33, -1 << 32); try testArgs(i128, i33, -1); try testArgs(i128, i33, 0); - try testArgs(u128, i33, -1 << 32); - try testArgs(u128, i33, -1); - try testArgs(u128, i33, 0); try testArgs(i256, i33, -1 << 32); try testArgs(i256, i33, -1); try testArgs(i256, i33, 0); - try testArgs(u256, i33, -1 << 32); - try testArgs(u256, i33, -1); - try testArgs(u256, i33, 0); try testArgs(i512, i33, -1 << 32); try testArgs(i512, i33, -1); try testArgs(i512, i33, 0); - try testArgs(u512, i33, -1 << 32); - try testArgs(u512, i33, -1); - try testArgs(u512, i33, 0); try testArgs(i1024, i33, -1 << 32); try testArgs(i1024, i33, -1); try testArgs(i1024, 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(u8, u33, 0); try testArgs(u8, u33, 1 << 0); try testArgs(u8, u33, 1 << 32); - try testArgs(i16, u33, 0); - try testArgs(i16, u33, 1 << 0); - try testArgs(i16, u33, 1 << 32); try testArgs(u16, u33, 0); try testArgs(u16, u33, 1 << 0); try testArgs(u16, u33, 1 << 32); - try testArgs(i32, u33, 0); - try testArgs(i32, u33, 1 << 0); - try testArgs(i32, u33, 1 << 32); try testArgs(u32, u33, 0); try testArgs(u32, u33, 1 << 0); try testArgs(u32, u33, 1 << 32); - try testArgs(i64, u33, 0); - try testArgs(i64, u33, 1 << 0); - try testArgs(i64, u33, 1 << 32); try testArgs(u64, u33, 0); try testArgs(u64, u33, 1 << 0); try testArgs(u64, u33, 1 << 32); - try testArgs(i128, u33, 0); - try testArgs(i128, u33, 1 << 0); - try testArgs(i128, u33, 1 << 32); try testArgs(u128, u33, 0); try testArgs(u128, u33, 1 << 0); try testArgs(u128, u33, 1 << 32); - try testArgs(i256, u33, 0); - try testArgs(i256, u33, 1 << 0); - try testArgs(i256, u33, 1 << 32); try testArgs(u256, u33, 0); try testArgs(u256, u33, 1 << 0); try testArgs(u256, u33, 1 << 32); - try testArgs(i512, u33, 0); - try testArgs(i512, u33, 1 << 0); - try testArgs(i512, u33, 1 << 32); try testArgs(u512, u33, 0); try testArgs(u512, u33, 1 << 0); try testArgs(u512, u33, 1 << 32); - try testArgs(i1024, u33, 0); - try testArgs(i1024, u33, 1 << 0); - try testArgs(i1024, u33, 1 << 32); try testArgs(u1024, u33, 0); try testArgs(u1024, u33, 1 << 0); try testArgs(u1024, u33, 1 << 32); @@ -3010,96 +2354,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i63, -1 << 62); try testArgs(i8, i63, -1); try testArgs(i8, i63, 0); - try testArgs(u8, i63, -1 << 62); - try testArgs(u8, i63, -1); - try testArgs(u8, i63, 0); try testArgs(i16, i63, -1 << 62); try testArgs(i16, i63, -1); try testArgs(i16, i63, 0); - try testArgs(u16, i63, -1 << 62); - try testArgs(u16, i63, -1); - try testArgs(u16, i63, 0); try testArgs(i32, i63, -1 << 62); try testArgs(i32, i63, -1); try testArgs(i32, i63, 0); - try testArgs(u32, i63, -1 << 62); - try testArgs(u32, i63, -1); - try testArgs(u32, i63, 0); try testArgs(i64, i63, -1 << 62); try testArgs(i64, i63, -1); try testArgs(i64, i63, 0); - try testArgs(u64, i63, -1 << 62); - try testArgs(u64, i63, -1); - try testArgs(u64, i63, 0); try testArgs(i128, i63, -1 << 62); try testArgs(i128, i63, -1); try testArgs(i128, i63, 0); - try testArgs(u128, i63, -1 << 62); - try testArgs(u128, i63, -1); - try testArgs(u128, i63, 0); try testArgs(i256, i63, -1 << 62); try testArgs(i256, i63, -1); try testArgs(i256, i63, 0); - try testArgs(u256, i63, -1 << 62); - try testArgs(u256, i63, -1); - try testArgs(u256, i63, 0); try testArgs(i512, i63, -1 << 62); try testArgs(i512, i63, -1); try testArgs(i512, i63, 0); - try testArgs(u512, i63, -1 << 62); - try testArgs(u512, i63, -1); - try testArgs(u512, i63, 0); try testArgs(i1024, i63, -1 << 62); try testArgs(i1024, i63, -1); try testArgs(i1024, 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(u8, u63, 0); try testArgs(u8, u63, 1 << 0); try testArgs(u8, u63, 1 << 62); - try testArgs(i16, u63, 0); - try testArgs(i16, u63, 1 << 0); - try testArgs(i16, u63, 1 << 62); try testArgs(u16, u63, 0); try testArgs(u16, u63, 1 << 0); try testArgs(u16, u63, 1 << 62); - try testArgs(i32, u63, 0); - try testArgs(i32, u63, 1 << 0); - try testArgs(i32, u63, 1 << 62); try testArgs(u32, u63, 0); try testArgs(u32, u63, 1 << 0); try testArgs(u32, u63, 1 << 62); - try testArgs(i64, u63, 0); - try testArgs(i64, u63, 1 << 0); - try testArgs(i64, u63, 1 << 62); try testArgs(u64, u63, 0); try testArgs(u64, u63, 1 << 0); try testArgs(u64, u63, 1 << 62); - try testArgs(i128, u63, 0); - try testArgs(i128, u63, 1 << 0); - try testArgs(i128, u63, 1 << 62); try testArgs(u128, u63, 0); try testArgs(u128, u63, 1 << 0); try testArgs(u128, u63, 1 << 62); - try testArgs(i256, u63, 0); - try testArgs(i256, u63, 1 << 0); - try testArgs(i256, u63, 1 << 62); try testArgs(u256, u63, 0); try testArgs(u256, u63, 1 << 0); try testArgs(u256, u63, 1 << 62); - try testArgs(i512, u63, 0); - try testArgs(i512, u63, 1 << 0); - try testArgs(i512, u63, 1 << 62); try testArgs(u512, u63, 0); try testArgs(u512, u63, 1 << 0); try testArgs(u512, u63, 1 << 62); - try testArgs(i1024, u63, 0); - try testArgs(i1024, u63, 1 << 0); - try testArgs(i1024, u63, 1 << 62); try testArgs(u1024, u63, 0); try testArgs(u1024, u63, 1 << 0); try testArgs(u1024, u63, 1 << 62); @@ -3107,96 +2403,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i64, -1 << 63); try testArgs(i8, i64, -1); try testArgs(i8, i64, 0); - try testArgs(u8, i64, -1 << 63); - try testArgs(u8, i64, -1); - try testArgs(u8, i64, 0); try testArgs(i16, i64, -1 << 63); try testArgs(i16, i64, -1); try testArgs(i16, i64, 0); - try testArgs(u16, i64, -1 << 63); - try testArgs(u16, i64, -1); - try testArgs(u16, i64, 0); try testArgs(i32, i64, -1 << 63); try testArgs(i32, i64, -1); try testArgs(i32, i64, 0); - try testArgs(u32, i64, -1 << 63); - try testArgs(u32, i64, -1); - try testArgs(u32, i64, 0); try testArgs(i64, i64, -1 << 63); try testArgs(i64, i64, -1); try testArgs(i64, i64, 0); - try testArgs(u64, i64, -1 << 63); - try testArgs(u64, i64, -1); - try testArgs(u64, i64, 0); try testArgs(i128, i64, -1 << 63); try testArgs(i128, i64, -1); try testArgs(i128, i64, 0); - try testArgs(u128, i64, -1 << 63); - try testArgs(u128, i64, -1); - try testArgs(u128, i64, 0); try testArgs(i256, i64, -1 << 63); try testArgs(i256, i64, -1); try testArgs(i256, i64, 0); - try testArgs(u256, i64, -1 << 63); - try testArgs(u256, i64, -1); - try testArgs(u256, i64, 0); try testArgs(i512, i64, -1 << 63); try testArgs(i512, i64, -1); try testArgs(i512, i64, 0); - try testArgs(u512, i64, -1 << 63); - try testArgs(u512, i64, -1); - try testArgs(u512, i64, 0); try testArgs(i1024, i64, -1 << 63); try testArgs(i1024, i64, -1); try testArgs(i1024, 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(u8, u64, 0); try testArgs(u8, u64, 1 << 0); try testArgs(u8, u64, 1 << 63); - try testArgs(i16, u64, 0); - try testArgs(i16, u64, 1 << 0); - try testArgs(i16, u64, 1 << 63); try testArgs(u16, u64, 0); try testArgs(u16, u64, 1 << 0); try testArgs(u16, u64, 1 << 63); - try testArgs(i32, u64, 0); - try testArgs(i32, u64, 1 << 0); - try testArgs(i32, u64, 1 << 63); try testArgs(u32, u64, 0); try testArgs(u32, u64, 1 << 0); try testArgs(u32, u64, 1 << 63); - try testArgs(i64, u64, 0); - try testArgs(i64, u64, 1 << 0); - try testArgs(i64, u64, 1 << 63); try testArgs(u64, u64, 0); try testArgs(u64, u64, 1 << 0); try testArgs(u64, u64, 1 << 63); - try testArgs(i128, u64, 0); - try testArgs(i128, u64, 1 << 0); - try testArgs(i128, u64, 1 << 63); try testArgs(u128, u64, 0); try testArgs(u128, u64, 1 << 0); try testArgs(u128, u64, 1 << 63); - try testArgs(i256, u64, 0); - try testArgs(i256, u64, 1 << 0); - try testArgs(i256, u64, 1 << 63); try testArgs(u256, u64, 0); try testArgs(u256, u64, 1 << 0); try testArgs(u256, u64, 1 << 63); - try testArgs(i512, u64, 0); - try testArgs(i512, u64, 1 << 0); - try testArgs(i512, u64, 1 << 63); try testArgs(u512, u64, 0); try testArgs(u512, u64, 1 << 0); try testArgs(u512, u64, 1 << 63); - try testArgs(i1024, u64, 0); - try testArgs(i1024, u64, 1 << 0); - try testArgs(i1024, u64, 1 << 63); try testArgs(u1024, u64, 0); try testArgs(u1024, u64, 1 << 0); try testArgs(u1024, u64, 1 << 63); @@ -3204,96 +2452,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i65, -1 << 64); try testArgs(i8, i65, -1); try testArgs(i8, i65, 0); - try testArgs(u8, i65, -1 << 64); - try testArgs(u8, i65, -1); - try testArgs(u8, i65, 0); try testArgs(i16, i65, -1 << 64); try testArgs(i16, i65, -1); try testArgs(i16, i65, 0); - try testArgs(u16, i65, -1 << 64); - try testArgs(u16, i65, -1); - try testArgs(u16, i65, 0); try testArgs(i32, i65, -1 << 64); try testArgs(i32, i65, -1); try testArgs(i32, i65, 0); - try testArgs(u32, i65, -1 << 64); - try testArgs(u32, i65, -1); - try testArgs(u32, i65, 0); try testArgs(i64, i65, -1 << 64); try testArgs(i64, i65, -1); try testArgs(i64, i65, 0); - try testArgs(u64, i65, -1 << 64); - try testArgs(u64, i65, -1); - try testArgs(u64, i65, 0); try testArgs(i128, i65, -1 << 64); try testArgs(i128, i65, -1); try testArgs(i128, i65, 0); - try testArgs(u128, i65, -1 << 64); - try testArgs(u128, i65, -1); - try testArgs(u128, i65, 0); try testArgs(i256, i65, -1 << 64); try testArgs(i256, i65, -1); try testArgs(i256, i65, 0); - try testArgs(u256, i65, -1 << 64); - try testArgs(u256, i65, -1); - try testArgs(u256, i65, 0); try testArgs(i512, i65, -1 << 64); try testArgs(i512, i65, -1); try testArgs(i512, i65, 0); - try testArgs(u512, i65, -1 << 64); - try testArgs(u512, i65, -1); - try testArgs(u512, i65, 0); try testArgs(i1024, i65, -1 << 64); try testArgs(i1024, i65, -1); try testArgs(i1024, 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(u8, u65, 0); try testArgs(u8, u65, 1 << 0); try testArgs(u8, u65, 1 << 64); - try testArgs(i16, u65, 0); - try testArgs(i16, u65, 1 << 0); - try testArgs(i16, u65, 1 << 64); try testArgs(u16, u65, 0); try testArgs(u16, u65, 1 << 0); try testArgs(u16, u65, 1 << 64); - try testArgs(i32, u65, 0); - try testArgs(i32, u65, 1 << 0); - try testArgs(i32, u65, 1 << 64); try testArgs(u32, u65, 0); try testArgs(u32, u65, 1 << 0); try testArgs(u32, u65, 1 << 64); - try testArgs(i64, u65, 0); - try testArgs(i64, u65, 1 << 0); - try testArgs(i64, u65, 1 << 64); try testArgs(u64, u65, 0); try testArgs(u64, u65, 1 << 0); try testArgs(u64, u65, 1 << 64); - try testArgs(i128, u65, 0); - try testArgs(i128, u65, 1 << 0); - try testArgs(i128, u65, 1 << 64); try testArgs(u128, u65, 0); try testArgs(u128, u65, 1 << 0); try testArgs(u128, u65, 1 << 64); - try testArgs(i256, u65, 0); - try testArgs(i256, u65, 1 << 0); - try testArgs(i256, u65, 1 << 64); try testArgs(u256, u65, 0); try testArgs(u256, u65, 1 << 0); try testArgs(u256, u65, 1 << 64); - try testArgs(i512, u65, 0); - try testArgs(i512, u65, 1 << 0); - try testArgs(i512, u65, 1 << 64); try testArgs(u512, u65, 0); try testArgs(u512, u65, 1 << 0); try testArgs(u512, u65, 1 << 64); - try testArgs(i1024, u65, 0); - try testArgs(i1024, u65, 1 << 0); - try testArgs(i1024, u65, 1 << 64); try testArgs(u1024, u65, 0); try testArgs(u1024, u65, 1 << 0); try testArgs(u1024, u65, 1 << 64); @@ -3301,290 +2501,97 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i95, -1 << 94); try testArgs(i8, i95, -1); try testArgs(i8, i95, 0); - try testArgs(u8, i95, -1 << 94); - try testArgs(u8, i95, -1); - try testArgs(u8, i95, 0); try testArgs(i16, i95, -1 << 94); try testArgs(i16, i95, -1); try testArgs(i16, i95, 0); - try testArgs(u16, i95, -1 << 94); - try testArgs(u16, i95, -1); - try testArgs(u16, i95, 0); try testArgs(i32, i95, -1 << 94); try testArgs(i32, i95, -1); try testArgs(i32, i95, 0); - try testArgs(u32, i95, -1 << 94); - try testArgs(u32, i95, -1); - try testArgs(u32, i95, 0); try testArgs(i64, i95, -1 << 94); try testArgs(i64, i95, -1); try testArgs(i64, i95, 0); - try testArgs(u64, i95, -1 << 94); - try testArgs(u64, i95, -1); - try testArgs(u64, i95, 0); try testArgs(i128, i95, -1 << 94); try testArgs(i128, i95, -1); try testArgs(i128, i95, 0); - try testArgs(u128, i95, -1 << 94); - try testArgs(u128, i95, -1); - try testArgs(u128, i95, 0); try testArgs(i256, i95, -1 << 94); try testArgs(i256, i95, -1); try testArgs(i256, i95, 0); - try testArgs(u256, i95, -1 << 94); - try testArgs(u256, i95, -1); - try testArgs(u256, i95, 0); try testArgs(i512, i95, -1 << 94); try testArgs(i512, i95, -1); try testArgs(i512, i95, 0); - try testArgs(u512, i95, -1 << 94); - try testArgs(u512, i95, -1); - try testArgs(u512, i95, 0); try testArgs(i1024, i95, -1 << 94); try testArgs(i1024, i95, -1); try testArgs(i1024, 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(u8, u95, 0); try testArgs(u8, u95, 1 << 0); try testArgs(u8, u95, 1 << 94); - try testArgs(i16, u95, 0); - try testArgs(i16, u95, 1 << 0); - try testArgs(i16, u95, 1 << 94); try testArgs(u16, u95, 0); try testArgs(u16, u95, 1 << 0); try testArgs(u16, u95, 1 << 94); - try testArgs(i32, u95, 0); - try testArgs(i32, u95, 1 << 0); - try testArgs(i32, u95, 1 << 94); try testArgs(u32, u95, 0); try testArgs(u32, u95, 1 << 0); try testArgs(u32, u95, 1 << 94); - try testArgs(i64, u95, 0); - try testArgs(i64, u95, 1 << 0); - try testArgs(i64, u95, 1 << 94); try testArgs(u64, u95, 0); try testArgs(u64, u95, 1 << 0); try testArgs(u64, u95, 1 << 94); - try testArgs(i128, u95, 0); - try testArgs(i128, u95, 1 << 0); - try testArgs(i128, u95, 1 << 94); try testArgs(u128, u95, 0); try testArgs(u128, u95, 1 << 0); try testArgs(u128, u95, 1 << 94); - try testArgs(i256, u95, 0); - try testArgs(i256, u95, 1 << 0); - try testArgs(i256, u95, 1 << 94); try testArgs(u256, u95, 0); try testArgs(u256, u95, 1 << 0); try testArgs(u256, u95, 1 << 94); - try testArgs(i512, u95, 0); - try testArgs(i512, u95, 1 << 0); - try testArgs(i512, u95, 1 << 94); try testArgs(u512, u95, 0); try testArgs(u512, u95, 1 << 0); try testArgs(u512, u95, 1 << 94); - try testArgs(i1024, u95, 0); - try testArgs(i1024, u95, 1 << 0); - try testArgs(i1024, u95, 1 << 94); try testArgs(u1024, u95, 0); try testArgs(u1024, u95, 1 << 0); try testArgs(u1024, u95, 1 << 94); - try testArgs(i8, i96, -1 << 95); - try testArgs(i8, i96, -1); - try testArgs(i8, i96, 0); - try testArgs(u8, i96, -1 << 95); - try testArgs(u8, i96, -1); - try testArgs(u8, i96, 0); - try testArgs(i16, i96, -1 << 95); - try testArgs(i16, i96, -1); - try testArgs(i16, i96, 0); - try testArgs(u16, i96, -1 << 95); - try testArgs(u16, i96, -1); - try testArgs(u16, i96, 0); - try testArgs(i32, i96, -1 << 95); - try testArgs(i32, i96, -1); - try testArgs(i32, i96, 0); - try testArgs(u32, i96, -1 << 95); - try testArgs(u32, i96, -1); - try testArgs(u32, i96, 0); - try testArgs(i64, i96, -1 << 95); - try testArgs(i64, i96, -1); - try testArgs(i64, i96, 0); - try testArgs(u64, i96, -1 << 95); - try testArgs(u64, i96, -1); - try testArgs(u64, i96, 0); - try testArgs(i128, i96, -1 << 95); - try testArgs(i128, i96, -1); - try testArgs(i128, i96, 0); - try testArgs(u128, i96, -1 << 95); - try testArgs(u128, i96, -1); - try testArgs(u128, i96, 0); - try testArgs(i256, i96, -1 << 95); - try testArgs(i256, i96, -1); - try testArgs(i256, i96, 0); - try testArgs(u256, i96, -1 << 95); - try testArgs(u256, i96, -1); - try testArgs(u256, i96, 0); - try testArgs(i512, i96, -1 << 95); - try testArgs(i512, i96, -1); - try testArgs(i512, i96, 0); - try testArgs(u512, i96, -1 << 95); - try testArgs(u512, i96, -1); - try testArgs(u512, i96, 0); - try testArgs(i1024, i96, -1 << 95); - try testArgs(i1024, i96, -1); - try testArgs(i1024, 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(u8, u96, 0); - try testArgs(u8, u96, 1 << 0); - try testArgs(u8, u96, 1 << 95); - try testArgs(i16, u96, 0); - try testArgs(i16, u96, 1 << 0); - try testArgs(i16, u96, 1 << 95); - try testArgs(u16, u96, 0); - try testArgs(u16, u96, 1 << 0); - try testArgs(u16, u96, 1 << 95); - try testArgs(i32, u96, 0); - try testArgs(i32, u96, 1 << 0); - try testArgs(i32, u96, 1 << 95); - try testArgs(u32, u96, 0); - try testArgs(u32, u96, 1 << 0); - try testArgs(u32, u96, 1 << 95); - try testArgs(i64, u96, 0); - try testArgs(i64, u96, 1 << 0); - try testArgs(i64, u96, 1 << 95); - try testArgs(u64, u96, 0); - try testArgs(u64, u96, 1 << 0); - try testArgs(u64, u96, 1 << 95); - try testArgs(i128, u96, 0); - try testArgs(i128, u96, 1 << 0); - try testArgs(i128, u96, 1 << 95); - try testArgs(u128, u96, 0); - try testArgs(u128, u96, 1 << 0); - try testArgs(u128, u96, 1 << 95); - try testArgs(i256, u96, 0); - try testArgs(i256, u96, 1 << 0); - try testArgs(i256, u96, 1 << 95); - try testArgs(u256, u96, 0); - try testArgs(u256, u96, 1 << 0); - try testArgs(u256, u96, 1 << 95); - try testArgs(i512, u96, 0); - try testArgs(i512, u96, 1 << 0); - try testArgs(i512, u96, 1 << 95); - try testArgs(u512, u96, 0); - try testArgs(u512, u96, 1 << 0); - try testArgs(u512, u96, 1 << 95); - try testArgs(i1024, u96, 0); - try testArgs(i1024, u96, 1 << 0); - try testArgs(i1024, u96, 1 << 95); - try testArgs(u1024, u96, 0); - try testArgs(u1024, u96, 1 << 0); - try testArgs(u1024, u96, 1 << 95); - try testArgs(i8, i97, -1 << 96); try testArgs(i8, i97, -1); try testArgs(i8, i97, 0); - try testArgs(u8, i97, -1 << 96); - try testArgs(u8, i97, -1); - try testArgs(u8, i97, 0); try testArgs(i16, i97, -1 << 96); try testArgs(i16, i97, -1); try testArgs(i16, i97, 0); - try testArgs(u16, i97, -1 << 96); - try testArgs(u16, i97, -1); - try testArgs(u16, i97, 0); try testArgs(i32, i97, -1 << 96); try testArgs(i32, i97, -1); try testArgs(i32, i97, 0); - try testArgs(u32, i97, -1 << 96); - try testArgs(u32, i97, -1); - try testArgs(u32, i97, 0); try testArgs(i64, i97, -1 << 96); try testArgs(i64, i97, -1); try testArgs(i64, i97, 0); - try testArgs(u64, i97, -1 << 96); - try testArgs(u64, i97, -1); - try testArgs(u64, i97, 0); try testArgs(i128, i97, -1 << 96); try testArgs(i128, i97, -1); try testArgs(i128, i97, 0); - try testArgs(u128, i97, -1 << 96); - try testArgs(u128, i97, -1); - try testArgs(u128, i97, 0); try testArgs(i256, i97, -1 << 96); try testArgs(i256, i97, -1); try testArgs(i256, i97, 0); - try testArgs(u256, i97, -1 << 96); - try testArgs(u256, i97, -1); - try testArgs(u256, i97, 0); try testArgs(i512, i97, -1 << 96); try testArgs(i512, i97, -1); try testArgs(i512, i97, 0); - try testArgs(u512, i97, -1 << 96); - try testArgs(u512, i97, -1); - try testArgs(u512, i97, 0); try testArgs(i1024, i97, -1 << 96); try testArgs(i1024, i97, -1); try testArgs(i1024, 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(u8, u97, 0); try testArgs(u8, u97, 1 << 0); try testArgs(u8, u97, 1 << 96); - try testArgs(i16, u97, 0); - try testArgs(i16, u97, 1 << 0); - try testArgs(i16, u97, 1 << 96); try testArgs(u16, u97, 0); try testArgs(u16, u97, 1 << 0); try testArgs(u16, u97, 1 << 96); - try testArgs(i32, u97, 0); - try testArgs(i32, u97, 1 << 0); - try testArgs(i32, u97, 1 << 96); try testArgs(u32, u97, 0); try testArgs(u32, u97, 1 << 0); try testArgs(u32, u97, 1 << 96); - try testArgs(i64, u97, 0); - try testArgs(i64, u97, 1 << 0); - try testArgs(i64, u97, 1 << 96); try testArgs(u64, u97, 0); try testArgs(u64, u97, 1 << 0); try testArgs(u64, u97, 1 << 96); - try testArgs(i128, u97, 0); - try testArgs(i128, u97, 1 << 0); - try testArgs(i128, u97, 1 << 96); try testArgs(u128, u97, 0); try testArgs(u128, u97, 1 << 0); try testArgs(u128, u97, 1 << 96); - try testArgs(i256, u97, 0); - try testArgs(i256, u97, 1 << 0); - try testArgs(i256, u97, 1 << 96); try testArgs(u256, u97, 0); try testArgs(u256, u97, 1 << 0); try testArgs(u256, u97, 1 << 96); - try testArgs(i512, u97, 0); - try testArgs(i512, u97, 1 << 0); - try testArgs(i512, u97, 1 << 96); try testArgs(u512, u97, 0); try testArgs(u512, u97, 1 << 0); try testArgs(u512, u97, 1 << 96); - try testArgs(i1024, u97, 0); - try testArgs(i1024, u97, 1 << 0); - try testArgs(i1024, u97, 1 << 96); try testArgs(u1024, u97, 0); try testArgs(u1024, u97, 1 << 0); try testArgs(u1024, u97, 1 << 96); @@ -3592,96 +2599,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i127, -1 << 126); try testArgs(i8, i127, -1); try testArgs(i8, i127, 0); - try testArgs(u8, i127, -1 << 126); - try testArgs(u8, i127, -1); - try testArgs(u8, i127, 0); try testArgs(i16, i127, -1 << 126); try testArgs(i16, i127, -1); try testArgs(i16, i127, 0); - try testArgs(u16, i127, -1 << 126); - try testArgs(u16, i127, -1); - try testArgs(u16, i127, 0); try testArgs(i32, i127, -1 << 126); try testArgs(i32, i127, -1); try testArgs(i32, i127, 0); - try testArgs(u32, i127, -1 << 126); - try testArgs(u32, i127, -1); - try testArgs(u32, i127, 0); try testArgs(i64, i127, -1 << 126); try testArgs(i64, i127, -1); try testArgs(i64, i127, 0); - try testArgs(u64, i127, -1 << 126); - try testArgs(u64, i127, -1); - try testArgs(u64, i127, 0); try testArgs(i128, i127, -1 << 126); try testArgs(i128, i127, -1); try testArgs(i128, i127, 0); - try testArgs(u128, i127, -1 << 126); - try testArgs(u128, i127, -1); - try testArgs(u128, i127, 0); try testArgs(i256, i127, -1 << 126); try testArgs(i256, i127, -1); try testArgs(i256, i127, 0); - try testArgs(u256, i127, -1 << 126); - try testArgs(u256, i127, -1); - try testArgs(u256, i127, 0); try testArgs(i512, i127, -1 << 126); try testArgs(i512, i127, -1); try testArgs(i512, i127, 0); - try testArgs(u512, i127, -1 << 126); - try testArgs(u512, i127, -1); - try testArgs(u512, i127, 0); try testArgs(i1024, i127, -1 << 126); try testArgs(i1024, i127, -1); try testArgs(i1024, 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(u8, u127, 0); try testArgs(u8, u127, 1 << 0); try testArgs(u8, u127, 1 << 126); - try testArgs(i16, u127, 0); - try testArgs(i16, u127, 1 << 0); - try testArgs(i16, u127, 1 << 126); try testArgs(u16, u127, 0); try testArgs(u16, u127, 1 << 0); try testArgs(u16, u127, 1 << 126); - try testArgs(i32, u127, 0); - try testArgs(i32, u127, 1 << 0); - try testArgs(i32, u127, 1 << 126); try testArgs(u32, u127, 0); try testArgs(u32, u127, 1 << 0); try testArgs(u32, u127, 1 << 126); - try testArgs(i64, u127, 0); - try testArgs(i64, u127, 1 << 0); - try testArgs(i64, u127, 1 << 126); try testArgs(u64, u127, 0); try testArgs(u64, u127, 1 << 0); try testArgs(u64, u127, 1 << 126); - try testArgs(i128, u127, 0); - try testArgs(i128, u127, 1 << 0); - try testArgs(i128, u127, 1 << 126); try testArgs(u128, u127, 0); try testArgs(u128, u127, 1 << 0); try testArgs(u128, u127, 1 << 126); - try testArgs(i256, u127, 0); - try testArgs(i256, u127, 1 << 0); - try testArgs(i256, u127, 1 << 126); try testArgs(u256, u127, 0); try testArgs(u256, u127, 1 << 0); try testArgs(u256, u127, 1 << 126); - try testArgs(i512, u127, 0); - try testArgs(i512, u127, 1 << 0); - try testArgs(i512, u127, 1 << 126); try testArgs(u512, u127, 0); try testArgs(u512, u127, 1 << 0); try testArgs(u512, u127, 1 << 126); - try testArgs(i1024, u127, 0); - try testArgs(i1024, u127, 1 << 0); - try testArgs(i1024, u127, 1 << 126); try testArgs(u1024, u127, 0); try testArgs(u1024, u127, 1 << 0); try testArgs(u1024, u127, 1 << 126); @@ -3689,96 +2648,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i128, -1 << 127); try testArgs(i8, i128, -1); try testArgs(i8, i128, 0); - try testArgs(u8, i128, -1 << 127); - try testArgs(u8, i128, -1); - try testArgs(u8, i128, 0); try testArgs(i16, i128, -1 << 127); try testArgs(i16, i128, -1); try testArgs(i16, i128, 0); - try testArgs(u16, i128, -1 << 127); - try testArgs(u16, i128, -1); - try testArgs(u16, i128, 0); try testArgs(i32, i128, -1 << 127); try testArgs(i32, i128, -1); try testArgs(i32, i128, 0); - try testArgs(u32, i128, -1 << 127); - try testArgs(u32, i128, -1); - try testArgs(u32, i128, 0); try testArgs(i64, i128, -1 << 127); try testArgs(i64, i128, -1); try testArgs(i64, i128, 0); - try testArgs(u64, i128, -1 << 127); - try testArgs(u64, i128, -1); - try testArgs(u64, i128, 0); try testArgs(i128, i128, -1 << 127); try testArgs(i128, i128, -1); try testArgs(i128, i128, 0); - try testArgs(u128, i128, -1 << 127); - try testArgs(u128, i128, -1); - try testArgs(u128, i128, 0); try testArgs(i256, i128, -1 << 127); try testArgs(i256, i128, -1); try testArgs(i256, i128, 0); - try testArgs(u256, i128, -1 << 127); - try testArgs(u256, i128, -1); - try testArgs(u256, i128, 0); try testArgs(i512, i128, -1 << 127); try testArgs(i512, i128, -1); try testArgs(i512, i128, 0); - try testArgs(u512, i128, -1 << 127); - try testArgs(u512, i128, -1); - try testArgs(u512, i128, 0); try testArgs(i1024, i128, -1 << 127); try testArgs(i1024, i128, -1); try testArgs(i1024, 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(u8, u128, 0); try testArgs(u8, u128, 1 << 0); try testArgs(u8, u128, 1 << 127); - try testArgs(i16, u128, 0); - try testArgs(i16, u128, 1 << 0); - try testArgs(i16, u128, 1 << 127); try testArgs(u16, u128, 0); try testArgs(u16, u128, 1 << 0); try testArgs(u16, u128, 1 << 127); - try testArgs(i32, u128, 0); - try testArgs(i32, u128, 1 << 0); - try testArgs(i32, u128, 1 << 127); try testArgs(u32, u128, 0); try testArgs(u32, u128, 1 << 0); try testArgs(u32, u128, 1 << 127); - try testArgs(i64, u128, 0); - try testArgs(i64, u128, 1 << 0); - try testArgs(i64, u128, 1 << 127); try testArgs(u64, u128, 0); try testArgs(u64, u128, 1 << 0); try testArgs(u64, u128, 1 << 127); - try testArgs(i128, u128, 0); - try testArgs(i128, u128, 1 << 0); - try testArgs(i128, u128, 1 << 127); try testArgs(u128, u128, 0); try testArgs(u128, u128, 1 << 0); try testArgs(u128, u128, 1 << 127); - try testArgs(i256, u128, 0); - try testArgs(i256, u128, 1 << 0); - try testArgs(i256, u128, 1 << 127); try testArgs(u256, u128, 0); try testArgs(u256, u128, 1 << 0); try testArgs(u256, u128, 1 << 127); - try testArgs(i512, u128, 0); - try testArgs(i512, u128, 1 << 0); - try testArgs(i512, u128, 1 << 127); try testArgs(u512, u128, 0); try testArgs(u512, u128, 1 << 0); try testArgs(u512, u128, 1 << 127); - try testArgs(i1024, u128, 0); - try testArgs(i1024, u128, 1 << 0); - try testArgs(i1024, u128, 1 << 127); try testArgs(u1024, u128, 0); try testArgs(u1024, u128, 1 << 0); try testArgs(u1024, u128, 1 << 127); @@ -3786,1066 +2697,97 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i129, -1 << 128); try testArgs(i8, i129, -1); try testArgs(i8, i129, 0); - try testArgs(u8, i129, -1 << 128); - try testArgs(u8, i129, -1); - try testArgs(u8, i129, 0); try testArgs(i16, i129, -1 << 128); try testArgs(i16, i129, -1); try testArgs(i16, i129, 0); - try testArgs(u16, i129, -1 << 128); - try testArgs(u16, i129, -1); - try testArgs(u16, i129, 0); try testArgs(i32, i129, -1 << 128); try testArgs(i32, i129, -1); try testArgs(i32, i129, 0); - try testArgs(u32, i129, -1 << 128); - try testArgs(u32, i129, -1); - try testArgs(u32, i129, 0); try testArgs(i64, i129, -1 << 128); try testArgs(i64, i129, -1); try testArgs(i64, i129, 0); - try testArgs(u64, i129, -1 << 128); - try testArgs(u64, i129, -1); - try testArgs(u64, i129, 0); try testArgs(i128, i129, -1 << 128); try testArgs(i128, i129, -1); try testArgs(i128, i129, 0); - try testArgs(u128, i129, -1 << 128); - try testArgs(u128, i129, -1); - try testArgs(u128, i129, 0); try testArgs(i256, i129, -1 << 128); try testArgs(i256, i129, -1); try testArgs(i256, i129, 0); - try testArgs(u256, i129, -1 << 128); - try testArgs(u256, i129, -1); - try testArgs(u256, i129, 0); try testArgs(i512, i129, -1 << 128); try testArgs(i512, i129, -1); try testArgs(i512, i129, 0); - try testArgs(u512, i129, -1 << 128); - try testArgs(u512, i129, -1); - try testArgs(u512, i129, 0); try testArgs(i1024, i129, -1 << 128); try testArgs(i1024, i129, -1); try testArgs(i1024, 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(u8, u129, 0); try testArgs(u8, u129, 1 << 0); try testArgs(u8, u129, 1 << 128); - try testArgs(i16, u129, 0); - try testArgs(i16, u129, 1 << 0); - try testArgs(i16, u129, 1 << 128); try testArgs(u16, u129, 0); try testArgs(u16, u129, 1 << 0); try testArgs(u16, u129, 1 << 128); - try testArgs(i32, u129, 0); - try testArgs(i32, u129, 1 << 0); - try testArgs(i32, u129, 1 << 128); try testArgs(u32, u129, 0); try testArgs(u32, u129, 1 << 0); try testArgs(u32, u129, 1 << 128); - try testArgs(i64, u129, 0); - try testArgs(i64, u129, 1 << 0); - try testArgs(i64, u129, 1 << 128); try testArgs(u64, u129, 0); try testArgs(u64, u129, 1 << 0); try testArgs(u64, u129, 1 << 128); - try testArgs(i128, u129, 0); - try testArgs(i128, u129, 1 << 0); - try testArgs(i128, u129, 1 << 128); try testArgs(u128, u129, 0); try testArgs(u128, u129, 1 << 0); try testArgs(u128, u129, 1 << 128); - try testArgs(i256, u129, 0); - try testArgs(i256, u129, 1 << 0); - try testArgs(i256, u129, 1 << 128); try testArgs(u256, u129, 0); try testArgs(u256, u129, 1 << 0); try testArgs(u256, u129, 1 << 128); - try testArgs(i512, u129, 0); - try testArgs(i512, u129, 1 << 0); - try testArgs(i512, u129, 1 << 128); try testArgs(u512, u129, 0); try testArgs(u512, u129, 1 << 0); try testArgs(u512, u129, 1 << 128); - try testArgs(i1024, u129, 0); - try testArgs(i1024, u129, 1 << 0); - try testArgs(i1024, u129, 1 << 128); try testArgs(u1024, u129, 0); try testArgs(u1024, u129, 1 << 0); try testArgs(u1024, u129, 1 << 128); - try testArgs(i8, i159, -1 << 158); - try testArgs(i8, i159, -1); - try testArgs(i8, i159, 0); - try testArgs(u8, i159, -1 << 158); - try testArgs(u8, i159, -1); - try testArgs(u8, i159, 0); - try testArgs(i16, i159, -1 << 158); - try testArgs(i16, i159, -1); - try testArgs(i16, i159, 0); - try testArgs(u16, i159, -1 << 158); - try testArgs(u16, i159, -1); - try testArgs(u16, i159, 0); - try testArgs(i32, i159, -1 << 158); - try testArgs(i32, i159, -1); - try testArgs(i32, i159, 0); - try testArgs(u32, i159, -1 << 158); - try testArgs(u32, i159, -1); - try testArgs(u32, i159, 0); - try testArgs(i64, i159, -1 << 158); - try testArgs(i64, i159, -1); - try testArgs(i64, i159, 0); - try testArgs(u64, i159, -1 << 158); - try testArgs(u64, i159, -1); - try testArgs(u64, i159, 0); - try testArgs(i128, i159, -1 << 158); - try testArgs(i128, i159, -1); - try testArgs(i128, i159, 0); - try testArgs(u128, i159, -1 << 158); - try testArgs(u128, i159, -1); - try testArgs(u128, i159, 0); - try testArgs(i256, i159, -1 << 158); - try testArgs(i256, i159, -1); - try testArgs(i256, i159, 0); - try testArgs(u256, i159, -1 << 158); - try testArgs(u256, i159, -1); - try testArgs(u256, i159, 0); - try testArgs(i512, i159, -1 << 158); - try testArgs(i512, i159, -1); - try testArgs(i512, i159, 0); - try testArgs(u512, i159, -1 << 158); - try testArgs(u512, i159, -1); - try testArgs(u512, i159, 0); - try testArgs(i1024, i159, -1 << 158); - try testArgs(i1024, i159, -1); - try testArgs(i1024, i159, 0); - try testArgs(u1024, i159, -1 << 158); - try testArgs(u1024, i159, -1); - try testArgs(u1024, i159, 0); - try testArgs(i8, u159, 0); - try testArgs(i8, u159, 1 << 0); - try testArgs(i8, u159, 1 << 158); - try testArgs(u8, u159, 0); - try testArgs(u8, u159, 1 << 0); - try testArgs(u8, u159, 1 << 158); - try testArgs(i16, u159, 0); - try testArgs(i16, u159, 1 << 0); - try testArgs(i16, u159, 1 << 158); - try testArgs(u16, u159, 0); - try testArgs(u16, u159, 1 << 0); - try testArgs(u16, u159, 1 << 158); - try testArgs(i32, u159, 0); - try testArgs(i32, u159, 1 << 0); - try testArgs(i32, u159, 1 << 158); - try testArgs(u32, u159, 0); - try testArgs(u32, u159, 1 << 0); - try testArgs(u32, u159, 1 << 158); - try testArgs(i64, u159, 0); - try testArgs(i64, u159, 1 << 0); - try testArgs(i64, u159, 1 << 158); - try testArgs(u64, u159, 0); - try testArgs(u64, u159, 1 << 0); - try testArgs(u64, u159, 1 << 158); - try testArgs(i128, u159, 0); - try testArgs(i128, u159, 1 << 0); - try testArgs(i128, u159, 1 << 158); - try testArgs(u128, u159, 0); - try testArgs(u128, u159, 1 << 0); - try testArgs(u128, u159, 1 << 158); - try testArgs(i256, u159, 0); - try testArgs(i256, u159, 1 << 0); - try testArgs(i256, u159, 1 << 158); - try testArgs(u256, u159, 0); - try testArgs(u256, u159, 1 << 0); - try testArgs(u256, u159, 1 << 158); - try testArgs(i512, u159, 0); - try testArgs(i512, u159, 1 << 0); - try testArgs(i512, u159, 1 << 158); - try testArgs(u512, u159, 0); - try testArgs(u512, u159, 1 << 0); - try testArgs(u512, u159, 1 << 158); - try testArgs(i1024, u159, 0); - try testArgs(i1024, u159, 1 << 0); - try testArgs(i1024, u159, 1 << 158); - try testArgs(u1024, u159, 0); - try testArgs(u1024, u159, 1 << 0); - try testArgs(u1024, u159, 1 << 158); - - try testArgs(i8, i160, -1 << 159); - try testArgs(i8, i160, -1); - try testArgs(i8, i160, 0); - try testArgs(u8, i160, -1 << 159); - try testArgs(u8, i160, -1); - try testArgs(u8, i160, 0); - try testArgs(i16, i160, -1 << 159); - try testArgs(i16, i160, -1); - try testArgs(i16, i160, 0); - try testArgs(u16, i160, -1 << 159); - try testArgs(u16, i160, -1); - try testArgs(u16, i160, 0); - try testArgs(i32, i160, -1 << 159); - try testArgs(i32, i160, -1); - try testArgs(i32, i160, 0); - try testArgs(u32, i160, -1 << 159); - try testArgs(u32, i160, -1); - try testArgs(u32, i160, 0); - try testArgs(i64, i160, -1 << 159); - try testArgs(i64, i160, -1); - try testArgs(i64, i160, 0); - try testArgs(u64, i160, -1 << 159); - try testArgs(u64, i160, -1); - try testArgs(u64, i160, 0); - try testArgs(i128, i160, -1 << 159); - try testArgs(i128, i160, -1); - try testArgs(i128, i160, 0); - try testArgs(u128, i160, -1 << 159); - try testArgs(u128, i160, -1); - try testArgs(u128, i160, 0); - try testArgs(i256, i160, -1 << 159); - try testArgs(i256, i160, -1); - try testArgs(i256, i160, 0); - try testArgs(u256, i160, -1 << 159); - try testArgs(u256, i160, -1); - try testArgs(u256, i160, 0); - try testArgs(i512, i160, -1 << 159); - try testArgs(i512, i160, -1); - try testArgs(i512, i160, 0); - try testArgs(u512, i160, -1 << 159); - try testArgs(u512, i160, -1); - try testArgs(u512, i160, 0); - try testArgs(i1024, i160, -1 << 159); - try testArgs(i1024, i160, -1); - try testArgs(i1024, i160, 0); - try testArgs(u1024, i160, -1 << 159); - try testArgs(u1024, i160, -1); - try testArgs(u1024, i160, 0); - try testArgs(i8, u160, 0); - try testArgs(i8, u160, 1 << 0); - try testArgs(i8, u160, 1 << 159); - try testArgs(u8, u160, 0); - try testArgs(u8, u160, 1 << 0); - try testArgs(u8, u160, 1 << 159); - try testArgs(i16, u160, 0); - try testArgs(i16, u160, 1 << 0); - try testArgs(i16, u160, 1 << 159); - try testArgs(u16, u160, 0); - try testArgs(u16, u160, 1 << 0); - try testArgs(u16, u160, 1 << 159); - try testArgs(i32, u160, 0); - try testArgs(i32, u160, 1 << 0); - try testArgs(i32, u160, 1 << 159); - try testArgs(u32, u160, 0); - try testArgs(u32, u160, 1 << 0); - try testArgs(u32, u160, 1 << 159); - try testArgs(i64, u160, 0); - try testArgs(i64, u160, 1 << 0); - try testArgs(i64, u160, 1 << 159); - try testArgs(u64, u160, 0); - try testArgs(u64, u160, 1 << 0); - try testArgs(u64, u160, 1 << 159); - try testArgs(i128, u160, 0); - try testArgs(i128, u160, 1 << 0); - try testArgs(i128, u160, 1 << 159); - try testArgs(u128, u160, 0); - try testArgs(u128, u160, 1 << 0); - try testArgs(u128, u160, 1 << 159); - try testArgs(i256, u160, 0); - try testArgs(i256, u160, 1 << 0); - try testArgs(i256, u160, 1 << 159); - try testArgs(u256, u160, 0); - try testArgs(u256, u160, 1 << 0); - try testArgs(u256, u160, 1 << 159); - try testArgs(i512, u160, 0); - try testArgs(i512, u160, 1 << 0); - try testArgs(i512, u160, 1 << 159); - try testArgs(u512, u160, 0); - try testArgs(u512, u160, 1 << 0); - try testArgs(u512, u160, 1 << 159); - try testArgs(i1024, u160, 0); - try testArgs(i1024, u160, 1 << 0); - try testArgs(i1024, u160, 1 << 159); - try testArgs(u1024, u160, 0); - try testArgs(u1024, u160, 1 << 0); - try testArgs(u1024, u160, 1 << 159); - - try testArgs(i8, i161, -1 << 160); - try testArgs(i8, i161, -1); - try testArgs(i8, i161, 0); - try testArgs(u8, i161, -1 << 160); - try testArgs(u8, i161, -1); - try testArgs(u8, i161, 0); - try testArgs(i16, i161, -1 << 160); - try testArgs(i16, i161, -1); - try testArgs(i16, i161, 0); - try testArgs(u16, i161, -1 << 160); - try testArgs(u16, i161, -1); - try testArgs(u16, i161, 0); - try testArgs(i32, i161, -1 << 160); - try testArgs(i32, i161, -1); - try testArgs(i32, i161, 0); - try testArgs(u32, i161, -1 << 160); - try testArgs(u32, i161, -1); - try testArgs(u32, i161, 0); - try testArgs(i64, i161, -1 << 160); - try testArgs(i64, i161, -1); - try testArgs(i64, i161, 0); - try testArgs(u64, i161, -1 << 160); - try testArgs(u64, i161, -1); - try testArgs(u64, i161, 0); - try testArgs(i128, i161, -1 << 160); - try testArgs(i128, i161, -1); - try testArgs(i128, i161, 0); - try testArgs(u128, i161, -1 << 160); - try testArgs(u128, i161, -1); - try testArgs(u128, i161, 0); - try testArgs(i256, i161, -1 << 160); - try testArgs(i256, i161, -1); - try testArgs(i256, i161, 0); - try testArgs(u256, i161, -1 << 160); - try testArgs(u256, i161, -1); - try testArgs(u256, i161, 0); - try testArgs(i512, i161, -1 << 160); - try testArgs(i512, i161, -1); - try testArgs(i512, i161, 0); - try testArgs(u512, i161, -1 << 160); - try testArgs(u512, i161, -1); - try testArgs(u512, i161, 0); - try testArgs(i1024, i161, -1 << 160); - try testArgs(i1024, i161, -1); - try testArgs(i1024, i161, 0); - try testArgs(u1024, i161, -1 << 160); - try testArgs(u1024, i161, -1); - try testArgs(u1024, i161, 0); - try testArgs(i8, u161, 0); - try testArgs(i8, u161, 1 << 0); - try testArgs(i8, u161, 1 << 160); - try testArgs(u8, u161, 0); - try testArgs(u8, u161, 1 << 0); - try testArgs(u8, u161, 1 << 160); - try testArgs(i16, u161, 0); - try testArgs(i16, u161, 1 << 0); - try testArgs(i16, u161, 1 << 160); - try testArgs(u16, u161, 0); - try testArgs(u16, u161, 1 << 0); - try testArgs(u16, u161, 1 << 160); - try testArgs(i32, u161, 0); - try testArgs(i32, u161, 1 << 0); - try testArgs(i32, u161, 1 << 160); - try testArgs(u32, u161, 0); - try testArgs(u32, u161, 1 << 0); - try testArgs(u32, u161, 1 << 160); - try testArgs(i64, u161, 0); - try testArgs(i64, u161, 1 << 0); - try testArgs(i64, u161, 1 << 160); - try testArgs(u64, u161, 0); - try testArgs(u64, u161, 1 << 0); - try testArgs(u64, u161, 1 << 160); - try testArgs(i128, u161, 0); - try testArgs(i128, u161, 1 << 0); - try testArgs(i128, u161, 1 << 160); - try testArgs(u128, u161, 0); - try testArgs(u128, u161, 1 << 0); - try testArgs(u128, u161, 1 << 160); - try testArgs(i256, u161, 0); - try testArgs(i256, u161, 1 << 0); - try testArgs(i256, u161, 1 << 160); - try testArgs(u256, u161, 0); - try testArgs(u256, u161, 1 << 0); - try testArgs(u256, u161, 1 << 160); - try testArgs(i512, u161, 0); - try testArgs(i512, u161, 1 << 0); - try testArgs(i512, u161, 1 << 160); - try testArgs(u512, u161, 0); - try testArgs(u512, u161, 1 << 0); - try testArgs(u512, u161, 1 << 160); - try testArgs(i1024, u161, 0); - try testArgs(i1024, u161, 1 << 0); - try testArgs(i1024, u161, 1 << 160); - try testArgs(u1024, u161, 0); - try testArgs(u1024, u161, 1 << 0); - try testArgs(u1024, u161, 1 << 160); - - try testArgs(i8, i191, -1 << 190); - try testArgs(i8, i191, -1); - try testArgs(i8, i191, 0); - try testArgs(u8, i191, -1 << 190); - try testArgs(u8, i191, -1); - try testArgs(u8, i191, 0); - try testArgs(i16, i191, -1 << 190); - try testArgs(i16, i191, -1); - try testArgs(i16, i191, 0); - try testArgs(u16, i191, -1 << 190); - try testArgs(u16, i191, -1); - try testArgs(u16, i191, 0); - try testArgs(i32, i191, -1 << 190); - try testArgs(i32, i191, -1); - try testArgs(i32, i191, 0); - try testArgs(u32, i191, -1 << 190); - try testArgs(u32, i191, -1); - try testArgs(u32, i191, 0); - try testArgs(i64, i191, -1 << 190); - try testArgs(i64, i191, -1); - try testArgs(i64, i191, 0); - try testArgs(u64, i191, -1 << 190); - try testArgs(u64, i191, -1); - try testArgs(u64, i191, 0); - try testArgs(i128, i191, -1 << 190); - try testArgs(i128, i191, -1); - try testArgs(i128, i191, 0); - try testArgs(u128, i191, -1 << 190); - try testArgs(u128, i191, -1); - try testArgs(u128, i191, 0); - try testArgs(i256, i191, -1 << 190); - try testArgs(i256, i191, -1); - try testArgs(i256, i191, 0); - try testArgs(u256, i191, -1 << 190); - try testArgs(u256, i191, -1); - try testArgs(u256, i191, 0); - try testArgs(i512, i191, -1 << 190); - try testArgs(i512, i191, -1); - try testArgs(i512, i191, 0); - try testArgs(u512, i191, -1 << 190); - try testArgs(u512, i191, -1); - try testArgs(u512, i191, 0); - try testArgs(i1024, i191, -1 << 190); - try testArgs(i1024, i191, -1); - try testArgs(i1024, i191, 0); - try testArgs(u1024, i191, -1 << 190); - try testArgs(u1024, i191, -1); - try testArgs(u1024, i191, 0); - try testArgs(i8, u191, 0); - try testArgs(i8, u191, 1 << 0); - try testArgs(i8, u191, 1 << 190); - try testArgs(u8, u191, 0); - try testArgs(u8, u191, 1 << 0); - try testArgs(u8, u191, 1 << 190); - try testArgs(i16, u191, 0); - try testArgs(i16, u191, 1 << 0); - try testArgs(i16, u191, 1 << 190); - try testArgs(u16, u191, 0); - try testArgs(u16, u191, 1 << 0); - try testArgs(u16, u191, 1 << 190); - try testArgs(i32, u191, 0); - try testArgs(i32, u191, 1 << 0); - try testArgs(i32, u191, 1 << 190); - try testArgs(u32, u191, 0); - try testArgs(u32, u191, 1 << 0); - try testArgs(u32, u191, 1 << 190); - try testArgs(i64, u191, 0); - try testArgs(i64, u191, 1 << 0); - try testArgs(i64, u191, 1 << 190); - try testArgs(u64, u191, 0); - try testArgs(u64, u191, 1 << 0); - try testArgs(u64, u191, 1 << 190); - try testArgs(i128, u191, 0); - try testArgs(i128, u191, 1 << 0); - try testArgs(i128, u191, 1 << 190); - try testArgs(u128, u191, 0); - try testArgs(u128, u191, 1 << 0); - try testArgs(u128, u191, 1 << 190); - try testArgs(i256, u191, 0); - try testArgs(i256, u191, 1 << 0); - try testArgs(i256, u191, 1 << 190); - try testArgs(u256, u191, 0); - try testArgs(u256, u191, 1 << 0); - try testArgs(u256, u191, 1 << 190); - try testArgs(i512, u191, 0); - try testArgs(i512, u191, 1 << 0); - try testArgs(i512, u191, 1 << 190); - try testArgs(u512, u191, 0); - try testArgs(u512, u191, 1 << 0); - try testArgs(u512, u191, 1 << 190); - try testArgs(i1024, u191, 0); - try testArgs(i1024, u191, 1 << 0); - try testArgs(i1024, u191, 1 << 190); - try testArgs(u1024, u191, 0); - try testArgs(u1024, u191, 1 << 0); - try testArgs(u1024, u191, 1 << 190); - - try testArgs(i8, i192, -1 << 191); - try testArgs(i8, i192, -1); - try testArgs(i8, i192, 0); - try testArgs(u8, i192, -1 << 191); - try testArgs(u8, i192, -1); - try testArgs(u8, i192, 0); - try testArgs(i16, i192, -1 << 191); - try testArgs(i16, i192, -1); - try testArgs(i16, i192, 0); - try testArgs(u16, i192, -1 << 191); - try testArgs(u16, i192, -1); - try testArgs(u16, i192, 0); - try testArgs(i32, i192, -1 << 191); - try testArgs(i32, i192, -1); - try testArgs(i32, i192, 0); - try testArgs(u32, i192, -1 << 191); - try testArgs(u32, i192, -1); - try testArgs(u32, i192, 0); - try testArgs(i64, i192, -1 << 191); - try testArgs(i64, i192, -1); - try testArgs(i64, i192, 0); - try testArgs(u64, i192, -1 << 191); - try testArgs(u64, i192, -1); - try testArgs(u64, i192, 0); - try testArgs(i128, i192, -1 << 191); - try testArgs(i128, i192, -1); - try testArgs(i128, i192, 0); - try testArgs(u128, i192, -1 << 191); - try testArgs(u128, i192, -1); - try testArgs(u128, i192, 0); - try testArgs(i256, i192, -1 << 191); - try testArgs(i256, i192, -1); - try testArgs(i256, i192, 0); - try testArgs(u256, i192, -1 << 191); - try testArgs(u256, i192, -1); - try testArgs(u256, i192, 0); - try testArgs(i512, i192, -1 << 191); - try testArgs(i512, i192, -1); - try testArgs(i512, i192, 0); - try testArgs(u512, i192, -1 << 191); - try testArgs(u512, i192, -1); - try testArgs(u512, i192, 0); - try testArgs(i1024, i192, -1 << 191); - try testArgs(i1024, i192, -1); - try testArgs(i1024, i192, 0); - try testArgs(u1024, i192, -1 << 191); - try testArgs(u1024, i192, -1); - try testArgs(u1024, i192, 0); - try testArgs(i8, u192, 0); - try testArgs(i8, u192, 1 << 0); - try testArgs(i8, u192, 1 << 191); - try testArgs(u8, u192, 0); - try testArgs(u8, u192, 1 << 0); - try testArgs(u8, u192, 1 << 191); - try testArgs(i16, u192, 0); - try testArgs(i16, u192, 1 << 0); - try testArgs(i16, u192, 1 << 191); - try testArgs(u16, u192, 0); - try testArgs(u16, u192, 1 << 0); - try testArgs(u16, u192, 1 << 191); - try testArgs(i32, u192, 0); - try testArgs(i32, u192, 1 << 0); - try testArgs(i32, u192, 1 << 191); - try testArgs(u32, u192, 0); - try testArgs(u32, u192, 1 << 0); - try testArgs(u32, u192, 1 << 191); - try testArgs(i64, u192, 0); - try testArgs(i64, u192, 1 << 0); - try testArgs(i64, u192, 1 << 191); - try testArgs(u64, u192, 0); - try testArgs(u64, u192, 1 << 0); - try testArgs(u64, u192, 1 << 191); - try testArgs(i128, u192, 0); - try testArgs(i128, u192, 1 << 0); - try testArgs(i128, u192, 1 << 191); - try testArgs(u128, u192, 0); - try testArgs(u128, u192, 1 << 0); - try testArgs(u128, u192, 1 << 191); - try testArgs(i256, u192, 0); - try testArgs(i256, u192, 1 << 0); - try testArgs(i256, u192, 1 << 191); - try testArgs(u256, u192, 0); - try testArgs(u256, u192, 1 << 0); - try testArgs(u256, u192, 1 << 191); - try testArgs(i512, u192, 0); - try testArgs(i512, u192, 1 << 0); - try testArgs(i512, u192, 1 << 191); - try testArgs(u512, u192, 0); - try testArgs(u512, u192, 1 << 0); - try testArgs(u512, u192, 1 << 191); - try testArgs(i1024, u192, 0); - try testArgs(i1024, u192, 1 << 0); - try testArgs(i1024, u192, 1 << 191); - try testArgs(u1024, u192, 0); - try testArgs(u1024, u192, 1 << 0); - try testArgs(u1024, u192, 1 << 191); - - try testArgs(i8, i193, -1 << 192); - try testArgs(i8, i193, -1); - try testArgs(i8, i193, 0); - try testArgs(u8, i193, -1 << 192); - try testArgs(u8, i193, -1); - try testArgs(u8, i193, 0); - try testArgs(i16, i193, -1 << 192); - try testArgs(i16, i193, -1); - try testArgs(i16, i193, 0); - try testArgs(u16, i193, -1 << 192); - try testArgs(u16, i193, -1); - try testArgs(u16, i193, 0); - try testArgs(i32, i193, -1 << 192); - try testArgs(i32, i193, -1); - try testArgs(i32, i193, 0); - try testArgs(u32, i193, -1 << 192); - try testArgs(u32, i193, -1); - try testArgs(u32, i193, 0); - try testArgs(i64, i193, -1 << 192); - try testArgs(i64, i193, -1); - try testArgs(i64, i193, 0); - try testArgs(u64, i193, -1 << 192); - try testArgs(u64, i193, -1); - try testArgs(u64, i193, 0); - try testArgs(i128, i193, -1 << 192); - try testArgs(i128, i193, -1); - try testArgs(i128, i193, 0); - try testArgs(u128, i193, -1 << 192); - try testArgs(u128, i193, -1); - try testArgs(u128, i193, 0); - try testArgs(i256, i193, -1 << 192); - try testArgs(i256, i193, -1); - try testArgs(i256, i193, 0); - try testArgs(u256, i193, -1 << 192); - try testArgs(u256, i193, -1); - try testArgs(u256, i193, 0); - try testArgs(i512, i193, -1 << 192); - try testArgs(i512, i193, -1); - try testArgs(i512, i193, 0); - try testArgs(u512, i193, -1 << 192); - try testArgs(u512, i193, -1); - try testArgs(u512, i193, 0); - try testArgs(i1024, i193, -1 << 192); - try testArgs(i1024, i193, -1); - try testArgs(i1024, i193, 0); - try testArgs(u1024, i193, -1 << 192); - try testArgs(u1024, i193, -1); - try testArgs(u1024, i193, 0); - try testArgs(i8, u193, 0); - try testArgs(i8, u193, 1 << 0); - try testArgs(i8, u193, 1 << 192); - try testArgs(u8, u193, 0); - try testArgs(u8, u193, 1 << 0); - try testArgs(u8, u193, 1 << 192); - try testArgs(i16, u193, 0); - try testArgs(i16, u193, 1 << 0); - try testArgs(i16, u193, 1 << 192); - try testArgs(u16, u193, 0); - try testArgs(u16, u193, 1 << 0); - try testArgs(u16, u193, 1 << 192); - try testArgs(i32, u193, 0); - try testArgs(i32, u193, 1 << 0); - try testArgs(i32, u193, 1 << 192); - try testArgs(u32, u193, 0); - try testArgs(u32, u193, 1 << 0); - try testArgs(u32, u193, 1 << 192); - try testArgs(i64, u193, 0); - try testArgs(i64, u193, 1 << 0); - try testArgs(i64, u193, 1 << 192); - try testArgs(u64, u193, 0); - try testArgs(u64, u193, 1 << 0); - try testArgs(u64, u193, 1 << 192); - try testArgs(i128, u193, 0); - try testArgs(i128, u193, 1 << 0); - try testArgs(i128, u193, 1 << 192); - try testArgs(u128, u193, 0); - try testArgs(u128, u193, 1 << 0); - try testArgs(u128, u193, 1 << 192); - try testArgs(i256, u193, 0); - try testArgs(i256, u193, 1 << 0); - try testArgs(i256, u193, 1 << 192); - try testArgs(u256, u193, 0); - try testArgs(u256, u193, 1 << 0); - try testArgs(u256, u193, 1 << 192); - try testArgs(i512, u193, 0); - try testArgs(i512, u193, 1 << 0); - try testArgs(i512, u193, 1 << 192); - try testArgs(u512, u193, 0); - try testArgs(u512, u193, 1 << 0); - try testArgs(u512, u193, 1 << 192); - try testArgs(i1024, u193, 0); - try testArgs(i1024, u193, 1 << 0); - try testArgs(i1024, u193, 1 << 192); - try testArgs(u1024, u193, 0); - try testArgs(u1024, u193, 1 << 0); - try testArgs(u1024, u193, 1 << 192); - - try testArgs(i8, i223, -1 << 222); - try testArgs(i8, i223, -1); - try testArgs(i8, i223, 0); - try testArgs(u8, i223, -1 << 222); - try testArgs(u8, i223, -1); - try testArgs(u8, i223, 0); - try testArgs(i16, i223, -1 << 222); - try testArgs(i16, i223, -1); - try testArgs(i16, i223, 0); - try testArgs(u16, i223, -1 << 222); - try testArgs(u16, i223, -1); - try testArgs(u16, i223, 0); - try testArgs(i32, i223, -1 << 222); - try testArgs(i32, i223, -1); - try testArgs(i32, i223, 0); - try testArgs(u32, i223, -1 << 222); - try testArgs(u32, i223, -1); - try testArgs(u32, i223, 0); - try testArgs(i64, i223, -1 << 222); - try testArgs(i64, i223, -1); - try testArgs(i64, i223, 0); - try testArgs(u64, i223, -1 << 222); - try testArgs(u64, i223, -1); - try testArgs(u64, i223, 0); - try testArgs(i128, i223, -1 << 222); - try testArgs(i128, i223, -1); - try testArgs(i128, i223, 0); - try testArgs(u128, i223, -1 << 222); - try testArgs(u128, i223, -1); - try testArgs(u128, i223, 0); - try testArgs(i256, i223, -1 << 222); - try testArgs(i256, i223, -1); - try testArgs(i256, i223, 0); - try testArgs(u256, i223, -1 << 222); - try testArgs(u256, i223, -1); - try testArgs(u256, i223, 0); - try testArgs(i512, i223, -1 << 222); - try testArgs(i512, i223, -1); - try testArgs(i512, i223, 0); - try testArgs(u512, i223, -1 << 222); - try testArgs(u512, i223, -1); - try testArgs(u512, i223, 0); - try testArgs(i1024, i223, -1 << 222); - try testArgs(i1024, i223, -1); - try testArgs(i1024, i223, 0); - try testArgs(u1024, i223, -1 << 222); - try testArgs(u1024, i223, -1); - try testArgs(u1024, i223, 0); - try testArgs(i8, u223, 0); - try testArgs(i8, u223, 1 << 0); - try testArgs(i8, u223, 1 << 222); - try testArgs(u8, u223, 0); - try testArgs(u8, u223, 1 << 0); - try testArgs(u8, u223, 1 << 222); - try testArgs(i16, u223, 0); - try testArgs(i16, u223, 1 << 0); - try testArgs(i16, u223, 1 << 222); - try testArgs(u16, u223, 0); - try testArgs(u16, u223, 1 << 0); - try testArgs(u16, u223, 1 << 222); - try testArgs(i32, u223, 0); - try testArgs(i32, u223, 1 << 0); - try testArgs(i32, u223, 1 << 222); - try testArgs(u32, u223, 0); - try testArgs(u32, u223, 1 << 0); - try testArgs(u32, u223, 1 << 222); - try testArgs(i64, u223, 0); - try testArgs(i64, u223, 1 << 0); - try testArgs(i64, u223, 1 << 222); - try testArgs(u64, u223, 0); - try testArgs(u64, u223, 1 << 0); - try testArgs(u64, u223, 1 << 222); - try testArgs(i128, u223, 0); - try testArgs(i128, u223, 1 << 0); - try testArgs(i128, u223, 1 << 222); - try testArgs(u128, u223, 0); - try testArgs(u128, u223, 1 << 0); - try testArgs(u128, u223, 1 << 222); - try testArgs(i256, u223, 0); - try testArgs(i256, u223, 1 << 0); - try testArgs(i256, u223, 1 << 222); - try testArgs(u256, u223, 0); - try testArgs(u256, u223, 1 << 0); - try testArgs(u256, u223, 1 << 222); - try testArgs(i512, u223, 0); - try testArgs(i512, u223, 1 << 0); - try testArgs(i512, u223, 1 << 222); - try testArgs(u512, u223, 0); - try testArgs(u512, u223, 1 << 0); - try testArgs(u512, u223, 1 << 222); - try testArgs(i1024, u223, 0); - try testArgs(i1024, u223, 1 << 0); - try testArgs(i1024, u223, 1 << 222); - try testArgs(u1024, u223, 0); - try testArgs(u1024, u223, 1 << 0); - try testArgs(u1024, u223, 1 << 222); - - try testArgs(i8, i224, -1 << 223); - try testArgs(i8, i224, -1); - try testArgs(i8, i224, 0); - try testArgs(u8, i224, -1 << 223); - try testArgs(u8, i224, -1); - try testArgs(u8, i224, 0); - try testArgs(i16, i224, -1 << 223); - try testArgs(i16, i224, -1); - try testArgs(i16, i224, 0); - try testArgs(u16, i224, -1 << 223); - try testArgs(u16, i224, -1); - try testArgs(u16, i224, 0); - try testArgs(i32, i224, -1 << 223); - try testArgs(i32, i224, -1); - try testArgs(i32, i224, 0); - try testArgs(u32, i224, -1 << 223); - try testArgs(u32, i224, -1); - try testArgs(u32, i224, 0); - try testArgs(i64, i224, -1 << 223); - try testArgs(i64, i224, -1); - try testArgs(i64, i224, 0); - try testArgs(u64, i224, -1 << 223); - try testArgs(u64, i224, -1); - try testArgs(u64, i224, 0); - try testArgs(i128, i224, -1 << 223); - try testArgs(i128, i224, -1); - try testArgs(i128, i224, 0); - try testArgs(u128, i224, -1 << 223); - try testArgs(u128, i224, -1); - try testArgs(u128, i224, 0); - try testArgs(i256, i224, -1 << 223); - try testArgs(i256, i224, -1); - try testArgs(i256, i224, 0); - try testArgs(u256, i224, -1 << 223); - try testArgs(u256, i224, -1); - try testArgs(u256, i224, 0); - try testArgs(i512, i224, -1 << 223); - try testArgs(i512, i224, -1); - try testArgs(i512, i224, 0); - try testArgs(u512, i224, -1 << 223); - try testArgs(u512, i224, -1); - try testArgs(u512, i224, 0); - try testArgs(i1024, i224, -1 << 223); - try testArgs(i1024, i224, -1); - try testArgs(i1024, i224, 0); - try testArgs(u1024, i224, -1 << 223); - try testArgs(u1024, i224, -1); - try testArgs(u1024, i224, 0); - try testArgs(i8, u224, 0); - try testArgs(i8, u224, 1 << 0); - try testArgs(i8, u224, 1 << 223); - try testArgs(u8, u224, 0); - try testArgs(u8, u224, 1 << 0); - try testArgs(u8, u224, 1 << 223); - try testArgs(i16, u224, 0); - try testArgs(i16, u224, 1 << 0); - try testArgs(i16, u224, 1 << 223); - try testArgs(u16, u224, 0); - try testArgs(u16, u224, 1 << 0); - try testArgs(u16, u224, 1 << 223); - try testArgs(i32, u224, 0); - try testArgs(i32, u224, 1 << 0); - try testArgs(i32, u224, 1 << 223); - try testArgs(u32, u224, 0); - try testArgs(u32, u224, 1 << 0); - try testArgs(u32, u224, 1 << 223); - try testArgs(i64, u224, 0); - try testArgs(i64, u224, 1 << 0); - try testArgs(i64, u224, 1 << 223); - try testArgs(u64, u224, 0); - try testArgs(u64, u224, 1 << 0); - try testArgs(u64, u224, 1 << 223); - try testArgs(i128, u224, 0); - try testArgs(i128, u224, 1 << 0); - try testArgs(i128, u224, 1 << 223); - try testArgs(u128, u224, 0); - try testArgs(u128, u224, 1 << 0); - try testArgs(u128, u224, 1 << 223); - try testArgs(i256, u224, 0); - try testArgs(i256, u224, 1 << 0); - try testArgs(i256, u224, 1 << 223); - try testArgs(u256, u224, 0); - try testArgs(u256, u224, 1 << 0); - try testArgs(u256, u224, 1 << 223); - try testArgs(i512, u224, 0); - try testArgs(i512, u224, 1 << 0); - try testArgs(i512, u224, 1 << 223); - try testArgs(u512, u224, 0); - try testArgs(u512, u224, 1 << 0); - try testArgs(u512, u224, 1 << 223); - try testArgs(i1024, u224, 0); - try testArgs(i1024, u224, 1 << 0); - try testArgs(i1024, u224, 1 << 223); - try testArgs(u1024, u224, 0); - try testArgs(u1024, u224, 1 << 0); - try testArgs(u1024, u224, 1 << 223); - - try testArgs(i8, i225, -1 << 224); - try testArgs(i8, i225, -1); - try testArgs(i8, i225, 0); - try testArgs(u8, i225, -1 << 224); - try testArgs(u8, i225, -1); - try testArgs(u8, i225, 0); - try testArgs(i16, i225, -1 << 224); - try testArgs(i16, i225, -1); - try testArgs(i16, i225, 0); - try testArgs(u16, i225, -1 << 224); - try testArgs(u16, i225, -1); - try testArgs(u16, i225, 0); - try testArgs(i32, i225, -1 << 224); - try testArgs(i32, i225, -1); - try testArgs(i32, i225, 0); - try testArgs(u32, i225, -1 << 224); - try testArgs(u32, i225, -1); - try testArgs(u32, i225, 0); - try testArgs(i64, i225, -1 << 224); - try testArgs(i64, i225, -1); - try testArgs(i64, i225, 0); - try testArgs(u64, i225, -1 << 224); - try testArgs(u64, i225, -1); - try testArgs(u64, i225, 0); - try testArgs(i128, i225, -1 << 224); - try testArgs(i128, i225, -1); - try testArgs(i128, i225, 0); - try testArgs(u128, i225, -1 << 224); - try testArgs(u128, i225, -1); - try testArgs(u128, i225, 0); - try testArgs(i256, i225, -1 << 224); - try testArgs(i256, i225, -1); - try testArgs(i256, i225, 0); - try testArgs(u256, i225, -1 << 224); - try testArgs(u256, i225, -1); - try testArgs(u256, i225, 0); - try testArgs(i512, i225, -1 << 224); - try testArgs(i512, i225, -1); - try testArgs(i512, i225, 0); - try testArgs(u512, i225, -1 << 224); - try testArgs(u512, i225, -1); - try testArgs(u512, i225, 0); - try testArgs(i1024, i225, -1 << 224); - try testArgs(i1024, i225, -1); - try testArgs(i1024, i225, 0); - try testArgs(u1024, i225, -1 << 224); - try testArgs(u1024, i225, -1); - try testArgs(u1024, i225, 0); - try testArgs(i8, u225, 0); - try testArgs(i8, u225, 1 << 0); - try testArgs(i8, u225, 1 << 224); - try testArgs(u8, u225, 0); - try testArgs(u8, u225, 1 << 0); - try testArgs(u8, u225, 1 << 224); - try testArgs(i16, u225, 0); - try testArgs(i16, u225, 1 << 0); - try testArgs(i16, u225, 1 << 224); - try testArgs(u16, u225, 0); - try testArgs(u16, u225, 1 << 0); - try testArgs(u16, u225, 1 << 224); - try testArgs(i32, u225, 0); - try testArgs(i32, u225, 1 << 0); - try testArgs(i32, u225, 1 << 224); - try testArgs(u32, u225, 0); - try testArgs(u32, u225, 1 << 0); - try testArgs(u32, u225, 1 << 224); - try testArgs(i64, u225, 0); - try testArgs(i64, u225, 1 << 0); - try testArgs(i64, u225, 1 << 224); - try testArgs(u64, u225, 0); - try testArgs(u64, u225, 1 << 0); - try testArgs(u64, u225, 1 << 224); - try testArgs(i128, u225, 0); - try testArgs(i128, u225, 1 << 0); - try testArgs(i128, u225, 1 << 224); - try testArgs(u128, u225, 0); - try testArgs(u128, u225, 1 << 0); - try testArgs(u128, u225, 1 << 224); - try testArgs(i256, u225, 0); - try testArgs(i256, u225, 1 << 0); - try testArgs(i256, u225, 1 << 224); - try testArgs(u256, u225, 0); - try testArgs(u256, u225, 1 << 0); - try testArgs(u256, u225, 1 << 224); - try testArgs(i512, u225, 0); - try testArgs(i512, u225, 1 << 0); - try testArgs(i512, u225, 1 << 224); - try testArgs(u512, u225, 0); - try testArgs(u512, u225, 1 << 0); - try testArgs(u512, u225, 1 << 224); - try testArgs(i1024, u225, 0); - try testArgs(i1024, u225, 1 << 0); - try testArgs(i1024, u225, 1 << 224); - try testArgs(u1024, u225, 0); - try testArgs(u1024, u225, 1 << 0); - try testArgs(u1024, u225, 1 << 224); - try testArgs(i8, i255, -1 << 254); try testArgs(i8, i255, -1); try testArgs(i8, i255, 0); - try testArgs(u8, i255, -1 << 254); - try testArgs(u8, i255, -1); - try testArgs(u8, i255, 0); try testArgs(i16, i255, -1 << 254); try testArgs(i16, i255, -1); try testArgs(i16, i255, 0); - try testArgs(u16, i255, -1 << 254); - try testArgs(u16, i255, -1); - try testArgs(u16, i255, 0); try testArgs(i32, i255, -1 << 254); try testArgs(i32, i255, -1); try testArgs(i32, i255, 0); - try testArgs(u32, i255, -1 << 254); - try testArgs(u32, i255, -1); - try testArgs(u32, i255, 0); try testArgs(i64, i255, -1 << 254); try testArgs(i64, i255, -1); try testArgs(i64, i255, 0); - try testArgs(u64, i255, -1 << 254); - try testArgs(u64, i255, -1); - try testArgs(u64, i255, 0); try testArgs(i128, i255, -1 << 254); try testArgs(i128, i255, -1); try testArgs(i128, i255, 0); - try testArgs(u128, i255, -1 << 254); - try testArgs(u128, i255, -1); - try testArgs(u128, i255, 0); try testArgs(i256, i255, -1 << 254); try testArgs(i256, i255, -1); try testArgs(i256, i255, 0); - try testArgs(u256, i255, -1 << 254); - try testArgs(u256, i255, -1); - try testArgs(u256, i255, 0); try testArgs(i512, i255, -1 << 254); try testArgs(i512, i255, -1); try testArgs(i512, i255, 0); - try testArgs(u512, i255, -1 << 254); - try testArgs(u512, i255, -1); - try testArgs(u512, i255, 0); try testArgs(i1024, i255, -1 << 254); try testArgs(i1024, i255, -1); try testArgs(i1024, 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(u8, u255, 0); try testArgs(u8, u255, 1 << 0); try testArgs(u8, u255, 1 << 254); - try testArgs(i16, u255, 0); - try testArgs(i16, u255, 1 << 0); - try testArgs(i16, u255, 1 << 254); try testArgs(u16, u255, 0); try testArgs(u16, u255, 1 << 0); try testArgs(u16, u255, 1 << 254); - try testArgs(i32, u255, 0); - try testArgs(i32, u255, 1 << 0); - try testArgs(i32, u255, 1 << 254); try testArgs(u32, u255, 0); try testArgs(u32, u255, 1 << 0); try testArgs(u32, u255, 1 << 254); - try testArgs(i64, u255, 0); - try testArgs(i64, u255, 1 << 0); - try testArgs(i64, u255, 1 << 254); try testArgs(u64, u255, 0); try testArgs(u64, u255, 1 << 0); try testArgs(u64, u255, 1 << 254); - try testArgs(i128, u255, 0); - try testArgs(i128, u255, 1 << 0); - try testArgs(i128, u255, 1 << 254); try testArgs(u128, u255, 0); try testArgs(u128, u255, 1 << 0); try testArgs(u128, u255, 1 << 254); - try testArgs(i256, u255, 0); - try testArgs(i256, u255, 1 << 0); - try testArgs(i256, u255, 1 << 254); try testArgs(u256, u255, 0); try testArgs(u256, u255, 1 << 0); try testArgs(u256, u255, 1 << 254); - try testArgs(i512, u255, 0); - try testArgs(i512, u255, 1 << 0); - try testArgs(i512, u255, 1 << 254); try testArgs(u512, u255, 0); try testArgs(u512, u255, 1 << 0); try testArgs(u512, u255, 1 << 254); - try testArgs(i1024, u255, 0); - try testArgs(i1024, u255, 1 << 0); - try testArgs(i1024, u255, 1 << 254); try testArgs(u1024, u255, 0); try testArgs(u1024, u255, 1 << 0); try testArgs(u1024, u255, 1 << 254); @@ -4853,96 +2795,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i256, -1 << 255); try testArgs(i8, i256, -1); try testArgs(i8, i256, 0); - try testArgs(u8, i256, -1 << 255); - try testArgs(u8, i256, -1); - try testArgs(u8, i256, 0); try testArgs(i16, i256, -1 << 255); try testArgs(i16, i256, -1); try testArgs(i16, i256, 0); - try testArgs(u16, i256, -1 << 255); - try testArgs(u16, i256, -1); - try testArgs(u16, i256, 0); try testArgs(i32, i256, -1 << 255); try testArgs(i32, i256, -1); try testArgs(i32, i256, 0); - try testArgs(u32, i256, -1 << 255); - try testArgs(u32, i256, -1); - try testArgs(u32, i256, 0); try testArgs(i64, i256, -1 << 255); try testArgs(i64, i256, -1); try testArgs(i64, i256, 0); - try testArgs(u64, i256, -1 << 255); - try testArgs(u64, i256, -1); - try testArgs(u64, i256, 0); try testArgs(i128, i256, -1 << 255); try testArgs(i128, i256, -1); try testArgs(i128, i256, 0); - try testArgs(u128, i256, -1 << 255); - try testArgs(u128, i256, -1); - try testArgs(u128, i256, 0); try testArgs(i256, i256, -1 << 255); try testArgs(i256, i256, -1); try testArgs(i256, i256, 0); - try testArgs(u256, i256, -1 << 255); - try testArgs(u256, i256, -1); - try testArgs(u256, i256, 0); try testArgs(i512, i256, -1 << 255); try testArgs(i512, i256, -1); try testArgs(i512, i256, 0); - try testArgs(u512, i256, -1 << 255); - try testArgs(u512, i256, -1); - try testArgs(u512, i256, 0); try testArgs(i1024, i256, -1 << 255); try testArgs(i1024, i256, -1); try testArgs(i1024, 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(u8, u256, 0); try testArgs(u8, u256, 1 << 0); try testArgs(u8, u256, 1 << 255); - try testArgs(i16, u256, 0); - try testArgs(i16, u256, 1 << 0); - try testArgs(i16, u256, 1 << 255); try testArgs(u16, u256, 0); try testArgs(u16, u256, 1 << 0); try testArgs(u16, u256, 1 << 255); - try testArgs(i32, u256, 0); - try testArgs(i32, u256, 1 << 0); - try testArgs(i32, u256, 1 << 255); try testArgs(u32, u256, 0); try testArgs(u32, u256, 1 << 0); try testArgs(u32, u256, 1 << 255); - try testArgs(i64, u256, 0); - try testArgs(i64, u256, 1 << 0); - try testArgs(i64, u256, 1 << 255); try testArgs(u64, u256, 0); try testArgs(u64, u256, 1 << 0); try testArgs(u64, u256, 1 << 255); - try testArgs(i128, u256, 0); - try testArgs(i128, u256, 1 << 0); - try testArgs(i128, u256, 1 << 255); try testArgs(u128, u256, 0); try testArgs(u128, u256, 1 << 0); try testArgs(u128, u256, 1 << 255); - try testArgs(i256, u256, 0); - try testArgs(i256, u256, 1 << 0); - try testArgs(i256, u256, 1 << 255); try testArgs(u256, u256, 0); try testArgs(u256, u256, 1 << 0); try testArgs(u256, u256, 1 << 255); - try testArgs(i512, u256, 0); - try testArgs(i512, u256, 1 << 0); - try testArgs(i512, u256, 1 << 255); try testArgs(u512, u256, 0); try testArgs(u512, u256, 1 << 0); try testArgs(u512, u256, 1 << 255); - try testArgs(i1024, u256, 0); - try testArgs(i1024, u256, 1 << 0); - try testArgs(i1024, u256, 1 << 255); try testArgs(u1024, u256, 0); try testArgs(u1024, u256, 1 << 0); try testArgs(u1024, u256, 1 << 255); @@ -4950,96 +2844,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i257, -1 << 256); try testArgs(i8, i257, -1); try testArgs(i8, i257, 0); - try testArgs(u8, i257, -1 << 256); - try testArgs(u8, i257, -1); - try testArgs(u8, i257, 0); try testArgs(i16, i257, -1 << 256); try testArgs(i16, i257, -1); try testArgs(i16, i257, 0); - try testArgs(u16, i257, -1 << 256); - try testArgs(u16, i257, -1); - try testArgs(u16, i257, 0); try testArgs(i32, i257, -1 << 256); try testArgs(i32, i257, -1); try testArgs(i32, i257, 0); - try testArgs(u32, i257, -1 << 256); - try testArgs(u32, i257, -1); - try testArgs(u32, i257, 0); try testArgs(i64, i257, -1 << 256); try testArgs(i64, i257, -1); try testArgs(i64, i257, 0); - try testArgs(u64, i257, -1 << 256); - try testArgs(u64, i257, -1); - try testArgs(u64, i257, 0); try testArgs(i128, i257, -1 << 256); try testArgs(i128, i257, -1); try testArgs(i128, i257, 0); - try testArgs(u128, i257, -1 << 256); - try testArgs(u128, i257, -1); - try testArgs(u128, i257, 0); try testArgs(i256, i257, -1 << 256); try testArgs(i256, i257, -1); try testArgs(i256, i257, 0); - try testArgs(u256, i257, -1 << 256); - try testArgs(u256, i257, -1); - try testArgs(u256, i257, 0); try testArgs(i512, i257, -1 << 256); try testArgs(i512, i257, -1); try testArgs(i512, i257, 0); - try testArgs(u512, i257, -1 << 256); - try testArgs(u512, i257, -1); - try testArgs(u512, i257, 0); try testArgs(i1024, i257, -1 << 256); try testArgs(i1024, i257, -1); try testArgs(i1024, 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(u8, u257, 0); try testArgs(u8, u257, 1 << 0); try testArgs(u8, u257, 1 << 256); - try testArgs(i16, u257, 0); - try testArgs(i16, u257, 1 << 0); - try testArgs(i16, u257, 1 << 256); try testArgs(u16, u257, 0); try testArgs(u16, u257, 1 << 0); try testArgs(u16, u257, 1 << 256); - try testArgs(i32, u257, 0); - try testArgs(i32, u257, 1 << 0); - try testArgs(i32, u257, 1 << 256); try testArgs(u32, u257, 0); try testArgs(u32, u257, 1 << 0); try testArgs(u32, u257, 1 << 256); - try testArgs(i64, u257, 0); - try testArgs(i64, u257, 1 << 0); - try testArgs(i64, u257, 1 << 256); try testArgs(u64, u257, 0); try testArgs(u64, u257, 1 << 0); try testArgs(u64, u257, 1 << 256); - try testArgs(i128, u257, 0); - try testArgs(i128, u257, 1 << 0); - try testArgs(i128, u257, 1 << 256); try testArgs(u128, u257, 0); try testArgs(u128, u257, 1 << 0); try testArgs(u128, u257, 1 << 256); - try testArgs(i256, u257, 0); - try testArgs(i256, u257, 1 << 0); - try testArgs(i256, u257, 1 << 256); try testArgs(u256, u257, 0); try testArgs(u256, u257, 1 << 0); try testArgs(u256, u257, 1 << 256); - try testArgs(i512, u257, 0); - try testArgs(i512, u257, 1 << 0); - try testArgs(i512, u257, 1 << 256); try testArgs(u512, u257, 0); try testArgs(u512, u257, 1 << 0); try testArgs(u512, u257, 1 << 256); - try testArgs(i1024, u257, 0); - try testArgs(i1024, u257, 1 << 0); - try testArgs(i1024, u257, 1 << 256); try testArgs(u1024, u257, 0); try testArgs(u1024, u257, 1 << 0); try testArgs(u1024, u257, 1 << 256); @@ -5047,96 +2893,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i511, -1 << 510); try testArgs(i8, i511, -1); try testArgs(i8, i511, 0); - try testArgs(u8, i511, -1 << 510); - try testArgs(u8, i511, -1); - try testArgs(u8, i511, 0); try testArgs(i16, i511, -1 << 510); try testArgs(i16, i511, -1); try testArgs(i16, i511, 0); - try testArgs(u16, i511, -1 << 510); - try testArgs(u16, i511, -1); - try testArgs(u16, i511, 0); try testArgs(i32, i511, -1 << 510); try testArgs(i32, i511, -1); try testArgs(i32, i511, 0); - try testArgs(u32, i511, -1 << 510); - try testArgs(u32, i511, -1); - try testArgs(u32, i511, 0); try testArgs(i64, i511, -1 << 510); try testArgs(i64, i511, -1); try testArgs(i64, i511, 0); - try testArgs(u64, i511, -1 << 510); - try testArgs(u64, i511, -1); - try testArgs(u64, i511, 0); try testArgs(i128, i511, -1 << 510); try testArgs(i128, i511, -1); try testArgs(i128, i511, 0); - try testArgs(u128, i511, -1 << 510); - try testArgs(u128, i511, -1); - try testArgs(u128, i511, 0); try testArgs(i256, i511, -1 << 510); try testArgs(i256, i511, -1); try testArgs(i256, i511, 0); - try testArgs(u256, i511, -1 << 510); - try testArgs(u256, i511, -1); - try testArgs(u256, i511, 0); try testArgs(i512, i511, -1 << 510); try testArgs(i512, i511, -1); try testArgs(i512, i511, 0); - try testArgs(u512, i511, -1 << 510); - try testArgs(u512, i511, -1); - try testArgs(u512, i511, 0); try testArgs(i1024, i511, -1 << 510); try testArgs(i1024, i511, -1); try testArgs(i1024, 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(u8, u511, 0); try testArgs(u8, u511, 1 << 0); try testArgs(u8, u511, 1 << 510); - try testArgs(i16, u511, 0); - try testArgs(i16, u511, 1 << 0); - try testArgs(i16, u511, 1 << 510); try testArgs(u16, u511, 0); try testArgs(u16, u511, 1 << 0); try testArgs(u16, u511, 1 << 510); - try testArgs(i32, u511, 0); - try testArgs(i32, u511, 1 << 0); - try testArgs(i32, u511, 1 << 510); try testArgs(u32, u511, 0); try testArgs(u32, u511, 1 << 0); try testArgs(u32, u511, 1 << 510); - try testArgs(i64, u511, 0); - try testArgs(i64, u511, 1 << 0); - try testArgs(i64, u511, 1 << 510); try testArgs(u64, u511, 0); try testArgs(u64, u511, 1 << 0); try testArgs(u64, u511, 1 << 510); - try testArgs(i128, u511, 0); - try testArgs(i128, u511, 1 << 0); - try testArgs(i128, u511, 1 << 510); try testArgs(u128, u511, 0); try testArgs(u128, u511, 1 << 0); try testArgs(u128, u511, 1 << 510); - try testArgs(i256, u511, 0); - try testArgs(i256, u511, 1 << 0); - try testArgs(i256, u511, 1 << 510); try testArgs(u256, u511, 0); try testArgs(u256, u511, 1 << 0); try testArgs(u256, u511, 1 << 510); - try testArgs(i512, u511, 0); - try testArgs(i512, u511, 1 << 0); - try testArgs(i512, u511, 1 << 510); try testArgs(u512, u511, 0); try testArgs(u512, u511, 1 << 0); try testArgs(u512, u511, 1 << 510); - try testArgs(i1024, u511, 0); - try testArgs(i1024, u511, 1 << 0); - try testArgs(i1024, u511, 1 << 510); try testArgs(u1024, u511, 0); try testArgs(u1024, u511, 1 << 0); try testArgs(u1024, u511, 1 << 510); @@ -5144,96 +2942,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i512, -1 << 511); try testArgs(i8, i512, -1); try testArgs(i8, i512, 0); - try testArgs(u8, i512, -1 << 511); - try testArgs(u8, i512, -1); - try testArgs(u8, i512, 0); try testArgs(i16, i512, -1 << 511); try testArgs(i16, i512, -1); try testArgs(i16, i512, 0); - try testArgs(u16, i512, -1 << 511); - try testArgs(u16, i512, -1); - try testArgs(u16, i512, 0); try testArgs(i32, i512, -1 << 511); try testArgs(i32, i512, -1); try testArgs(i32, i512, 0); - try testArgs(u32, i512, -1 << 511); - try testArgs(u32, i512, -1); - try testArgs(u32, i512, 0); try testArgs(i64, i512, -1 << 511); try testArgs(i64, i512, -1); try testArgs(i64, i512, 0); - try testArgs(u64, i512, -1 << 511); - try testArgs(u64, i512, -1); - try testArgs(u64, i512, 0); try testArgs(i128, i512, -1 << 511); try testArgs(i128, i512, -1); try testArgs(i128, i512, 0); - try testArgs(u128, i512, -1 << 511); - try testArgs(u128, i512, -1); - try testArgs(u128, i512, 0); try testArgs(i256, i512, -1 << 511); try testArgs(i256, i512, -1); try testArgs(i256, i512, 0); - try testArgs(u256, i512, -1 << 511); - try testArgs(u256, i512, -1); - try testArgs(u256, i512, 0); try testArgs(i512, i512, -1 << 511); try testArgs(i512, i512, -1); try testArgs(i512, i512, 0); - try testArgs(u512, i512, -1 << 511); - try testArgs(u512, i512, -1); - try testArgs(u512, i512, 0); try testArgs(i1024, i512, -1 << 511); try testArgs(i1024, i512, -1); try testArgs(i1024, 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(u8, u512, 0); try testArgs(u8, u512, 1 << 0); try testArgs(u8, u512, 1 << 511); - try testArgs(i16, u512, 0); - try testArgs(i16, u512, 1 << 0); - try testArgs(i16, u512, 1 << 511); try testArgs(u16, u512, 0); try testArgs(u16, u512, 1 << 0); try testArgs(u16, u512, 1 << 511); - try testArgs(i32, u512, 0); - try testArgs(i32, u512, 1 << 0); - try testArgs(i32, u512, 1 << 511); try testArgs(u32, u512, 0); try testArgs(u32, u512, 1 << 0); try testArgs(u32, u512, 1 << 511); - try testArgs(i64, u512, 0); - try testArgs(i64, u512, 1 << 0); - try testArgs(i64, u512, 1 << 511); try testArgs(u64, u512, 0); try testArgs(u64, u512, 1 << 0); try testArgs(u64, u512, 1 << 511); - try testArgs(i128, u512, 0); - try testArgs(i128, u512, 1 << 0); - try testArgs(i128, u512, 1 << 511); try testArgs(u128, u512, 0); try testArgs(u128, u512, 1 << 0); try testArgs(u128, u512, 1 << 511); - try testArgs(i256, u512, 0); - try testArgs(i256, u512, 1 << 0); - try testArgs(i256, u512, 1 << 511); try testArgs(u256, u512, 0); try testArgs(u256, u512, 1 << 0); try testArgs(u256, u512, 1 << 511); - try testArgs(i512, u512, 0); - try testArgs(i512, u512, 1 << 0); - try testArgs(i512, u512, 1 << 511); try testArgs(u512, u512, 0); try testArgs(u512, u512, 1 << 0); try testArgs(u512, u512, 1 << 511); - try testArgs(i1024, u512, 0); - try testArgs(i1024, u512, 1 << 0); - try testArgs(i1024, u512, 1 << 511); try testArgs(u1024, u512, 0); try testArgs(u1024, u512, 1 << 0); try testArgs(u1024, u512, 1 << 511); @@ -5241,96 +2991,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i513, -1 << 512); try testArgs(i8, i513, -1); try testArgs(i8, i513, 0); - try testArgs(u8, i513, -1 << 512); - try testArgs(u8, i513, -1); - try testArgs(u8, i513, 0); try testArgs(i16, i513, -1 << 512); try testArgs(i16, i513, -1); try testArgs(i16, i513, 0); - try testArgs(u16, i513, -1 << 512); - try testArgs(u16, i513, -1); - try testArgs(u16, i513, 0); try testArgs(i32, i513, -1 << 512); try testArgs(i32, i513, -1); try testArgs(i32, i513, 0); - try testArgs(u32, i513, -1 << 512); - try testArgs(u32, i513, -1); - try testArgs(u32, i513, 0); try testArgs(i64, i513, -1 << 512); try testArgs(i64, i513, -1); try testArgs(i64, i513, 0); - try testArgs(u64, i513, -1 << 512); - try testArgs(u64, i513, -1); - try testArgs(u64, i513, 0); try testArgs(i128, i513, -1 << 512); try testArgs(i128, i513, -1); try testArgs(i128, i513, 0); - try testArgs(u128, i513, -1 << 512); - try testArgs(u128, i513, -1); - try testArgs(u128, i513, 0); try testArgs(i256, i513, -1 << 512); try testArgs(i256, i513, -1); try testArgs(i256, i513, 0); - try testArgs(u256, i513, -1 << 512); - try testArgs(u256, i513, -1); - try testArgs(u256, i513, 0); try testArgs(i512, i513, -1 << 512); try testArgs(i512, i513, -1); try testArgs(i512, i513, 0); - try testArgs(u512, i513, -1 << 512); - try testArgs(u512, i513, -1); - try testArgs(u512, i513, 0); try testArgs(i1024, i513, -1 << 512); try testArgs(i1024, i513, -1); try testArgs(i1024, 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(u8, u513, 0); try testArgs(u8, u513, 1 << 0); try testArgs(u8, u513, 1 << 512); - try testArgs(i16, u513, 0); - try testArgs(i16, u513, 1 << 0); - try testArgs(i16, u513, 1 << 512); try testArgs(u16, u513, 0); try testArgs(u16, u513, 1 << 0); try testArgs(u16, u513, 1 << 512); - try testArgs(i32, u513, 0); - try testArgs(i32, u513, 1 << 0); - try testArgs(i32, u513, 1 << 512); try testArgs(u32, u513, 0); try testArgs(u32, u513, 1 << 0); try testArgs(u32, u513, 1 << 512); - try testArgs(i64, u513, 0); - try testArgs(i64, u513, 1 << 0); - try testArgs(i64, u513, 1 << 512); try testArgs(u64, u513, 0); try testArgs(u64, u513, 1 << 0); try testArgs(u64, u513, 1 << 512); - try testArgs(i128, u513, 0); - try testArgs(i128, u513, 1 << 0); - try testArgs(i128, u513, 1 << 512); try testArgs(u128, u513, 0); try testArgs(u128, u513, 1 << 0); try testArgs(u128, u513, 1 << 512); - try testArgs(i256, u513, 0); - try testArgs(i256, u513, 1 << 0); - try testArgs(i256, u513, 1 << 512); try testArgs(u256, u513, 0); try testArgs(u256, u513, 1 << 0); try testArgs(u256, u513, 1 << 512); - try testArgs(i512, u513, 0); - try testArgs(i512, u513, 1 << 0); - try testArgs(i512, u513, 1 << 512); try testArgs(u512, u513, 0); try testArgs(u512, u513, 1 << 0); try testArgs(u512, u513, 1 << 512); - try testArgs(i1024, u513, 0); - try testArgs(i1024, u513, 1 << 0); - try testArgs(i1024, u513, 1 << 512); try testArgs(u1024, u513, 0); try testArgs(u1024, u513, 1 << 0); try testArgs(u1024, u513, 1 << 512); @@ -5338,96 +3040,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i1023, -1 << 1022); try testArgs(i8, i1023, -1); try testArgs(i8, i1023, 0); - try testArgs(u8, i1023, -1 << 1022); - try testArgs(u8, i1023, -1); - try testArgs(u8, i1023, 0); try testArgs(i16, i1023, -1 << 1022); try testArgs(i16, i1023, -1); try testArgs(i16, i1023, 0); - try testArgs(u16, i1023, -1 << 1022); - try testArgs(u16, i1023, -1); - try testArgs(u16, i1023, 0); try testArgs(i32, i1023, -1 << 1022); try testArgs(i32, i1023, -1); try testArgs(i32, i1023, 0); - try testArgs(u32, i1023, -1 << 1022); - try testArgs(u32, i1023, -1); - try testArgs(u32, i1023, 0); try testArgs(i64, i1023, -1 << 1022); try testArgs(i64, i1023, -1); try testArgs(i64, i1023, 0); - try testArgs(u64, i1023, -1 << 1022); - try testArgs(u64, i1023, -1); - try testArgs(u64, i1023, 0); try testArgs(i128, i1023, -1 << 1022); try testArgs(i128, i1023, -1); try testArgs(i128, i1023, 0); - try testArgs(u128, i1023, -1 << 1022); - try testArgs(u128, i1023, -1); - try testArgs(u128, i1023, 0); try testArgs(i256, i1023, -1 << 1022); try testArgs(i256, i1023, -1); try testArgs(i256, i1023, 0); - try testArgs(u256, i1023, -1 << 1022); - try testArgs(u256, i1023, -1); - try testArgs(u256, i1023, 0); try testArgs(i512, i1023, -1 << 1022); try testArgs(i512, i1023, -1); try testArgs(i512, i1023, 0); - try testArgs(u512, i1023, -1 << 1022); - try testArgs(u512, i1023, -1); - try testArgs(u512, i1023, 0); try testArgs(i1024, i1023, -1 << 1022); try testArgs(i1024, i1023, -1); try testArgs(i1024, 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(u8, u1023, 0); try testArgs(u8, u1023, 1 << 0); try testArgs(u8, u1023, 1 << 1022); - try testArgs(i16, u1023, 0); - try testArgs(i16, u1023, 1 << 0); - try testArgs(i16, u1023, 1 << 1022); try testArgs(u16, u1023, 0); try testArgs(u16, u1023, 1 << 0); try testArgs(u16, u1023, 1 << 1022); - try testArgs(i32, u1023, 0); - try testArgs(i32, u1023, 1 << 0); - try testArgs(i32, u1023, 1 << 1022); try testArgs(u32, u1023, 0); try testArgs(u32, u1023, 1 << 0); try testArgs(u32, u1023, 1 << 1022); - try testArgs(i64, u1023, 0); - try testArgs(i64, u1023, 1 << 0); - try testArgs(i64, u1023, 1 << 1022); try testArgs(u64, u1023, 0); try testArgs(u64, u1023, 1 << 0); try testArgs(u64, u1023, 1 << 1022); - try testArgs(i128, u1023, 0); - try testArgs(i128, u1023, 1 << 0); - try testArgs(i128, u1023, 1 << 1022); try testArgs(u128, u1023, 0); try testArgs(u128, u1023, 1 << 0); try testArgs(u128, u1023, 1 << 1022); - try testArgs(i256, u1023, 0); - try testArgs(i256, u1023, 1 << 0); - try testArgs(i256, u1023, 1 << 1022); try testArgs(u256, u1023, 0); try testArgs(u256, u1023, 1 << 0); try testArgs(u256, u1023, 1 << 1022); - try testArgs(i512, u1023, 0); - try testArgs(i512, u1023, 1 << 0); - try testArgs(i512, u1023, 1 << 1022); try testArgs(u512, u1023, 0); try testArgs(u512, u1023, 1 << 0); try testArgs(u512, u1023, 1 << 1022); - try testArgs(i1024, u1023, 0); - try testArgs(i1024, u1023, 1 << 0); - try testArgs(i1024, u1023, 1 << 1022); try testArgs(u1024, u1023, 0); try testArgs(u1024, u1023, 1 << 0); try testArgs(u1024, u1023, 1 << 1022); @@ -5435,96 +3089,48 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i1024, -1 << 1023); try testArgs(i8, i1024, -1); try testArgs(i8, i1024, 0); - try testArgs(u8, i1024, -1 << 1023); - try testArgs(u8, i1024, -1); - try testArgs(u8, i1024, 0); try testArgs(i16, i1024, -1 << 1023); try testArgs(i16, i1024, -1); try testArgs(i16, i1024, 0); - try testArgs(u16, i1024, -1 << 1023); - try testArgs(u16, i1024, -1); - try testArgs(u16, i1024, 0); try testArgs(i32, i1024, -1 << 1023); try testArgs(i32, i1024, -1); try testArgs(i32, i1024, 0); - try testArgs(u32, i1024, -1 << 1023); - try testArgs(u32, i1024, -1); - try testArgs(u32, i1024, 0); try testArgs(i64, i1024, -1 << 1023); try testArgs(i64, i1024, -1); try testArgs(i64, i1024, 0); - try testArgs(u64, i1024, -1 << 1023); - try testArgs(u64, i1024, -1); - try testArgs(u64, i1024, 0); try testArgs(i128, i1024, -1 << 1023); try testArgs(i128, i1024, -1); try testArgs(i128, i1024, 0); - try testArgs(u128, i1024, -1 << 1023); - try testArgs(u128, i1024, -1); - try testArgs(u128, i1024, 0); try testArgs(i256, i1024, -1 << 1023); try testArgs(i256, i1024, -1); try testArgs(i256, i1024, 0); - try testArgs(u256, i1024, -1 << 1023); - try testArgs(u256, i1024, -1); - try testArgs(u256, i1024, 0); try testArgs(i512, i1024, -1 << 1023); try testArgs(i512, i1024, -1); try testArgs(i512, i1024, 0); - try testArgs(u512, i1024, -1 << 1023); - try testArgs(u512, i1024, -1); - try testArgs(u512, i1024, 0); try testArgs(i1024, i1024, -1 << 1023); try testArgs(i1024, i1024, -1); try testArgs(i1024, 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(u8, u1024, 0); try testArgs(u8, u1024, 1 << 0); try testArgs(u8, u1024, 1 << 1023); - try testArgs(i16, u1024, 0); - try testArgs(i16, u1024, 1 << 0); - try testArgs(i16, u1024, 1 << 1023); try testArgs(u16, u1024, 0); try testArgs(u16, u1024, 1 << 0); try testArgs(u16, u1024, 1 << 1023); - try testArgs(i32, u1024, 0); - try testArgs(i32, u1024, 1 << 0); - try testArgs(i32, u1024, 1 << 1023); try testArgs(u32, u1024, 0); try testArgs(u32, u1024, 1 << 0); try testArgs(u32, u1024, 1 << 1023); - try testArgs(i64, u1024, 0); - try testArgs(i64, u1024, 1 << 0); - try testArgs(i64, u1024, 1 << 1023); try testArgs(u64, u1024, 0); try testArgs(u64, u1024, 1 << 0); try testArgs(u64, u1024, 1 << 1023); - try testArgs(i128, u1024, 0); - try testArgs(i128, u1024, 1 << 0); - try testArgs(i128, u1024, 1 << 1023); try testArgs(u128, u1024, 0); try testArgs(u128, u1024, 1 << 0); try testArgs(u128, u1024, 1 << 1023); - try testArgs(i256, u1024, 0); - try testArgs(i256, u1024, 1 << 0); - try testArgs(i256, u1024, 1 << 1023); try testArgs(u256, u1024, 0); try testArgs(u256, u1024, 1 << 0); try testArgs(u256, u1024, 1 << 1023); - try testArgs(i512, u1024, 0); - try testArgs(i512, u1024, 1 << 0); - try testArgs(i512, u1024, 1 << 1023); try testArgs(u512, u1024, 0); try testArgs(u512, u1024, 1 << 0); try testArgs(u512, u1024, 1 << 1023); - try testArgs(i1024, u1024, 0); - try testArgs(i1024, u1024, 1 << 0); - try testArgs(i1024, u1024, 1 << 1023); try testArgs(u1024, u1024, 0); try testArgs(u1024, u1024, 1 << 0); try testArgs(u1024, u1024, 1 << 1023); @@ -5532,99 +3138,1606 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty try testArgs(i8, i1025, -1 << 1024); try testArgs(i8, i1025, -1); try testArgs(i8, i1025, 0); - try testArgs(u8, i1025, -1 << 1024); - try testArgs(u8, i1025, -1); - try testArgs(u8, i1025, 0); try testArgs(i16, i1025, -1 << 1024); try testArgs(i16, i1025, -1); try testArgs(i16, i1025, 0); - try testArgs(u16, i1025, -1 << 1024); - try testArgs(u16, i1025, -1); - try testArgs(u16, i1025, 0); try testArgs(i32, i1025, -1 << 1024); try testArgs(i32, i1025, -1); try testArgs(i32, i1025, 0); - try testArgs(u32, i1025, -1 << 1024); - try testArgs(u32, i1025, -1); - try testArgs(u32, i1025, 0); try testArgs(i64, i1025, -1 << 1024); try testArgs(i64, i1025, -1); try testArgs(i64, i1025, 0); - try testArgs(u64, i1025, -1 << 1024); - try testArgs(u64, i1025, -1); - try testArgs(u64, i1025, 0); try testArgs(i128, i1025, -1 << 1024); try testArgs(i128, i1025, -1); try testArgs(i128, i1025, 0); - try testArgs(u128, i1025, -1 << 1024); - try testArgs(u128, i1025, -1); - try testArgs(u128, i1025, 0); try testArgs(i256, i1025, -1 << 1024); try testArgs(i256, i1025, -1); try testArgs(i256, i1025, 0); - try testArgs(u256, i1025, -1 << 1024); - try testArgs(u256, i1025, -1); - try testArgs(u256, i1025, 0); try testArgs(i512, i1025, -1 << 1024); try testArgs(i512, i1025, -1); try testArgs(i512, i1025, 0); - try testArgs(u512, i1025, -1 << 1024); - try testArgs(u512, i1025, -1); - try testArgs(u512, 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(u8, u1025, 0); - try testArgs(u8, u1025, 1 << 0); - try testArgs(u8, u1025, 1 << 1024); try testArgs(i16, u1025, 0); try testArgs(i16, u1025, 1 << 0); try testArgs(i16, u1025, 1 << 1024); - try testArgs(u16, u1025, 0); - try testArgs(u16, u1025, 1 << 0); - try testArgs(u16, u1025, 1 << 1024); try testArgs(i32, u1025, 0); try testArgs(i32, u1025, 1 << 0); try testArgs(i32, u1025, 1 << 1024); - try testArgs(u32, u1025, 0); - try testArgs(u32, u1025, 1 << 0); - try testArgs(u32, u1025, 1 << 1024); try testArgs(i64, u1025, 0); try testArgs(i64, u1025, 1 << 0); try testArgs(i64, u1025, 1 << 1024); - try testArgs(u64, u1025, 0); - try testArgs(u64, u1025, 1 << 0); - try testArgs(u64, u1025, 1 << 1024); try testArgs(i128, u1025, 0); try testArgs(i128, u1025, 1 << 0); try testArgs(i128, u1025, 1 << 1024); - try testArgs(u128, u1025, 0); - try testArgs(u128, u1025, 1 << 0); - try testArgs(u128, u1025, 1 << 1024); try testArgs(i256, u1025, 0); try testArgs(i256, u1025, 1 << 0); try testArgs(i256, u1025, 1 << 1024); - try testArgs(u256, u1025, 0); - try testArgs(u256, u1025, 1 << 0); - try testArgs(u256, u1025, 1 << 1024); try testArgs(i512, u1025, 0); try testArgs(i512, u1025, 1 << 0); try testArgs(i512, u1025, 1 << 1024); - try testArgs(u512, u1025, 0); - try testArgs(u512, u1025, 1 << 0); - try testArgs(u512, u1025, 1 << 1024); try testArgs(i1024, u1025, 0); try testArgs(i1024, u1025, 1 << 0); try testArgs(i1024, u1025, 1 << 1024); - try testArgs(u1024, u1025, 0); - try testArgs(u1024, u1025, 1 << 0); - try testArgs(u1024, u1025, 1 << 1024); } fn testFloats() !void { @setEvalBranchQuota(3_100); @@ -10804,6 +9917,46 @@ test clz { try test_clz.testIntVectors(); } +inline fn intCast(comptime Result: type, comptime Type: type, rhs: Type) Result { + const res_info = switch (@typeInfo(Result)) { + .int => |info| info, + .vector => |info| @typeInfo(info.child).int, + else => @compileError(@typeName(Result)), + }; + const rhs_info = switch (@typeInfo(Type)) { + .int => |info| info, + .vector => |info| @typeInfo(info.child).int, + else => @compileError(@typeName(Type)), + }; + const min_bits = @min(res_info.bits, rhs_info.bits); + return @intCast(switch (@as(union(enum) { + shift: std.math.Log2Int(Type), + mask: std.math.Log2IntCeil(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 if (rhs < 0) + rhs | std.math.minInt(Type) >> bits + else + rhs & std.math.maxInt(Type) >> bits, + .mask => |bits| if (bits == rhs_info.bits) rhs else rhs & (1 << bits) - 1, + }); +} +test intCast { + const test_int_cast = cast(intCast, .{}); + try test_int_cast.testInts(); +} + inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type) Result { return @floatCast(rhs); } From 4c5abe5ac664a7214d822b09703682a5cac6891c Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Fri, 31 Jan 2025 21:36:42 -0500 Subject: [PATCH 5/5] x86_64: rewrite vector `@intCast` --- build.zig | 2 +- src/arch/x86_64/CodeGen.zig | 3773 ++++++++++++++++++++++++++++- test/behavior/maximum_minimum.zig | 7 +- test/behavior/x86_64/math.zig | 122 +- 4 files changed, 3801 insertions(+), 103 deletions(-) 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/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index b1b4b68df9..956aa29c09 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -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(4_100); + @setEvalBranchQuota(4_500); const pt = cg.pt; const zcu = pt.zcu; const ip = &zcu.intern_pool; @@ -21900,7 +21900,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ }, } }, @@ -21911,7 +21911,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_, .cvtps2ph, .dst0q, .src0x, .rm(.{}), ._ }, } }, @@ -21922,7 +21922,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_, .cvtps2ph, .dst0x, .src0y, .rm(.{}), ._ }, } }, @@ -22259,7 +22259,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ss, .cvtsd2, .dst0x, .src0x, .src0q, ._ }, } }, @@ -22307,7 +22307,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtpd2, .dst0x, .src0x, ._, ._ }, } }, @@ -22319,7 +22319,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._ps, .cvtpd2, .dst0x, .src0x, ._, ._ }, } }, @@ -22331,7 +22331,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtpd2, .dst0x, .src0y, ._, ._ }, } }, @@ -23220,7 +23220,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, } }, @@ -23232,7 +23232,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, } }, @@ -23244,7 +23244,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0y, .src0x, ._, ._ }, } }, @@ -23397,7 +23397,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, .{ ._, .v_sd, .cvtss2, .dst0x, .dst0x, .dst0d, ._ }, @@ -23410,7 +23410,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, .{ ._, .v_pd, .cvtps2, .dst0x, .dst0q, ._, ._ }, @@ -23423,7 +23423,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_ps, .cvtph2, .dst0x, .src0q, ._, ._ }, .{ ._, .v_pd, .cvtps2, .dst0y, .dst0x, ._, ._ }, @@ -23610,7 +23610,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .to_sse, .none } }, }, .extra_temps = .{ - .{ .type = .f32, .kind = .{ .rc = .sse } }, + .{ .type = .f32, .kind = .{ .mut_rc = .{ .ref = .src0, .rc = .sse } } }, .{ .type = .f32, .kind = .mem }, .{ .type = .f80, .kind = .{ .reg = .st7 } }, .unused, @@ -23879,7 +23879,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .patterns = &.{ .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_sd, .cvtss2, .dst0x, .src0x, .src0d, ._ }, } }, @@ -23927,7 +23927,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_pd, .cvtps2, .dst0x, .src0q, ._, ._ }, } }, @@ -23939,7 +23939,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, ._pd, .cvtps2, .dst0x, .src0q, ._, ._ }, } }, @@ -23951,7 +23951,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_sse, .none } }, }, - .dst_temps = .{.{ .rc = .sse }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .sse } }}, .each = .{ .once = &.{ .{ ._, .v_pd, .cvtps2, .dst0y, .src0x, ._, ._ }, } }, @@ -24536,34 +24536,29 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { }; try res[0].finish(inst, &.{ty_op.operand}, &ops, cg); }, - .intcast => |air_tag| if (use_old) try cg.airIntCast(inst) else fallback: { + .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(); - if (dst_ty.isVector(zcu)) break :fallback try cg.airIntCast(inst); 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 = .{ .mem, .none } }, - .{ .src = .{ .to_gpr, .none } }, + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, - .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, - } }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, }, .{ .required_features = .{ .@"64bit", null, null, null }, .dst_constraints = .{.{ .int = .qword }}, .patterns = &.{ - .{ .src = .{ .mem, .none } }, - .{ .src = .{ .to_gpr, .none } }, + .{ .src = .{ .mut_mem, .none } }, + .{ .src = .{ .to_mut_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, - .each = .{ .once = &.{ - .{ ._, ._, .mov, .dst0q, .src0q, ._, ._ }, - } }, + .dst_temps = .{.{ .ref = .src0 }}, + .each = .{ .once = &.{} }, }, .{ .dst_constraints = .{.{ .int = .byte }}, .patterns = &.{ @@ -24619,13 +24614,850 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .unused, }, .dst_temps = .{.mem}, - .clobbers = .{ .eflags = true }, .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 }}, @@ -24633,7 +25465,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .movsx, .dst0d, .src0b, ._, ._ }, } }, @@ -24644,7 +25476,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, } }, @@ -24656,7 +25488,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .movsx, .dst0q, .src0b, ._, ._ }, } }, @@ -24668,7 +25500,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .movzx, .dst0d, .src0b, ._, ._ }, } }, @@ -24793,7 +25625,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .movsx, .dst0d, .src0w, ._, ._ }, } }, @@ -24804,7 +25636,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .movzx, .dst0d, .src0w, ._, ._ }, } }, @@ -24816,7 +25648,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .movsx, .dst0q, .src0w, ._, ._ }, } }, @@ -24828,7 +25660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .movzx, .dst0d, .src0w, ._, ._ }, } }, @@ -24954,7 +25786,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._d, .movsx, .dst0q, .src0d, ._, ._ }, } }, @@ -24966,7 +25798,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ .src = .{ .mem, .none } }, .{ .src = .{ .to_gpr, .none } }, }, - .dst_temps = .{.{ .rc = .general_purpose }}, + .dst_temps = .{.{ .mut_rc = .{ .ref = .src0, .rc = .general_purpose } }}, .each = .{ .once = &.{ .{ ._, ._, .mov, .dst0d, .src0d, ._, ._ }, } }, @@ -25202,6 +26034,2816 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { .{ ._, ._, .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), @@ -38527,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, @@ -38677,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, @@ -38733,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), ); } @@ -38748,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, @@ -38780,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) } }, }); @@ -38917,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), ), }, @@ -38978,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 = .{ @@ -39043,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), @@ -39053,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), @@ -39071,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 }), } }, }); @@ -39088,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) } }, }); @@ -39613,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); @@ -44201,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() }; @@ -45654,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)); }, } @@ -46630,12 +50273,14 @@ const Select = struct { ptr_bit_size, size, delta_size, + delta_elem_size, size_sub_elem_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, @@ -46656,6 +50301,8 @@ const Select = struct { 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_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" }; @@ -46670,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" }; @@ -47141,6 +50789,8 @@ const Select = struct { .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)); @@ -47153,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), 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 9cc957614c..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))) { @@ -1648,12 +1653,12 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty comptime imm_arg: Type, mem_arg: Type, ) !void { - const expected = comptime op(Result, Type, imm_arg); + const expected = comptime op(Result, Type, imm_arg, imm_arg); var reg_arg = mem_arg; _ = .{®_arg}; - try checkExpected(expected, op(Result, Type, reg_arg), opts.strict); - try checkExpected(expected, op(Result, Type, mem_arg), opts.strict); - try checkExpected(expected, op(Result, Type, imm_arg), opts.strict); + 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 { @@ -5218,6 +5223,39 @@ fn cast(comptime op: anytype, comptime opts: struct { strict: bool = false }) ty 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 }); @@ -9917,21 +9955,18 @@ test clz { try test_clz.testIntVectors(); } -inline fn intCast(comptime Result: type, comptime Type: type, rhs: Type) Result { +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 = switch (@typeInfo(Type)) { - .int => |info| info, - .vector => |info| @typeInfo(info.child).int, - else => @compileError(@typeName(Type)), - }; + 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(Type), - mask: std.math.Log2IntCeil(Type), + 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 }, @@ -9943,21 +9978,34 @@ inline fn intCast(comptime Result: type, comptime Type: type, rhs: Type) Result }, })) { // TODO: if (bits == 0) rhs else rhs >> bits, - .shift => |bits| if (bits == 0) - rhs - else if (rhs < 0) - rhs | std.math.minInt(Type) >> bits - else - rhs & std.math.maxInt(Type) >> bits, - .mask => |bits| if (bits == rhs_info.bits) rhs else rhs & (1 << bits) - 1, + .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) Result { +inline fn floatCast(comptime Result: type, comptime Type: type, rhs: Type, comptime _: Type) Result { return @floatCast(rhs); } test floatCast {