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 fc3dbcb23d5acecaeeef66258ecd9ec0bb92bbac..b0f2776a824602b569df19541a80ed7bbc997d3c 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 }, - .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 } }, }, @@ -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 510c8289c61f3f53adea2b2badf676d86dc266b9..5c5e44003500a45fde7128a2b884ee388ce7a4f3 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; } -- 2.54.0 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 30ea7b0abc0750bde40c94a7a2c054ba8d914f78..f6ca6edb032775f95e101268a2d0e3f9915c08cf 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 ead34cb38353e34fb555b847d60e64e2fbb25457..79760ea24d30f2a43de68eb6f77fe162574a7be6 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 28102a9c4594c21345e77b45d39c663c0ca7395c..199e81b86b630798aaed709f443c82ae6bf775a0 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 583c6d46bb65f84f37a429527f6755a31b56eeee..a8cb81c51b9a9ee8bf2063d129ec484268a274c4 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 bc9d5ea55fbaa93a14629d73a37037a8ffaaec16..4a11dd4544e828f6b5fb4f0f30f530f95be61cbf 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 13b302180d4a523997f0632e8b6ffc20ddee0b8d..74653bce01ae11984c4e439c19a7cb76c74937cd 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 9ff240259ccba81493fdec89fb50711e77ef6128..d3aa7d4b468c779896457fe8c38effdc7132e9cc 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 fc7335b4c6535d4b164330b179b1d86b4b1b45f8..96026531b296478d0bb58ff9bcc183f9315c88d5 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 de0f9836b27cc01d9ebf17cda7ad459a03d2e01a..2db96edd6d66a7842d9071929d7a4007ec73305d 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 626914c38baf3ef2bbf3fa97414eb723ac7e4c00..23133a13dbf0624daf18cdfa8fce75e1396970b4 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 ecce27145948ce28c2f5e38f6d2820fa7ca0aae8..50dbf597db2a3de5a32ceb56a0435d576aea8125 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 b0f2776a824602b569df19541a80ed7bbc997d3c..5b56cc4c026ec861089aa2348722c963f5a62c30 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 241f215875aaaaa1cc0824aff57f624b7c23ea72..b9731716f799497bf6523f972653cae94a7319e0 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 7ca35d149b486a2ef3159bcab3c2ff3ec89fbfa0..97ed00c98d84d2d7e17f77e6b3a7b925544bc136 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 e9322a9d709517ac958c42008eaab34b6bdf0c5b..e1baf20156c0ef55c9c243bcd1816519c55ecd75 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 d4cd20f3d4113479724c784b7a9abac6c384e92e..73e075a0b2160e20bc7e86a59ecbe1fb07394a68 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 546d10b0bcfd658e0bba502f8b8df8f2e49615dc..29387f0cd55021472242c653448f9c5b1ff23ca2 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, + }, }; } -- 2.54.0 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 f26bc288f4e5cd54a1c1dc426b0dd16a68006b34..34888e16615f14f68fd75c892a3daa0124a4e79b 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 f6ca6edb032775f95e101268a2d0e3f9915c08cf..22727adbd9251a2c50e940d16168da41ce9759cb 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 ed585a03934ed98ccb6caea966f2023cb771fa8b..3668228e07bce0624c5cb8e625f3c5aeef89bea0 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 4a11dd4544e828f6b5fb4f0f30f530f95be61cbf..8c7962fbdec0924e640f817cd1e07cb9469ed640 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 e6fc9c7d6ab0d27908170abf719b77b434b8bdaa..8b9690e76c45e6434a2d04e1a5eea90d1525c325 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 5b56cc4c026ec861089aa2348722c963f5a62c30..24fcf31064c09c602befa25fbcd7c7ce1ad705b9 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,6 +45317,32 @@ const Select = struct { .yl2x => s.top +%= 1, else => unreachable, }, + .f_cstp => switch (mir_tag[1]) { + .de => s.top -%= 1, + .in => s.top +%= 1, + else => unreachable, + }, + .f_l2e, .f_l2t, .f_lg2, .f_ln2, .f_pi, .f_z => switch (mir_tag[1]) { + .ld => s.top -%= 1, + else => unreachable, + }, + .f_p => switch (mir_tag[1]) { + .add, .com, .comi, .div, .divr, .mul, .st, .sub, .subr, .ucom, .ucomi => s.top +%= 1, + else => { + const fixes = @tagName(mir_tag[0]); + const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; + std.debug.panic("{s}: {s}{s}{s}\n", .{ + @src().fn_name, + fixes[0..fixes_blank], + @tagName(mir_tag[1]), + fixes[fixes_blank + 1 ..], + }); + }, + }, + .f_pp => switch (mir_tag[1]) { + .com, .ucom => s.top +%= 2, + else => unreachable, + }, .fb_ => switch (mir_tag[1]) { .ld => s.top -%= 1, else => unreachable, @@ -43620,32 +45369,6 @@ const Select = struct { .st => {}, else => unreachable, }, - .f_cstp => switch (mir_tag[1]) { - .de => s.top -%= 1, - .in => s.top +%= 1, - else => unreachable, - }, - .f_l2e, .f_l2t, .f_lg2, .f_ln2, .f_pi, .f_z => switch (mir_tag[1]) { - .ld => s.top -%= 1, - else => unreachable, - }, - .f_p => switch (mir_tag[1]) { - .add, .com, .comi, .div, .divr, .mul, .st, .sub, .subr, .ucom, .ucomi => s.top +%= 1, - else => { - const fixes = @tagName(mir_tag[0]); - const fixes_blank = std.mem.indexOfScalar(u8, fixes, '_').?; - std.debug.panic("{s}: {s}{s}{s}\n", .{ - @src().fn_name, - fixes[0..fixes_blank], - @tagName(mir_tag[1]), - fixes[fixes_blank + 1 ..], - }); - }, - }, - .f_pp => switch (mir_tag[1]) { - .com, .ucom => s.top +%= 2, - 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 53e8a6be827e513d787570a7ab82c9b099021afa..4c6f37c69da5aa5a1947a77c4302b865f0e606c4 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 5c5e44003500a45fde7128a2b884ee388ce7a4f3..4642f822a3cbcb2786d81b38a3330ddbc92db47e 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 35d68d19b8399e251811fc68e6e1451547a10a25..0a9467d7094ff6335898d241eb1b80c7ac5b491d 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 1a8c8830df9904a25677aaff50fb81a1b79b7d9c..b51a14443115a7d3defb962432d54b8a92c4e2f9 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 21f199f622e6ed1e6d50dbac74cb283f9295e75b..193772c50be060133f1b57cc937d84930aedf771 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 -- 2.54.0 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 | 3935 +++++++++++++-------------------- 2 files changed, 2605 insertions(+), 2774 deletions(-) diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 24fcf31064c09c602befa25fbcd7c7ce1ad705b9..b1b4b68df9705c5fae59f4e7418b15d83c9babf6 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 4642f822a3cbcb2786d81b38a3330ddbc92db47e..9cc957614cfc70968eab31fb2efd4f62858ecf06 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,2330 +2501,2243 @@ 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(u8, u95, 0); + try testArgs(u8, u95, 1 << 0); + try testArgs(u8, u95, 1 << 94); + try testArgs(u16, u95, 0); + try testArgs(u16, u95, 1 << 0); + try testArgs(u16, u95, 1 << 94); + try testArgs(u32, u95, 0); + try testArgs(u32, u95, 1 << 0); + try testArgs(u32, u95, 1 << 94); + try testArgs(u64, u95, 0); + try testArgs(u64, u95, 1 << 0); + try testArgs(u64, u95, 1 << 94); + try testArgs(u128, u95, 0); + try testArgs(u128, u95, 1 << 0); + try testArgs(u128, u95, 1 << 94); + try testArgs(u256, u95, 0); + try testArgs(u256, u95, 1 << 0); + try testArgs(u256, u95, 1 << 94); + try testArgs(u512, u95, 0); + try testArgs(u512, u95, 1 << 0); + try testArgs(u512, u95, 1 << 94); + try testArgs(u1024, u95, 0); + try testArgs(u1024, u95, 1 << 0); + try testArgs(u1024, u95, 1 << 94); + + try testArgs(i8, i97, -1 << 96); + try testArgs(i8, i97, -1); + try testArgs(i8, i97, 0); + try testArgs(i16, i97, -1 << 96); + try testArgs(i16, i97, -1); + try testArgs(i16, i97, 0); + try testArgs(i32, i97, -1 << 96); + try testArgs(i32, i97, -1); + try testArgs(i32, i97, 0); + try testArgs(i64, i97, -1 << 96); + try testArgs(i64, i97, -1); + try testArgs(i64, i97, 0); + try testArgs(i128, i97, -1 << 96); + try testArgs(i128, i97, -1); + try testArgs(i128, i97, 0); + try testArgs(i256, i97, -1 << 96); + try testArgs(i256, i97, -1); + try testArgs(i256, i97, 0); + try testArgs(i512, i97, -1 << 96); + try testArgs(i512, i97, -1); + try testArgs(i512, i97, 0); + try testArgs(i1024, i97, -1 << 96); + try testArgs(i1024, i97, -1); + try testArgs(i1024, i97, 0); + try testArgs(u8, u97, 0); + try testArgs(u8, u97, 1 << 0); + try testArgs(u8, u97, 1 << 96); + try testArgs(u16, u97, 0); + try testArgs(u16, u97, 1 << 0); + try testArgs(u16, u97, 1 << 96); + try testArgs(u32, u97, 0); + try testArgs(u32, u97, 1 << 0); + try testArgs(u32, u97, 1 << 96); + try testArgs(u64, u97, 0); + try testArgs(u64, u97, 1 << 0); + try testArgs(u64, u97, 1 << 96); + try testArgs(u128, u97, 0); + try testArgs(u128, u97, 1 << 0); + try testArgs(u128, u97, 1 << 96); + try testArgs(u256, u97, 0); + try testArgs(u256, u97, 1 << 0); + try testArgs(u256, u97, 1 << 96); + try testArgs(u512, u97, 0); + try testArgs(u512, u97, 1 << 0); + try testArgs(u512, u97, 1 << 96); + try testArgs(u1024, u97, 0); + try testArgs(u1024, u97, 1 << 0); + try testArgs(u1024, u97, 1 << 96); + + try testArgs(i8, i127, -1 << 126); + try testArgs(i8, i127, -1); + try testArgs(i8, i127, 0); + try testArgs(i16, i127, -1 << 126); + try testArgs(i16, i127, -1); + try testArgs(i16, i127, 0); + try testArgs(i32, i127, -1 << 126); + try testArgs(i32, i127, -1); + try testArgs(i32, i127, 0); + try testArgs(i64, i127, -1 << 126); + try testArgs(i64, i127, -1); + try testArgs(i64, i127, 0); + try testArgs(i128, i127, -1 << 126); + try testArgs(i128, i127, -1); + try testArgs(i128, i127, 0); + try testArgs(i256, i127, -1 << 126); + try testArgs(i256, i127, -1); + try testArgs(i256, i127, 0); + try testArgs(i512, i127, -1 << 126); + try testArgs(i512, i127, -1); + try testArgs(i512, i127, 0); + try testArgs(i1024, i127, -1 << 126); + try testArgs(i1024, i127, -1); + try testArgs(i1024, i127, 0); + try testArgs(u8, u127, 0); + try testArgs(u8, u127, 1 << 0); + try testArgs(u8, u127, 1 << 126); + try testArgs(u16, u127, 0); + try testArgs(u16, u127, 1 << 0); + try testArgs(u16, u127, 1 << 126); + try testArgs(u32, u127, 0); + try testArgs(u32, u127, 1 << 0); + try testArgs(u32, u127, 1 << 126); + try testArgs(u64, u127, 0); + try testArgs(u64, u127, 1 << 0); + try testArgs(u64, u127, 1 << 126); + try testArgs(u128, u127, 0); + try testArgs(u128, u127, 1 << 0); + try testArgs(u128, u127, 1 << 126); + try testArgs(u256, u127, 0); + try testArgs(u256, u127, 1 << 0); + try testArgs(u256, u127, 1 << 126); + try testArgs(u512, u127, 0); + try testArgs(u512, u127, 1 << 0); + try testArgs(u512, u127, 1 << 126); + try testArgs(u1024, u127, 0); + try testArgs(u1024, u127, 1 << 0); + try testArgs(u1024, u127, 1 << 126); + + try testArgs(i8, i128, -1 << 127); + try testArgs(i8, i128, -1); + try testArgs(i8, i128, 0); + try testArgs(i16, i128, -1 << 127); + try testArgs(i16, i128, -1); + try testArgs(i16, i128, 0); + try testArgs(i32, i128, -1 << 127); + try testArgs(i32, i128, -1); + try testArgs(i32, i128, 0); + try testArgs(i64, i128, -1 << 127); + try testArgs(i64, i128, -1); + try testArgs(i64, i128, 0); + try testArgs(i128, i128, -1 << 127); + try testArgs(i128, i128, -1); + try testArgs(i128, i128, 0); + try testArgs(i256, i128, -1 << 127); + try testArgs(i256, i128, -1); + try testArgs(i256, i128, 0); + try testArgs(i512, i128, -1 << 127); + try testArgs(i512, i128, -1); + try testArgs(i512, i128, 0); + try testArgs(i1024, i128, -1 << 127); + try testArgs(i1024, i128, -1); + try testArgs(i1024, i128, 0); + try testArgs(u8, u128, 0); + try testArgs(u8, u128, 1 << 0); + try testArgs(u8, u128, 1 << 127); + try testArgs(u16, u128, 0); + try testArgs(u16, u128, 1 << 0); + try testArgs(u16, u128, 1 << 127); + try testArgs(u32, u128, 0); + try testArgs(u32, u128, 1 << 0); + try testArgs(u32, u128, 1 << 127); + try testArgs(u64, u128, 0); + try testArgs(u64, u128, 1 << 0); + try testArgs(u64, u128, 1 << 127); + try testArgs(u128, u128, 0); + try testArgs(u128, u128, 1 << 0); + try testArgs(u128, u128, 1 << 127); + try testArgs(u256, u128, 0); + try testArgs(u256, u128, 1 << 0); + try testArgs(u256, u128, 1 << 127); + try testArgs(u512, u128, 0); + try testArgs(u512, u128, 1 << 0); + try testArgs(u512, u128, 1 << 127); + try testArgs(u1024, u128, 0); + try testArgs(u1024, u128, 1 << 0); + try testArgs(u1024, u128, 1 << 127); + + try testArgs(i8, i129, -1 << 128); + try testArgs(i8, i129, -1); + try testArgs(i8, i129, 0); + try testArgs(i16, i129, -1 << 128); + try testArgs(i16, i129, -1); + try testArgs(i16, i129, 0); + try testArgs(i32, i129, -1 << 128); + try testArgs(i32, i129, -1); + try testArgs(i32, i129, 0); + try testArgs(i64, i129, -1 << 128); + try testArgs(i64, i129, -1); + try testArgs(i64, i129, 0); + try testArgs(i128, i129, -1 << 128); + try testArgs(i128, i129, -1); + try testArgs(i128, i129, 0); + try testArgs(i256, i129, -1 << 128); + try testArgs(i256, i129, -1); + try testArgs(i256, i129, 0); + try testArgs(i512, i129, -1 << 128); + try testArgs(i512, i129, -1); + try testArgs(i512, i129, 0); + try testArgs(i1024, i129, -1 << 128); + try testArgs(i1024, i129, -1); + try testArgs(i1024, i129, 0); + try testArgs(u8, u129, 0); + try testArgs(u8, u129, 1 << 0); + try testArgs(u8, u129, 1 << 128); + try testArgs(u16, u129, 0); + try testArgs(u16, u129, 1 << 0); + try testArgs(u16, u129, 1 << 128); + try testArgs(u32, u129, 0); + try testArgs(u32, u129, 1 << 0); + try testArgs(u32, u129, 1 << 128); + try testArgs(u64, u129, 0); + try testArgs(u64, u129, 1 << 0); + try testArgs(u64, u129, 1 << 128); + try testArgs(u128, u129, 0); + try testArgs(u128, u129, 1 << 0); + try testArgs(u128, u129, 1 << 128); + try testArgs(u256, u129, 0); + try testArgs(u256, u129, 1 << 0); + try testArgs(u256, u129, 1 << 128); + try testArgs(u512, u129, 0); + try testArgs(u512, u129, 1 << 0); + try testArgs(u512, u129, 1 << 128); + try testArgs(u1024, u129, 0); + try testArgs(u1024, u129, 1 << 0); + try testArgs(u1024, u129, 1 << 128); + + try testArgs(i8, i255, -1 << 254); + try testArgs(i8, i255, -1); + try testArgs(i8, i255, 0); + try testArgs(i16, i255, -1 << 254); + try testArgs(i16, i255, -1); + try testArgs(i16, i255, 0); + try testArgs(i32, i255, -1 << 254); + try testArgs(i32, i255, -1); + try testArgs(i32, i255, 0); + try testArgs(i64, i255, -1 << 254); + try testArgs(i64, i255, -1); + try testArgs(i64, i255, 0); + try testArgs(i128, i255, -1 << 254); + try testArgs(i128, i255, -1); + try testArgs(i128, i255, 0); + try testArgs(i256, i255, -1 << 254); + try testArgs(i256, i255, -1); + try testArgs(i256, i255, 0); + try testArgs(i512, i255, -1 << 254); + try testArgs(i512, i255, -1); + try testArgs(i512, i255, 0); + try testArgs(i1024, i255, -1 << 254); + try testArgs(i1024, i255, -1); + try testArgs(i1024, i255, 0); + try testArgs(u8, u255, 0); + try testArgs(u8, u255, 1 << 0); + try testArgs(u8, u255, 1 << 254); + try testArgs(u16, u255, 0); + try testArgs(u16, u255, 1 << 0); + try testArgs(u16, u255, 1 << 254); + try testArgs(u32, u255, 0); + try testArgs(u32, u255, 1 << 0); + try testArgs(u32, u255, 1 << 254); + try testArgs(u64, u255, 0); + try testArgs(u64, u255, 1 << 0); + try testArgs(u64, u255, 1 << 254); + try testArgs(u128, u255, 0); + try testArgs(u128, u255, 1 << 0); + try testArgs(u128, u255, 1 << 254); + try testArgs(u256, u255, 0); + try testArgs(u256, u255, 1 << 0); + try testArgs(u256, u255, 1 << 254); + try testArgs(u512, u255, 0); + try testArgs(u512, u255, 1 << 0); + try testArgs(u512, u255, 1 << 254); + try testArgs(u1024, u255, 0); + try testArgs(u1024, u255, 1 << 0); + try testArgs(u1024, u255, 1 << 254); + + try testArgs(i8, i256, -1 << 255); + try testArgs(i8, i256, -1); + try testArgs(i8, i256, 0); + try testArgs(i16, i256, -1 << 255); + try testArgs(i16, i256, -1); + try testArgs(i16, i256, 0); + try testArgs(i32, i256, -1 << 255); + try testArgs(i32, i256, -1); + try testArgs(i32, i256, 0); + try testArgs(i64, i256, -1 << 255); + try testArgs(i64, i256, -1); + try testArgs(i64, i256, 0); + try testArgs(i128, i256, -1 << 255); + try testArgs(i128, i256, -1); + try testArgs(i128, i256, 0); + try testArgs(i256, i256, -1 << 255); + try testArgs(i256, i256, -1); + try testArgs(i256, i256, 0); + try testArgs(i512, i256, -1 << 255); + try testArgs(i512, i256, -1); + try testArgs(i512, i256, 0); + try testArgs(i1024, i256, -1 << 255); + try testArgs(i1024, i256, -1); + try testArgs(i1024, i256, 0); + try testArgs(u8, u256, 0); + try testArgs(u8, u256, 1 << 0); + try testArgs(u8, u256, 1 << 255); + try testArgs(u16, u256, 0); + try testArgs(u16, u256, 1 << 0); + try testArgs(u16, u256, 1 << 255); + try testArgs(u32, u256, 0); + try testArgs(u32, u256, 1 << 0); + try testArgs(u32, u256, 1 << 255); + try testArgs(u64, u256, 0); + try testArgs(u64, u256, 1 << 0); + try testArgs(u64, u256, 1 << 255); + try testArgs(u128, u256, 0); + try testArgs(u128, u256, 1 << 0); + try testArgs(u128, u256, 1 << 255); + try testArgs(u256, u256, 0); + try testArgs(u256, u256, 1 << 0); + try testArgs(u256, u256, 1 << 255); + try testArgs(u512, u256, 0); + try testArgs(u512, u256, 1 << 0); + try testArgs(u512, u256, 1 << 255); + try testArgs(u1024, u256, 0); + try testArgs(u1024, u256, 1 << 0); + try testArgs(u1024, u256, 1 << 255); + + try testArgs(i8, i257, -1 << 256); + try testArgs(i8, i257, -1); + try testArgs(i8, i257, 0); + try testArgs(i16, i257, -1 << 256); + try testArgs(i16, i257, -1); + try testArgs(i16, i257, 0); + try testArgs(i32, i257, -1 << 256); + try testArgs(i32, i257, -1); + try testArgs(i32, i257, 0); + try testArgs(i64, i257, -1 << 256); + try testArgs(i64, i257, -1); + try testArgs(i64, i257, 0); + try testArgs(i128, i257, -1 << 256); + try testArgs(i128, i257, -1); + try testArgs(i128, i257, 0); + try testArgs(i256, i257, -1 << 256); + try testArgs(i256, i257, -1); + try testArgs(i256, i257, 0); + try testArgs(i512, i257, -1 << 256); + try testArgs(i512, i257, -1); + try testArgs(i512, i257, 0); + try testArgs(i1024, i257, -1 << 256); + try testArgs(i1024, i257, -1); + try testArgs(i1024, i257, 0); + try testArgs(u8, u257, 0); + try testArgs(u8, u257, 1 << 0); + try testArgs(u8, u257, 1 << 256); + try testArgs(u16, u257, 0); + try testArgs(u16, u257, 1 << 0); + try testArgs(u16, u257, 1 << 256); + try testArgs(u32, u257, 0); + try testArgs(u32, u257, 1 << 0); + try testArgs(u32, u257, 1 << 256); + try testArgs(u64, u257, 0); + try testArgs(u64, u257, 1 << 0); + try testArgs(u64, u257, 1 << 256); + try testArgs(u128, u257, 0); + try testArgs(u128, u257, 1 << 0); + try testArgs(u128, u257, 1 << 256); + try testArgs(u256, u257, 0); + try testArgs(u256, u257, 1 << 0); + try testArgs(u256, u257, 1 << 256); + try testArgs(u512, u257, 0); + try testArgs(u512, u257, 1 << 0); + try testArgs(u512, u257, 1 << 256); + try testArgs(u1024, u257, 0); + try testArgs(u1024, u257, 1 << 0); + try testArgs(u1024, u257, 1 << 256); + + try testArgs(i8, i511, -1 << 510); + try testArgs(i8, i511, -1); + try testArgs(i8, i511, 0); + try testArgs(i16, i511, -1 << 510); + try testArgs(i16, i511, -1); + try testArgs(i16, i511, 0); + try testArgs(i32, i511, -1 << 510); + try testArgs(i32, i511, -1); + try testArgs(i32, i511, 0); + try testArgs(i64, i511, -1 << 510); + try testArgs(i64, i511, -1); + try testArgs(i64, i511, 0); + try testArgs(i128, i511, -1 << 510); + try testArgs(i128, i511, -1); + try testArgs(i128, i511, 0); + try testArgs(i256, i511, -1 << 510); + try testArgs(i256, i511, -1); + try testArgs(i256, i511, 0); + try testArgs(i512, i511, -1 << 510); + try testArgs(i512, i511, -1); + try testArgs(i512, i511, 0); + try testArgs(i1024, i511, -1 << 510); + try testArgs(i1024, i511, -1); + try testArgs(i1024, i511, 0); + try testArgs(u8, u511, 0); + try testArgs(u8, u511, 1 << 0); + try testArgs(u8, u511, 1 << 510); + try testArgs(u16, u511, 0); + try testArgs(u16, u511, 1 << 0); + try testArgs(u16, u511, 1 << 510); + try testArgs(u32, u511, 0); + try testArgs(u32, u511, 1 << 0); + try testArgs(u32, u511, 1 << 510); + try testArgs(u64, u511, 0); + try testArgs(u64, u511, 1 << 0); + try testArgs(u64, u511, 1 << 510); + try testArgs(u128, u511, 0); + try testArgs(u128, u511, 1 << 0); + try testArgs(u128, u511, 1 << 510); + try testArgs(u256, u511, 0); + try testArgs(u256, u511, 1 << 0); + try testArgs(u256, u511, 1 << 510); + try testArgs(u512, u511, 0); + try testArgs(u512, u511, 1 << 0); + try testArgs(u512, u511, 1 << 510); + try testArgs(u1024, u511, 0); + try testArgs(u1024, u511, 1 << 0); + try testArgs(u1024, u511, 1 << 510); + + try testArgs(i8, i512, -1 << 511); + try testArgs(i8, i512, -1); + try testArgs(i8, i512, 0); + try testArgs(i16, i512, -1 << 511); + try testArgs(i16, i512, -1); + try testArgs(i16, i512, 0); + try testArgs(i32, i512, -1 << 511); + try testArgs(i32, i512, -1); + try testArgs(i32, i512, 0); + try testArgs(i64, i512, -1 << 511); + try testArgs(i64, i512, -1); + try testArgs(i64, i512, 0); + try testArgs(i128, i512, -1 << 511); + try testArgs(i128, i512, -1); + try testArgs(i128, i512, 0); + try testArgs(i256, i512, -1 << 511); + try testArgs(i256, i512, -1); + try testArgs(i256, i512, 0); + try testArgs(i512, i512, -1 << 511); + try testArgs(i512, i512, -1); + try testArgs(i512, i512, 0); + try testArgs(i1024, i512, -1 << 511); + try testArgs(i1024, i512, -1); + try testArgs(i1024, i512, 0); + try testArgs(u8, u512, 0); + try testArgs(u8, u512, 1 << 0); + try testArgs(u8, u512, 1 << 511); + try testArgs(u16, u512, 0); + try testArgs(u16, u512, 1 << 0); + try testArgs(u16, u512, 1 << 511); + try testArgs(u32, u512, 0); + try testArgs(u32, u512, 1 << 0); + try testArgs(u32, u512, 1 << 511); + try testArgs(u64, u512, 0); + try testArgs(u64, u512, 1 << 0); + try testArgs(u64, u512, 1 << 511); + try testArgs(u128, u512, 0); + try testArgs(u128, u512, 1 << 0); + try testArgs(u128, u512, 1 << 511); + try testArgs(u256, u512, 0); + try testArgs(u256, u512, 1 << 0); + try testArgs(u256, u512, 1 << 511); + try testArgs(u512, u512, 0); + try testArgs(u512, u512, 1 << 0); + try testArgs(u512, u512, 1 << 511); + try testArgs(u1024, u512, 0); + try testArgs(u1024, u512, 1 << 0); + try testArgs(u1024, u512, 1 << 511); + + try testArgs(i8, i513, -1 << 512); + try testArgs(i8, i513, -1); + try testArgs(i8, i513, 0); + try testArgs(i16, i513, -1 << 512); + try testArgs(i16, i513, -1); + try testArgs(i16, i513, 0); + try testArgs(i32, i513, -1 << 512); + try testArgs(i32, i513, -1); + try testArgs(i32, i513, 0); + try testArgs(i64, i513, -1 << 512); + try testArgs(i64, i513, -1); + try testArgs(i64, i513, 0); + try testArgs(i128, i513, -1 << 512); + try testArgs(i128, i513, -1); + try testArgs(i128, i513, 0); + try testArgs(i256, i513, -1 << 512); + try testArgs(i256, i513, -1); + try testArgs(i256, i513, 0); + try testArgs(i512, i513, -1 << 512); + try testArgs(i512, i513, -1); + try testArgs(i512, i513, 0); + try testArgs(i1024, i513, -1 << 512); + try testArgs(i1024, i513, -1); + try testArgs(i1024, i513, 0); + try testArgs(u8, u513, 0); + try testArgs(u8, u513, 1 << 0); + try testArgs(u8, u513, 1 << 512); + try testArgs(u16, u513, 0); + try testArgs(u16, u513, 1 << 0); + try testArgs(u16, u513, 1 << 512); + try testArgs(u32, u513, 0); + try testArgs(u32, u513, 1 << 0); + try testArgs(u32, u513, 1 << 512); + try testArgs(u64, u513, 0); + try testArgs(u64, u513, 1 << 0); + try testArgs(u64, u513, 1 << 512); + try testArgs(u128, u513, 0); + try testArgs(u128, u513, 1 << 0); + try testArgs(u128, u513, 1 << 512); + try testArgs(u256, u513, 0); + try testArgs(u256, u513, 1 << 0); + try testArgs(u256, u513, 1 << 512); + try testArgs(u512, u513, 0); + try testArgs(u512, u513, 1 << 0); + try testArgs(u512, u513, 1 << 512); + try testArgs(u1024, u513, 0); + try testArgs(u1024, u513, 1 << 0); + try testArgs(u1024, u513, 1 << 512); + + try testArgs(i8, i1023, -1 << 1022); + try testArgs(i8, i1023, -1); + try testArgs(i8, i1023, 0); + try testArgs(i16, i1023, -1 << 1022); + try testArgs(i16, i1023, -1); + try testArgs(i16, i1023, 0); + try testArgs(i32, i1023, -1 << 1022); + try testArgs(i32, i1023, -1); + try testArgs(i32, i1023, 0); + try testArgs(i64, i1023, -1 << 1022); + try testArgs(i64, i1023, -1); + try testArgs(i64, i1023, 0); + try testArgs(i128, i1023, -1 << 1022); + try testArgs(i128, i1023, -1); + try testArgs(i128, i1023, 0); + try testArgs(i256, i1023, -1 << 1022); + try testArgs(i256, i1023, -1); + try testArgs(i256, i1023, 0); + try testArgs(i512, i1023, -1 << 1022); + try testArgs(i512, i1023, -1); + try testArgs(i512, i1023, 0); + try testArgs(i1024, i1023, -1 << 1022); + try testArgs(i1024, i1023, -1); + try testArgs(i1024, i1023, 0); + try testArgs(u8, u1023, 0); + try testArgs(u8, u1023, 1 << 0); + try testArgs(u8, u1023, 1 << 1022); + try testArgs(u16, u1023, 0); + try testArgs(u16, u1023, 1 << 0); + try testArgs(u16, u1023, 1 << 1022); + try testArgs(u32, u1023, 0); + try testArgs(u32, u1023, 1 << 0); + try testArgs(u32, u1023, 1 << 1022); + try testArgs(u64, u1023, 0); + try testArgs(u64, u1023, 1 << 0); + try testArgs(u64, u1023, 1 << 1022); + try testArgs(u128, u1023, 0); + try testArgs(u128, u1023, 1 << 0); + try testArgs(u128, u1023, 1 << 1022); + try testArgs(u256, u1023, 0); + try testArgs(u256, u1023, 1 << 0); + try testArgs(u256, u1023, 1 << 1022); + try testArgs(u512, u1023, 0); + try testArgs(u512, u1023, 1 << 0); + try testArgs(u512, u1023, 1 << 1022); + try testArgs(u1024, u1023, 0); + try testArgs(u1024, u1023, 1 << 0); + try testArgs(u1024, u1023, 1 << 1022); + + try testArgs(i8, i1024, -1 << 1023); + try testArgs(i8, i1024, -1); + try testArgs(i8, i1024, 0); + try testArgs(i16, i1024, -1 << 1023); + try testArgs(i16, i1024, -1); + try testArgs(i16, i1024, 0); + try testArgs(i32, i1024, -1 << 1023); + try testArgs(i32, i1024, -1); + try testArgs(i32, i1024, 0); + try testArgs(i64, i1024, -1 << 1023); + try testArgs(i64, i1024, -1); + try testArgs(i64, i1024, 0); + try testArgs(i128, i1024, -1 << 1023); + try testArgs(i128, i1024, -1); + try testArgs(i128, i1024, 0); + try testArgs(i256, i1024, -1 << 1023); + try testArgs(i256, i1024, -1); + try testArgs(i256, i1024, 0); + try testArgs(i512, i1024, -1 << 1023); + try testArgs(i512, i1024, -1); + try testArgs(i512, i1024, 0); + try testArgs(i1024, i1024, -1 << 1023); + try testArgs(i1024, i1024, -1); + try testArgs(i1024, i1024, 0); + try testArgs(u8, u1024, 0); + try testArgs(u8, u1024, 1 << 0); + try testArgs(u8, u1024, 1 << 1023); + try testArgs(u16, u1024, 0); + try testArgs(u16, u1024, 1 << 0); + try testArgs(u16, u1024, 1 << 1023); + try testArgs(u32, u1024, 0); + try testArgs(u32, u1024, 1 << 0); + try testArgs(u32, u1024, 1 << 1023); + try testArgs(u64, u1024, 0); + try testArgs(u64, u1024, 1 << 0); + try testArgs(u64, u1024, 1 << 1023); + try testArgs(u128, u1024, 0); + try testArgs(u128, u1024, 1 << 0); + try testArgs(u128, u1024, 1 << 1023); + try testArgs(u256, u1024, 0); + try testArgs(u256, u1024, 1 << 0); + try testArgs(u256, u1024, 1 << 1023); + try testArgs(u512, u1024, 0); + try testArgs(u512, u1024, 1 << 0); + try testArgs(u512, u1024, 1 << 1023); + try testArgs(u1024, u1024, 0); + try testArgs(u1024, u1024, 1 << 0); + try testArgs(u1024, u1024, 1 << 1023); + + try testArgs(i8, i1025, -1 << 1024); + try testArgs(i8, i1025, -1); + try testArgs(i8, i1025, 0); + try testArgs(i16, i1025, -1 << 1024); + try testArgs(i16, i1025, -1); + try testArgs(i16, i1025, 0); + try testArgs(i32, i1025, -1 << 1024); + try testArgs(i32, i1025, -1); + try testArgs(i32, i1025, 0); + try testArgs(i64, i1025, -1 << 1024); + try testArgs(i64, i1025, -1); + try testArgs(i64, i1025, 0); + try testArgs(i128, i1025, -1 << 1024); + try testArgs(i128, i1025, -1); + try testArgs(i128, i1025, 0); + try testArgs(i256, i1025, -1 << 1024); + try testArgs(i256, i1025, -1); + try testArgs(i256, i1025, 0); + try testArgs(i512, i1025, -1 << 1024); + try testArgs(i512, i1025, -1); + try testArgs(i512, i1025, 0); + try testArgs(i1024, i1025, -1 << 1024); + try testArgs(i1024, i1025, -1); + try testArgs(i1024, i1025, 0); + try testArgs(u8, u1025, 0); + try testArgs(u8, u1025, 1 << 0); + try testArgs(u8, u1025, 1 << 1024); + try testArgs(u16, u1025, 0); + try testArgs(u16, u1025, 1 << 0); + try testArgs(u16, u1025, 1 << 1024); + try testArgs(u32, u1025, 0); + try testArgs(u32, u1025, 1 << 0); + try testArgs(u32, u1025, 1 << 1024); + try testArgs(u64, u1025, 0); + try testArgs(u64, u1025, 1 << 0); + try testArgs(u64, u1025, 1 << 1024); + try testArgs(u128, u1025, 0); + try testArgs(u128, u1025, 1 << 0); + try testArgs(u128, u1025, 1 << 1024); + try testArgs(u256, u1025, 0); + try testArgs(u256, u1025, 1 << 0); + try testArgs(u256, u1025, 1 << 1024); + try testArgs(u512, u1025, 0); + try testArgs(u512, u1025, 1 << 0); + try testArgs(u512, u1025, 1 << 1024); + try testArgs(u1024, u1025, 0); + try testArgs(u1024, u1025, 1 << 0); + try testArgs(u1024, u1025, 1 << 1024); + } + fn testInts() !void { + try testSameSignednessInts(); + + try testArgs(u8, i1, -1); + try testArgs(u8, i1, 0); + try testArgs(u16, i1, -1); + try testArgs(u16, i1, 0); + try testArgs(u32, i1, -1); + try testArgs(u32, i1, 0); + try testArgs(u64, i1, -1); + try testArgs(u64, i1, 0); + try testArgs(u128, i1, -1); + try testArgs(u128, i1, 0); + try testArgs(u256, i1, -1); + try testArgs(u256, i1, 0); + try testArgs(u512, i1, -1); + try testArgs(u512, i1, 0); + try testArgs(u1024, i1, -1); + try testArgs(u1024, i1, 0); + try testArgs(i8, u1, 0); + try testArgs(i8, u1, 1 << 0); + try testArgs(i16, u1, 0); + try testArgs(i16, u1, 1 << 0); + try testArgs(i32, u1, 0); + try testArgs(i32, u1, 1 << 0); + try testArgs(i64, u1, 0); + try testArgs(i64, u1, 1 << 0); + try testArgs(i128, u1, 0); + try testArgs(i128, u1, 1 << 0); + try testArgs(i256, u1, 0); + try testArgs(i256, u1, 1 << 0); + try testArgs(i512, u1, 0); + try testArgs(i512, u1, 1 << 0); + try testArgs(i1024, u1, 0); + try testArgs(i1024, u1, 1 << 0); + + try testArgs(u8, i2, -1 << 1); + try testArgs(u8, i2, -1); + try testArgs(u8, i2, 0); + try testArgs(u16, i2, -1 << 1); + try testArgs(u16, i2, -1); + try testArgs(u16, i2, 0); + try testArgs(u32, i2, -1 << 1); + try testArgs(u32, i2, -1); + try testArgs(u32, i2, 0); + try testArgs(u64, i2, -1 << 1); + try testArgs(u64, i2, -1); + try testArgs(u64, i2, 0); + try testArgs(u128, i2, -1 << 1); + try testArgs(u128, i2, -1); + try testArgs(u128, i2, 0); + try testArgs(u256, i2, -1 << 1); + try testArgs(u256, i2, -1); + try testArgs(u256, i2, 0); + try testArgs(u512, i2, -1 << 1); + try testArgs(u512, i2, -1); + try testArgs(u512, i2, 0); + try testArgs(u1024, i2, -1 << 1); + try testArgs(u1024, i2, -1); + try testArgs(u1024, i2, 0); + try testArgs(i8, u2, 0); + try testArgs(i8, u2, 1 << 0); + try testArgs(i8, u2, 1 << 1); + try testArgs(i16, u2, 0); + try testArgs(i16, u2, 1 << 0); + try testArgs(i16, u2, 1 << 1); + try testArgs(i32, u2, 0); + try testArgs(i32, u2, 1 << 0); + try testArgs(i32, u2, 1 << 1); + try testArgs(i64, u2, 0); + try testArgs(i64, u2, 1 << 0); + try testArgs(i64, u2, 1 << 1); + try testArgs(i128, u2, 0); + try testArgs(i128, u2, 1 << 0); + try testArgs(i128, u2, 1 << 1); + try testArgs(i256, u2, 0); + try testArgs(i256, u2, 1 << 0); + try testArgs(i256, u2, 1 << 1); + try testArgs(i512, u2, 0); + try testArgs(i512, u2, 1 << 0); + try testArgs(i512, u2, 1 << 1); + try testArgs(i1024, u2, 0); + try testArgs(i1024, u2, 1 << 0); + try testArgs(i1024, u2, 1 << 1); + + try testArgs(u8, i3, -1 << 2); + try testArgs(u8, i3, -1); + try testArgs(u8, i3, 0); + try testArgs(u16, i3, -1 << 2); + try testArgs(u16, i3, -1); + try testArgs(u16, i3, 0); + try testArgs(u32, i3, -1 << 2); + try testArgs(u32, i3, -1); + try testArgs(u32, i3, 0); + try testArgs(u64, i3, -1 << 2); + try testArgs(u64, i3, -1); + try testArgs(u64, i3, 0); + try testArgs(u128, i3, -1 << 2); + try testArgs(u128, i3, -1); + try testArgs(u128, i3, 0); + try testArgs(u256, i3, -1 << 2); + try testArgs(u256, i3, -1); + try testArgs(u256, i3, 0); + try testArgs(u512, i3, -1 << 2); + try testArgs(u512, i3, -1); + try testArgs(u512, i3, 0); + try testArgs(u1024, i3, -1 << 2); + try testArgs(u1024, i3, -1); + try testArgs(u1024, i3, 0); + try testArgs(i8, u3, 0); + try testArgs(i8, u3, 1 << 0); + try testArgs(i8, u3, 1 << 2); + try testArgs(i16, u3, 0); + try testArgs(i16, u3, 1 << 0); + try testArgs(i16, u3, 1 << 2); + try testArgs(i32, u3, 0); + try testArgs(i32, u3, 1 << 0); + try testArgs(i32, u3, 1 << 2); + try testArgs(i64, u3, 0); + try testArgs(i64, u3, 1 << 0); + try testArgs(i64, u3, 1 << 2); + try testArgs(i128, u3, 0); + try testArgs(i128, u3, 1 << 0); + try testArgs(i128, u3, 1 << 2); + try testArgs(i256, u3, 0); + try testArgs(i256, u3, 1 << 0); + try testArgs(i256, u3, 1 << 2); + try testArgs(i512, u3, 0); + try testArgs(i512, u3, 1 << 0); + try testArgs(i512, u3, 1 << 2); + try testArgs(i1024, u3, 0); + try testArgs(i1024, u3, 1 << 0); + try testArgs(i1024, u3, 1 << 2); + + try testArgs(u8, i4, -1 << 3); + try testArgs(u8, i4, -1); + try testArgs(u8, i4, 0); + try testArgs(u16, i4, -1 << 3); + try testArgs(u16, i4, -1); + try testArgs(u16, i4, 0); + try testArgs(u32, i4, -1 << 3); + try testArgs(u32, i4, -1); + try testArgs(u32, i4, 0); + try testArgs(u64, i4, -1 << 3); + try testArgs(u64, i4, -1); + try testArgs(u64, i4, 0); + try testArgs(u128, i4, -1 << 3); + try testArgs(u128, i4, -1); + try testArgs(u128, i4, 0); + try testArgs(u256, i4, -1 << 3); + try testArgs(u256, i4, -1); + try testArgs(u256, i4, 0); + try testArgs(u512, i4, -1 << 3); + try testArgs(u512, i4, -1); + try testArgs(u512, i4, 0); + try testArgs(u1024, i4, -1 << 3); + try testArgs(u1024, i4, -1); + try testArgs(u1024, i4, 0); + try testArgs(i8, u4, 0); + try testArgs(i8, u4, 1 << 0); + try testArgs(i8, u4, 1 << 3); + try testArgs(i16, u4, 0); + try testArgs(i16, u4, 1 << 0); + try testArgs(i16, u4, 1 << 3); + try testArgs(i32, u4, 0); + try testArgs(i32, u4, 1 << 0); + try testArgs(i32, u4, 1 << 3); + try testArgs(i64, u4, 0); + try testArgs(i64, u4, 1 << 0); + try testArgs(i64, u4, 1 << 3); + try testArgs(i128, u4, 0); + try testArgs(i128, u4, 1 << 0); + try testArgs(i128, u4, 1 << 3); + try testArgs(i256, u4, 0); + try testArgs(i256, u4, 1 << 0); + try testArgs(i256, u4, 1 << 3); + try testArgs(i512, u4, 0); + try testArgs(i512, u4, 1 << 0); + try testArgs(i512, u4, 1 << 3); + try testArgs(i1024, u4, 0); + try testArgs(i1024, u4, 1 << 0); + try testArgs(i1024, u4, 1 << 3); + + try testArgs(u8, i5, -1 << 4); + try testArgs(u8, i5, -1); + try testArgs(u8, i5, 0); + try testArgs(u16, i5, -1 << 4); + try testArgs(u16, i5, -1); + try testArgs(u16, i5, 0); + try testArgs(u32, i5, -1 << 4); + try testArgs(u32, i5, -1); + try testArgs(u32, i5, 0); + try testArgs(u64, i5, -1 << 4); + try testArgs(u64, i5, -1); + try testArgs(u64, i5, 0); + try testArgs(u128, i5, -1 << 4); + try testArgs(u128, i5, -1); + try testArgs(u128, i5, 0); + try testArgs(u256, i5, -1 << 4); + try testArgs(u256, i5, -1); + try testArgs(u256, i5, 0); + try testArgs(u512, i5, -1 << 4); + try testArgs(u512, i5, -1); + try testArgs(u512, i5, 0); + try testArgs(u1024, i5, -1 << 4); + try testArgs(u1024, i5, -1); + try testArgs(u1024, i5, 0); + try testArgs(i8, u5, 0); + try testArgs(i8, u5, 1 << 0); + try testArgs(i8, u5, 1 << 4); + try testArgs(i16, u5, 0); + try testArgs(i16, u5, 1 << 0); + try testArgs(i16, u5, 1 << 4); + try testArgs(i32, u5, 0); + try testArgs(i32, u5, 1 << 0); + try testArgs(i32, u5, 1 << 4); + try testArgs(i64, u5, 0); + try testArgs(i64, u5, 1 << 0); + try testArgs(i64, u5, 1 << 4); + try testArgs(i128, u5, 0); + try testArgs(i128, u5, 1 << 0); + try testArgs(i128, u5, 1 << 4); + try testArgs(i256, u5, 0); + try testArgs(i256, u5, 1 << 0); + try testArgs(i256, u5, 1 << 4); + try testArgs(i512, u5, 0); + try testArgs(i512, u5, 1 << 0); + try testArgs(i512, u5, 1 << 4); + try testArgs(i1024, u5, 0); + try testArgs(i1024, u5, 1 << 0); + try testArgs(i1024, u5, 1 << 4); + + try testArgs(u8, i7, -1 << 6); + try testArgs(u8, i7, -1); + try testArgs(u8, i7, 0); + try testArgs(u16, i7, -1 << 6); + try testArgs(u16, i7, -1); + try testArgs(u16, i7, 0); + try testArgs(u32, i7, -1 << 6); + try testArgs(u32, i7, -1); + try testArgs(u32, i7, 0); + try testArgs(u64, i7, -1 << 6); + try testArgs(u64, i7, -1); + try testArgs(u64, i7, 0); + try testArgs(u128, i7, -1 << 6); + try testArgs(u128, i7, -1); + try testArgs(u128, i7, 0); + try testArgs(u256, i7, -1 << 6); + try testArgs(u256, i7, -1); + try testArgs(u256, i7, 0); + try testArgs(u512, i7, -1 << 6); + try testArgs(u512, i7, -1); + try testArgs(u512, i7, 0); + try testArgs(u1024, i7, -1 << 6); + try testArgs(u1024, i7, -1); + try testArgs(u1024, i7, 0); + try testArgs(i8, u7, 0); + try testArgs(i8, u7, 1 << 0); + try testArgs(i8, u7, 1 << 6); + try testArgs(i16, u7, 0); + try testArgs(i16, u7, 1 << 0); + try testArgs(i16, u7, 1 << 6); + try testArgs(i32, u7, 0); + try testArgs(i32, u7, 1 << 0); + try testArgs(i32, u7, 1 << 6); + try testArgs(i64, u7, 0); + try testArgs(i64, u7, 1 << 0); + try testArgs(i64, u7, 1 << 6); + try testArgs(i128, u7, 0); + try testArgs(i128, u7, 1 << 0); + try testArgs(i128, u7, 1 << 6); + try testArgs(i256, u7, 0); + try testArgs(i256, u7, 1 << 0); + try testArgs(i256, u7, 1 << 6); + try testArgs(i512, u7, 0); + try testArgs(i512, u7, 1 << 0); + try testArgs(i512, u7, 1 << 6); + try testArgs(i1024, u7, 0); + try testArgs(i1024, u7, 1 << 0); + try testArgs(i1024, u7, 1 << 6); + + try testArgs(u8, i8, -1 << 7); + try testArgs(u8, i8, -1); + try testArgs(u8, i8, 0); + try testArgs(u16, i8, -1 << 7); + try testArgs(u16, i8, -1); + try testArgs(u16, i8, 0); + try testArgs(u32, i8, -1 << 7); + try testArgs(u32, i8, -1); + try testArgs(u32, i8, 0); + try testArgs(u64, i8, -1 << 7); + try testArgs(u64, i8, -1); + try testArgs(u64, i8, 0); + try testArgs(u128, i8, -1 << 7); + try testArgs(u128, i8, -1); + try testArgs(u128, i8, 0); + try testArgs(u256, i8, -1 << 7); + try testArgs(u256, i8, -1); + try testArgs(u256, i8, 0); + try testArgs(u512, i8, -1 << 7); + try testArgs(u512, i8, -1); + try testArgs(u512, i8, 0); + try testArgs(u1024, i8, -1 << 7); + try testArgs(u1024, i8, -1); + try testArgs(u1024, i8, 0); + try testArgs(i8, u8, 0); + try testArgs(i8, u8, 1 << 0); + try testArgs(i8, u8, 1 << 7); + try testArgs(i16, u8, 0); + try testArgs(i16, u8, 1 << 0); + try testArgs(i16, u8, 1 << 7); + try testArgs(i32, u8, 0); + try testArgs(i32, u8, 1 << 0); + try testArgs(i32, u8, 1 << 7); + try testArgs(i64, u8, 0); + try testArgs(i64, u8, 1 << 0); + try testArgs(i64, u8, 1 << 7); + try testArgs(i128, u8, 0); + try testArgs(i128, u8, 1 << 0); + try testArgs(i128, u8, 1 << 7); + try testArgs(i256, u8, 0); + try testArgs(i256, u8, 1 << 0); + try testArgs(i256, u8, 1 << 7); + try testArgs(i512, u8, 0); + try testArgs(i512, u8, 1 << 0); + try testArgs(i512, u8, 1 << 7); + try testArgs(i1024, u8, 0); + try testArgs(i1024, u8, 1 << 0); + try testArgs(i1024, u8, 1 << 7); + + try testArgs(u8, i9, -1 << 8); + try testArgs(u8, i9, -1); + try testArgs(u8, i9, 0); + try testArgs(u16, i9, -1 << 8); + try testArgs(u16, i9, -1); + try testArgs(u16, i9, 0); + try testArgs(u32, i9, -1 << 8); + try testArgs(u32, i9, -1); + try testArgs(u32, i9, 0); + try testArgs(u64, i9, -1 << 8); + try testArgs(u64, i9, -1); + try testArgs(u64, i9, 0); + try testArgs(u128, i9, -1 << 8); + try testArgs(u128, i9, -1); + try testArgs(u128, i9, 0); + try testArgs(u256, i9, -1 << 8); + try testArgs(u256, i9, -1); + try testArgs(u256, i9, 0); + try testArgs(u512, i9, -1 << 8); + try testArgs(u512, i9, -1); + try testArgs(u512, i9, 0); + try testArgs(u1024, i9, -1 << 8); + try testArgs(u1024, i9, -1); + try testArgs(u1024, i9, 0); + try testArgs(i8, u9, 0); + try testArgs(i8, u9, 1 << 0); + try testArgs(i8, u9, 1 << 8); + try testArgs(i16, u9, 0); + try testArgs(i16, u9, 1 << 0); + try testArgs(i16, u9, 1 << 8); + try testArgs(i32, u9, 0); + try testArgs(i32, u9, 1 << 0); + try testArgs(i32, u9, 1 << 8); + try testArgs(i64, u9, 0); + try testArgs(i64, u9, 1 << 0); + try testArgs(i64, u9, 1 << 8); + try testArgs(i128, u9, 0); + try testArgs(i128, u9, 1 << 0); + try testArgs(i128, u9, 1 << 8); + try testArgs(i256, u9, 0); + try testArgs(i256, u9, 1 << 0); + try testArgs(i256, u9, 1 << 8); + try testArgs(i512, u9, 0); + try testArgs(i512, u9, 1 << 0); + try testArgs(i512, u9, 1 << 8); + try testArgs(i1024, u9, 0); + try testArgs(i1024, u9, 1 << 0); + try testArgs(i1024, u9, 1 << 8); + + try testArgs(u8, i15, -1 << 14); + try testArgs(u8, i15, -1); + try testArgs(u8, i15, 0); + try testArgs(u16, i15, -1 << 14); + try testArgs(u16, i15, -1); + try testArgs(u16, i15, 0); + try testArgs(u32, i15, -1 << 14); + try testArgs(u32, i15, -1); + try testArgs(u32, i15, 0); + try testArgs(u64, i15, -1 << 14); + try testArgs(u64, i15, -1); + try testArgs(u64, i15, 0); + try testArgs(u128, i15, -1 << 14); + try testArgs(u128, i15, -1); + try testArgs(u128, i15, 0); + try testArgs(u256, i15, -1 << 14); + try testArgs(u256, i15, -1); + try testArgs(u256, i15, 0); + try testArgs(u512, i15, -1 << 14); + try testArgs(u512, i15, -1); + try testArgs(u512, i15, 0); + try testArgs(u1024, i15, -1 << 14); + try testArgs(u1024, i15, -1); + try testArgs(u1024, i15, 0); + try testArgs(i8, u15, 0); + try testArgs(i8, u15, 1 << 0); + try testArgs(i8, u15, 1 << 14); + try testArgs(i16, u15, 0); + try testArgs(i16, u15, 1 << 0); + try testArgs(i16, u15, 1 << 14); + try testArgs(i32, u15, 0); + try testArgs(i32, u15, 1 << 0); + try testArgs(i32, u15, 1 << 14); + try testArgs(i64, u15, 0); + try testArgs(i64, u15, 1 << 0); + try testArgs(i64, u15, 1 << 14); + try testArgs(i128, u15, 0); + try testArgs(i128, u15, 1 << 0); + try testArgs(i128, u15, 1 << 14); + try testArgs(i256, u15, 0); + try testArgs(i256, u15, 1 << 0); + try testArgs(i256, u15, 1 << 14); + try testArgs(i512, u15, 0); + try testArgs(i512, u15, 1 << 0); + try testArgs(i512, u15, 1 << 14); + try testArgs(i1024, u15, 0); + try testArgs(i1024, u15, 1 << 0); + try testArgs(i1024, u15, 1 << 14); + + try testArgs(u8, i16, -1 << 15); + try testArgs(u8, i16, -1); + try testArgs(u8, i16, 0); + try testArgs(u16, i16, -1 << 15); + try testArgs(u16, i16, -1); + try testArgs(u16, i16, 0); + try testArgs(u32, i16, -1 << 15); + try testArgs(u32, i16, -1); + try testArgs(u32, i16, 0); + try testArgs(u64, i16, -1 << 15); + try testArgs(u64, i16, -1); + try testArgs(u64, i16, 0); + try testArgs(u128, i16, -1 << 15); + try testArgs(u128, i16, -1); + try testArgs(u128, i16, 0); + try testArgs(u256, i16, -1 << 15); + try testArgs(u256, i16, -1); + try testArgs(u256, i16, 0); + try testArgs(u512, i16, -1 << 15); + try testArgs(u512, i16, -1); + try testArgs(u512, i16, 0); + try testArgs(u1024, i16, -1 << 15); + try testArgs(u1024, i16, -1); + try testArgs(u1024, i16, 0); + try testArgs(i8, u16, 0); + try testArgs(i8, u16, 1 << 0); + try testArgs(i8, u16, 1 << 15); + try testArgs(i16, u16, 0); + try testArgs(i16, u16, 1 << 0); + try testArgs(i16, u16, 1 << 15); + try testArgs(i32, u16, 0); + try testArgs(i32, u16, 1 << 0); + try testArgs(i32, u16, 1 << 15); + try testArgs(i64, u16, 0); + try testArgs(i64, u16, 1 << 0); + try testArgs(i64, u16, 1 << 15); + try testArgs(i128, u16, 0); + try testArgs(i128, u16, 1 << 0); + try testArgs(i128, u16, 1 << 15); + try testArgs(i256, u16, 0); + try testArgs(i256, u16, 1 << 0); + try testArgs(i256, u16, 1 << 15); + try testArgs(i512, u16, 0); + try testArgs(i512, u16, 1 << 0); + try testArgs(i512, u16, 1 << 15); + try testArgs(i1024, u16, 0); + try testArgs(i1024, u16, 1 << 0); + try testArgs(i1024, u16, 1 << 15); + + try testArgs(u8, i17, -1 << 16); + try testArgs(u8, i17, -1); + try testArgs(u8, i17, 0); + try testArgs(u16, i17, -1 << 16); + try testArgs(u16, i17, -1); + try testArgs(u16, i17, 0); + try testArgs(u32, i17, -1 << 16); + try testArgs(u32, i17, -1); + try testArgs(u32, i17, 0); + try testArgs(u64, i17, -1 << 16); + try testArgs(u64, i17, -1); + try testArgs(u64, i17, 0); + try testArgs(u128, i17, -1 << 16); + try testArgs(u128, i17, -1); + try testArgs(u128, i17, 0); + try testArgs(u256, i17, -1 << 16); + try testArgs(u256, i17, -1); + try testArgs(u256, i17, 0); + try testArgs(u512, i17, -1 << 16); + try testArgs(u512, i17, -1); + try testArgs(u512, i17, 0); + try testArgs(u1024, i17, -1 << 16); + try testArgs(u1024, i17, -1); + try testArgs(u1024, i17, 0); + try testArgs(i8, u17, 0); + try testArgs(i8, u17, 1 << 0); + try testArgs(i8, u17, 1 << 16); + try testArgs(i16, u17, 0); + try testArgs(i16, u17, 1 << 0); + try testArgs(i16, u17, 1 << 16); + try testArgs(i32, u17, 0); + try testArgs(i32, u17, 1 << 0); + try testArgs(i32, u17, 1 << 16); + try testArgs(i64, u17, 0); + try testArgs(i64, u17, 1 << 0); + try testArgs(i64, u17, 1 << 16); + try testArgs(i128, u17, 0); + try testArgs(i128, u17, 1 << 0); + try testArgs(i128, u17, 1 << 16); + try testArgs(i256, u17, 0); + try testArgs(i256, u17, 1 << 0); + try testArgs(i256, u17, 1 << 16); + try testArgs(i512, u17, 0); + try testArgs(i512, u17, 1 << 0); + try testArgs(i512, u17, 1 << 16); + try testArgs(i1024, u17, 0); + try testArgs(i1024, u17, 1 << 0); + try testArgs(i1024, u17, 1 << 16); + + try testArgs(u8, i31, -1 << 30); + try testArgs(u8, i31, -1); + try testArgs(u8, i31, 0); + try testArgs(u16, i31, -1 << 30); + try testArgs(u16, i31, -1); + try testArgs(u16, i31, 0); + try testArgs(u32, i31, -1 << 30); + try testArgs(u32, i31, -1); + try testArgs(u32, i31, 0); + try testArgs(u64, i31, -1 << 30); + try testArgs(u64, i31, -1); + try testArgs(u64, i31, 0); + try testArgs(u128, i31, -1 << 30); + try testArgs(u128, i31, -1); + try testArgs(u128, i31, 0); + try testArgs(u256, i31, -1 << 30); + try testArgs(u256, i31, -1); + try testArgs(u256, i31, 0); + try testArgs(u512, i31, -1 << 30); + try testArgs(u512, i31, -1); + try testArgs(u512, i31, 0); + try testArgs(u1024, i31, -1 << 30); + try testArgs(u1024, i31, -1); + try testArgs(u1024, i31, 0); + try testArgs(i8, u31, 0); + try testArgs(i8, u31, 1 << 0); + try testArgs(i8, u31, 1 << 30); + try testArgs(i16, u31, 0); + try testArgs(i16, u31, 1 << 0); + try testArgs(i16, u31, 1 << 30); + try testArgs(i32, u31, 0); + try testArgs(i32, u31, 1 << 0); + try testArgs(i32, u31, 1 << 30); + try testArgs(i64, u31, 0); + try testArgs(i64, u31, 1 << 0); + try testArgs(i64, u31, 1 << 30); + try testArgs(i128, u31, 0); + try testArgs(i128, u31, 1 << 0); + try testArgs(i128, u31, 1 << 30); + try testArgs(i256, u31, 0); + try testArgs(i256, u31, 1 << 0); + try testArgs(i256, u31, 1 << 30); + try testArgs(i512, u31, 0); + try testArgs(i512, u31, 1 << 0); + try testArgs(i512, u31, 1 << 30); + try testArgs(i1024, u31, 0); + try testArgs(i1024, u31, 1 << 0); + try testArgs(i1024, u31, 1 << 30); + + try testArgs(u8, i32, -1 << 31); + try testArgs(u8, i32, -1); + try testArgs(u8, i32, 0); + try testArgs(u16, i32, -1 << 31); + try testArgs(u16, i32, -1); + try testArgs(u16, i32, 0); + try testArgs(u32, i32, -1 << 31); + try testArgs(u32, i32, -1); + try testArgs(u32, i32, 0); + try testArgs(u64, i32, -1 << 31); + try testArgs(u64, i32, -1); + try testArgs(u64, i32, 0); + try testArgs(u128, i32, -1 << 31); + try testArgs(u128, i32, -1); + try testArgs(u128, i32, 0); + try testArgs(u256, i32, -1 << 31); + try testArgs(u256, i32, -1); + try testArgs(u256, i32, 0); + try testArgs(u512, i32, -1 << 31); + try testArgs(u512, i32, -1); + try testArgs(u512, i32, 0); + try testArgs(u1024, i32, -1 << 31); + try testArgs(u1024, i32, -1); + try testArgs(u1024, i32, 0); + try testArgs(i8, u32, 0); + try testArgs(i8, u32, 1 << 0); + try testArgs(i8, u32, 1 << 31); + try testArgs(i16, u32, 0); + try testArgs(i16, u32, 1 << 0); + try testArgs(i16, u32, 1 << 31); + try testArgs(i32, u32, 0); + try testArgs(i32, u32, 1 << 0); + try testArgs(i32, u32, 1 << 31); + try testArgs(i64, u32, 0); + try testArgs(i64, u32, 1 << 0); + try testArgs(i64, u32, 1 << 31); + try testArgs(i128, u32, 0); + try testArgs(i128, u32, 1 << 0); + try testArgs(i128, u32, 1 << 31); + try testArgs(i256, u32, 0); + try testArgs(i256, u32, 1 << 0); + try testArgs(i256, u32, 1 << 31); + try testArgs(i512, u32, 0); + try testArgs(i512, u32, 1 << 0); + try testArgs(i512, u32, 1 << 31); + try testArgs(i1024, u32, 0); + try testArgs(i1024, u32, 1 << 0); + try testArgs(i1024, u32, 1 << 31); + + try testArgs(u8, i33, -1 << 32); + try testArgs(u8, i33, -1); + try testArgs(u8, i33, 0); + try testArgs(u16, i33, -1 << 32); + try testArgs(u16, i33, -1); + try testArgs(u16, i33, 0); + try testArgs(u32, i33, -1 << 32); + try testArgs(u32, i33, -1); + try testArgs(u32, i33, 0); + try testArgs(u64, i33, -1 << 32); + try testArgs(u64, i33, -1); + try testArgs(u64, i33, 0); + try testArgs(u128, i33, -1 << 32); + try testArgs(u128, i33, -1); + try testArgs(u128, i33, 0); + try testArgs(u256, i33, -1 << 32); + try testArgs(u256, i33, -1); + try testArgs(u256, i33, 0); + try testArgs(u512, i33, -1 << 32); + try testArgs(u512, i33, -1); + try testArgs(u512, i33, 0); + try testArgs(u1024, i33, -1 << 32); + try testArgs(u1024, i33, -1); + try testArgs(u1024, i33, 0); + try testArgs(i8, u33, 0); + try testArgs(i8, u33, 1 << 0); + try testArgs(i8, u33, 1 << 32); + try testArgs(i16, u33, 0); + try testArgs(i16, u33, 1 << 0); + try testArgs(i16, u33, 1 << 32); + try testArgs(i32, u33, 0); + try testArgs(i32, u33, 1 << 0); + try testArgs(i32, u33, 1 << 32); + try testArgs(i64, u33, 0); + try testArgs(i64, u33, 1 << 0); + try testArgs(i64, u33, 1 << 32); + try testArgs(i128, u33, 0); + try testArgs(i128, u33, 1 << 0); + try testArgs(i128, u33, 1 << 32); + try testArgs(i256, u33, 0); + try testArgs(i256, u33, 1 << 0); + try testArgs(i256, u33, 1 << 32); + try testArgs(i512, u33, 0); + try testArgs(i512, u33, 1 << 0); + try testArgs(i512, u33, 1 << 32); + try testArgs(i1024, u33, 0); + try testArgs(i1024, u33, 1 << 0); + try testArgs(i1024, u33, 1 << 32); + + try testArgs(u8, i63, -1 << 62); + try testArgs(u8, i63, -1); + try testArgs(u8, i63, 0); + try testArgs(u16, i63, -1 << 62); + try testArgs(u16, i63, -1); + try testArgs(u16, i63, 0); + try testArgs(u32, i63, -1 << 62); + try testArgs(u32, i63, -1); + try testArgs(u32, i63, 0); + try testArgs(u64, i63, -1 << 62); + try testArgs(u64, i63, -1); + try testArgs(u64, i63, 0); + try testArgs(u128, i63, -1 << 62); + try testArgs(u128, i63, -1); + try testArgs(u128, i63, 0); + try testArgs(u256, i63, -1 << 62); + try testArgs(u256, i63, -1); + try testArgs(u256, i63, 0); + try testArgs(u512, i63, -1 << 62); + try testArgs(u512, i63, -1); + try testArgs(u512, i63, 0); + try testArgs(u1024, i63, -1 << 62); + try testArgs(u1024, i63, -1); + try testArgs(u1024, i63, 0); + try testArgs(i8, u63, 0); + try testArgs(i8, u63, 1 << 0); + try testArgs(i8, u63, 1 << 62); + try testArgs(i16, u63, 0); + try testArgs(i16, u63, 1 << 0); + try testArgs(i16, u63, 1 << 62); + try testArgs(i32, u63, 0); + try testArgs(i32, u63, 1 << 0); + try testArgs(i32, u63, 1 << 62); + try testArgs(i64, u63, 0); + try testArgs(i64, u63, 1 << 0); + try testArgs(i64, u63, 1 << 62); + try testArgs(i128, u63, 0); + try testArgs(i128, u63, 1 << 0); + try testArgs(i128, u63, 1 << 62); + try testArgs(i256, u63, 0); + try testArgs(i256, u63, 1 << 0); + try testArgs(i256, u63, 1 << 62); + try testArgs(i512, u63, 0); + try testArgs(i512, u63, 1 << 0); + try testArgs(i512, u63, 1 << 62); + try testArgs(i1024, u63, 0); + try testArgs(i1024, u63, 1 << 0); + try testArgs(i1024, u63, 1 << 62); + + try testArgs(u8, i64, -1 << 63); + try testArgs(u8, i64, -1); + try testArgs(u8, i64, 0); + try testArgs(u16, i64, -1 << 63); + try testArgs(u16, i64, -1); + try testArgs(u16, i64, 0); + try testArgs(u32, i64, -1 << 63); + try testArgs(u32, i64, -1); + try testArgs(u32, i64, 0); + try testArgs(u64, i64, -1 << 63); + try testArgs(u64, i64, -1); + try testArgs(u64, i64, 0); + try testArgs(u128, i64, -1 << 63); + try testArgs(u128, i64, -1); + try testArgs(u128, i64, 0); + try testArgs(u256, i64, -1 << 63); + try testArgs(u256, i64, -1); + try testArgs(u256, i64, 0); + try testArgs(u512, i64, -1 << 63); + try testArgs(u512, i64, -1); + try testArgs(u512, i64, 0); + try testArgs(u1024, i64, -1 << 63); + try testArgs(u1024, i64, -1); + try testArgs(u1024, i64, 0); + try testArgs(i8, u64, 0); + try testArgs(i8, u64, 1 << 0); + try testArgs(i8, u64, 1 << 63); + try testArgs(i16, u64, 0); + try testArgs(i16, u64, 1 << 0); + try testArgs(i16, u64, 1 << 63); + try testArgs(i32, u64, 0); + try testArgs(i32, u64, 1 << 0); + try testArgs(i32, u64, 1 << 63); + try testArgs(i64, u64, 0); + try testArgs(i64, u64, 1 << 0); + try testArgs(i64, u64, 1 << 63); + try testArgs(i128, u64, 0); + try testArgs(i128, u64, 1 << 0); + try testArgs(i128, u64, 1 << 63); + try testArgs(i256, u64, 0); + try testArgs(i256, u64, 1 << 0); + try testArgs(i256, u64, 1 << 63); + try testArgs(i512, u64, 0); + try testArgs(i512, u64, 1 << 0); + try testArgs(i512, u64, 1 << 63); + try testArgs(i1024, u64, 0); + try testArgs(i1024, u64, 1 << 0); + try testArgs(i1024, u64, 1 << 63); + + try testArgs(u8, i65, -1 << 64); + try testArgs(u8, i65, -1); + try testArgs(u8, i65, 0); + try testArgs(u16, i65, -1 << 64); + try testArgs(u16, i65, -1); + try testArgs(u16, i65, 0); + try testArgs(u32, i65, -1 << 64); + try testArgs(u32, i65, -1); + try testArgs(u32, i65, 0); + try testArgs(u64, i65, -1 << 64); + try testArgs(u64, i65, -1); + try testArgs(u64, i65, 0); + try testArgs(u128, i65, -1 << 64); + try testArgs(u128, i65, -1); + try testArgs(u128, i65, 0); + try testArgs(u256, i65, -1 << 64); + try testArgs(u256, i65, -1); + try testArgs(u256, i65, 0); + try testArgs(u512, i65, -1 << 64); + try testArgs(u512, i65, -1); + try testArgs(u512, i65, 0); + try testArgs(u1024, i65, -1 << 64); + try testArgs(u1024, i65, -1); + try testArgs(u1024, i65, 0); + try testArgs(i8, u65, 0); + try testArgs(i8, u65, 1 << 0); + try testArgs(i8, u65, 1 << 64); + try testArgs(i16, u65, 0); + try testArgs(i16, u65, 1 << 0); + try testArgs(i16, u65, 1 << 64); + try testArgs(i32, u65, 0); + try testArgs(i32, u65, 1 << 0); + try testArgs(i32, u65, 1 << 64); + try testArgs(i64, u65, 0); + try testArgs(i64, u65, 1 << 0); + try testArgs(i64, u65, 1 << 64); + try testArgs(i128, u65, 0); + try testArgs(i128, u65, 1 << 0); + try testArgs(i128, u65, 1 << 64); + try testArgs(i256, u65, 0); + try testArgs(i256, u65, 1 << 0); + try testArgs(i256, u65, 1 << 64); + try testArgs(i512, u65, 0); + try testArgs(i512, u65, 1 << 0); + try testArgs(i512, u65, 1 << 64); + try testArgs(i1024, u65, 0); + try testArgs(i1024, u65, 1 << 0); + try testArgs(i1024, u65, 1 << 64); + + try testArgs(u8, i95, -1 << 94); + try testArgs(u8, i95, -1); + try testArgs(u8, i95, 0); + try testArgs(u16, i95, -1 << 94); + try testArgs(u16, i95, -1); + try testArgs(u16, i95, 0); + try testArgs(u32, i95, -1 << 94); + try testArgs(u32, i95, -1); + try testArgs(u32, i95, 0); + try testArgs(u64, i95, -1 << 94); + try testArgs(u64, i95, -1); + try testArgs(u64, i95, 0); + try testArgs(u128, i95, -1 << 94); + try testArgs(u128, i95, -1); + try testArgs(u128, i95, 0); + try testArgs(u256, i95, -1 << 94); + try testArgs(u256, i95, -1); + try testArgs(u256, i95, 0); + try testArgs(u512, i95, -1 << 94); + try testArgs(u512, i95, -1); + try testArgs(u512, i95, 0); try testArgs(u1024, i95, -1 << 94); try testArgs(u1024, i95, -1); try testArgs(u1024, i95, 0); try testArgs(i8, u95, 0); try testArgs(i8, u95, 1 << 0); try testArgs(i8, u95, 1 << 94); - try testArgs(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); @@ -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); } -- 2.54.0 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 e53135ccdfa685ef38980a4ae8d37ee1c1f2ce75..1ecc7c7dcb5211250f978fa9fb8baacbc59000e1 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 b1b4b68df9705c5fae59f4e7418b15d83c9babf6..956aa29c09399e77bae841d0ed0b865c231dc9d6 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 e9bcdab1258079ea361ef20d485119ac52b529bf..8eca243c888eda79d400932a0cd1750300ca148a 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 9cc957614cfc70968eab31fb2efd4f62858ecf06..3befdab4bf9f76a648d39fbe448f882b92b78f0f 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 { -- 2.54.0